คำสั่ง
SQL เบื้องต้น
mysql
> (เราจะพิมพ์คำสั่งต่างๆลงไป)
ถ้าต้องการออกใช้
mysql
> quit
mysql
> show databases; แสดง
databases
ทั้งหมดที่เราสร้างขึ้น
mysql
> use <ชื่อ
database>
เป็นการเข้าใช้ database นั้นๆ
mysql
> SELECT database(); ดู database ที่เรากำลังใช้อยู่
mysql
> show tables; แสดงตารางทั้งหมดที่เราสร้างขึ้นใน database ที่ use
สร้าง
DATABASE
mysql
> create database <ชื่อdatabase>;
เช่น create database world;
สร้าง
table
mysql
> create table <ชื่อtable> (<ชื่อข้อมูล> <ชนิดข้อมูล>, ... );
เช่น create table human (name VARCHAR(20), birth DATE, sex CHAR(1));
ชนิดข้อมูล
เช่น
VARCHAR(n) - ข้อมูลชนิด string เก็บแบบ linked list เหมาะสมกับข้อมูลที่มีความยาวที่ไม่แน่นอน
CHAR(n) - ข้อมูลชนิด string เก็บแบบ array เหมาะสมกับข้อมูลที่มีความยาวที่แน่นอน
INT - จำนวนเต็ม
DATE - ข้อมูลชนิดพิเศษของ SQL ใช้เก็บวันที่
มีรูปแบบเป็น YYYY-MM-DD
ดูชื่อและชนิดข้อมูลของแต่ละตาราง
mysql
> describe <ชื่อtable>;
การใส่ข้อมูลลงไปใน
table
1. ใช้คำสั่ง load data จากไฟล์ที่เราเตรียมไว้ โดย default จะแบ่งเนื้อหาโดยใช้ tab แบบนี้จะมีปัญหาเรื่องการใช้ข้อมูลชนิด
NULL
ซึ่งใช้ \N แทน
mysql > load data local infile ‘natsu.txt’
into table pet;
2.INSERT
ใส่ทีละข้อมูล
เหมาะกับข้อมูลที่น้อยๆ ที่เราเพิ่มเติมเข้าไป เช่น
mysql > INSERT INTO pet VALUES
(‘natsusencho’, ‘1992-03-25’, ‘M’);
3. *ทำ SQL script คือเตรียมไฟล์คำสั่ง sql ไว้แล้วนำมาทำการ source ทีเดวเช่น
ส่วนตัวแนะนำวิธีนี้เพราะเราเขียนทั้งหมดทีเดียวไม่ต้องมาใส่ทีละคำสั่ง
นึกออกให้เสร็จที่เดียวแล้ว run ทีเดียวทั้งหมด
---- file natsu.sql ----
CREATE TABLE IF NOT EXISTS human (
name
VARCHAR(20),
birth DATE,
sex CHAR(1) );
INSERT INTO human VALUES
( 'NatsuSencho', '1992-03-25', 'M'),
( 'Slime', '1999-03-03', NULL ),
( ‘HeyFemale’ , ‘1993-12-25’ , ‘F’);
----- file natsu.sql -----
หลังจากสร้างเสร็จแล้วก้ลองใช้คำสั่ง
mysql > source natsu.sql;
ก็จะได้ตาราง world หน้าที่มีข้อมูล 3 ตัว
create table IF NOT EXISTS human
คำว่า IF NOT EXISTS หมายถึงการสร้าง table นี้ถ้ายังไม่มี
table
นี้
ถ้ามีแล้วก็ไม่ต้องสร้าง
มีสร้างก็ต้องมีลบ
การลบ table
ใช้คำสั่ง
mysql > DELETE FROM <ชื่อtable>;
หลังจากที่สร้างเป็นแล้วต้องสามารถแก้ไขข้อมูลได้
mysql > UPDATE <ชื่อtable>
SET <ชื่อข้อมูล> = <ข้อมูลใหม่>
WHERE <เงื่อนไขอื่นๆ>;
เช่น UPDATE human SET name = ‘HeyGirl’ WHERE name = ‘HeyFemale’;
การสืบค้นข้อมูล
หรือการดูข้อมูล
SELECT <สิ่งที่ต้องการ>
FROM
<ชื่อtable>
WHERE <เงื่อนไขอื่นๆ>
เช่นต้องการชื่อของข้อมูลในตาราง
human
ที่มีมีเพศชาย
SELECT name
FROM
human
WHERE sex = ‘M’;
ต้องการดูข้อมูลทั้งหมดในตาราง
human
[* คือทั้งหมด]
SELECT *
FROM
human;
ซึ่งการกำหนดเงื่อนไขนั้นเราสามารถใช้ตัวแปรทางคณิตศาสตร์ตรรกะ
มาช่วยได้เช่น
AND และ
OR หรือ
< น้อยกว่า
> มากกว่า
<= น้อยกว่าหรือเท่ากับ
>= มากกว่าหรือเท่ากับ
<> ไม่เท่ากับ
UNION การนำ 2
ตารางมาเชื่อมต่อกันตัดตัวซ้ำ
UNION ALL การนำ 2 ตารางมาเชื่อมกันโดยไม่ตัดตัวซ้ำ
INTERSECT ข้อมูลที่ซ้ำกัน
DISTINCT
คือการตัดตัวที่ซ้ำกันออก
เช่น
SELECT
DISTINCT sex
FROM
human;
ORDER
BY เรียงลำดับข้อมูล
การจัดกลุ่มข้อมูล
เรียงลำดับจากมากไปน้อย
(descending
order)
เช่น
SELECT
*
FROM
human
ORDER BY name;
เรียงลำดับจากน้อยไปมาก
(descending
order)
เช่น
SELECT
*
FROM
human
ORDER BY name DESC;
ถ้าต้องการมากกว่าอันนึงก็ย่อมได้
เช่น
SELECT
*
FROM
human
ORDER BY name , sex DESC ;
แบบนี้จะจัดตามชื่อแบบ
ascending
ก่อนแล้วจะมาจัดเพศแบบ
descending
ทีหลัง
การคำนวณเกี่ยวกับวันที่
ตัวแปร DATE เป็น
string
ที่มีการเก็บเป็นรูปแบบ
YYYY-MM-DD
ตัวแปรชนิด DATE สามารถนำมาเทียบค่ากันได้ในระดับ ASCII
CURDATE()
จะเป็น function ที่ส่งค่าออกมาเป็นข้อมูลรูปแบบ DATE
(YYYY-MM-DD)
YEAR(<ข้อมูลชนิดdate>) ส่งค่าออกมาเป็นข้อมูลรูปแบบของปี (YYYY)
MONTH(<ข้อมูลชนิดdate>) ส่งค่าออกมาเป็นข้อมูลรูปแบบของเดือน
(MM)
DAY(<ข้อมูลชนิดdate>) ส่งค่าออกมาเป็นข้อมูลรูปแบบของวัน (DD)
RIGHT(<ข้อมูลชนิดstring>,
<จำนวนตัวเลข>) ส่งค่าออกมาจำนวนเท่ากับที่เราต้องการตัดออกมาจาก
string
นั้นๆ
โดยเริ่มนับจากทางขวา
LEFT(<ข้อมูลชนิดstring>,
<จำนวนตัวเลข>) ส่งค่าออกมาจำนวนเท่ากับที่เราต้องการตัดออกมาจาก
string
นั้นๆ
โดยเริ่มนับจากทางซ้าย
ตัวอย่าง
ex1.
ต้องการปีของวันปัจจุบัน YEAR( CURDATE() )
ex2.
ต้องการเดือนและวันของปัจจุบัน
RIGHT(
CURDATE(),5 )
[5 ในที่นี้คือนับจากทางขวามือมา YYYY-MM-DD ก็จะได้
MM-DD
มา]
การใช้ตัวแปร
NULL
ในเงื่อนไข
ใช้คำสั่ง xxx IS NOT NULL เช่นต้องการดูสิ่งมีชีิวิตที่ไม่มีเพศ
SELECT *
FROM
human
WHERE sex IS NOT NULL;
การตั้งชื่อเป็นชื่อที่เราต้องการ
หมายถึงเวลา select บางทีคนทั่วไปอาจจะไม่เข้าใจว่าคืออะไร
เราจึงมีคำสั่ง AS ช่วย
เช่น
SELECT name AS ‘NAME-SURNAME’
FROM
human;
COUNT
การนับจำนวน + GROUP BY การจัดกลุ่ม
COUNT ใช้ในการนับจำนวนของตารางต่างๆ จะใช้คู่กับ GROUP BY ได้ดีเพราะจะช่วยในการจัดกลุ่มชุดข้อมูลได้ดีขึ้น
SELECT <อื่นๆ> COUNT(*)
FROM <ชื่อtable>
WHERE <เงื่อนไข>
GROUP BY <จัดกลุ่มโดยใช้อะไร>
เช่นต้องการนับจำนวนคนในแต่ละเพศ
SELECT sex , COUNT(*)
FROM
human
GROUP BY sex;
SET การกำหนดตัวแปร
SET @<ชื่อตัวแปร> = <ค่า>
เช่น SET @A1 =
‘Natsu Sencho’;
SET @A2 = ‘1999-09-09’;
การใช้คำสั่ง
JOIN
การ JOIN คือการนำตารางที่มีความสัมพันธ์ของข้อมูลในแต่ละฟิลมาเชื่อมโยงกัน
การ JOIN มี 2 แบบคือ
1. INNER JOIN
2. OUTER JOIN
|--- LEFT JOIN
|--- RIGHT JOIN
INNER
JOIN
คือการ JOIN โดยไม่สนใจค่า
NULL
จะดูเพียงตัวที่เหมือนกันเท่านั้น
สมมติมีตาราง
2 อันชื่อ Ltable และ Rtable นำมา JOIN กันโดยมีข้อมูลที่ซ้ำกันคือ id
-- JOIN โดยใช้ ON
SELECT *
FROM Ltable INNER JOIN Rtable ON Ltable.id =
Rtable.id;
-- หรือ JOIN โดยใช้
USING
SELECT *
FROM Ltable INNER JOIN Rtable USING (id);
กรณีพิเศษที่ตัวแปรหรือชื่อ
Column
ซ้ำกันก็สามาใช้
NATURAL
JOIN ได้
อย่างในที่นี้เรารุ้ว่า id นั้นซ้ำกันเราก็ไม่ต้องใส่เงื่อนไขใดๆ
แต่ใช้ Natural
Join เข้ามาช่วยโดย
SELECT *
FROM Ltable NATURAL JOIN Rtable;
OUTER
JOIN
LEFT
JOIN
คือการ JOIN โดยใช้ตัวทางซ้ายเป็นหลักคือ
จะแสดงตัวทางซ้ายทุกตัวและนำข้อมูลขวามาเชื่อม
SELECT *
FROM Ltable LEFT JOIN Rtable ON Ltable.id =
Rtable.id;
RIGHT
JOIN
คือการ JOIN โดยใช้ตัวทางขวาเป็นหลักคือ
จะแสดงตัวทางขวาทุกตัวและนำข้อมูลขวามาเชื่อม
SELECT *
FROM Ltable RIGHT JOIN Rtable ON Ltable.id =
Rtable.id;
นอกจากวิธีการ
JOIN
ยังมีวิธีที่เรียกว่า
Cartesian
Product ซึ่งไม่ได้อทิบายไว้ในทีนี้
ถ้ามีโอกาศจะนั่งทำตัวอย่างให้ดูให้เห็นได้ชัดกว่านี้นะครับ
แต่ผมสรุปแบบคร่าวๆ ให้พอดู
รวมคำศัพท์คำสั่งที่เจอเพจนี้
CREATE สร้างdatabase, table
INSERT ใส่ข้อมูล
UPDATE อัพเดตข้อมูล
SELECT ต้องการจะดูอะไรบ้าง
FROM จากที่ไหน
WHERE เงื่อนไขอย่างไร
COUNT(*) นับจำนวนของฟิลข้อมูล
GROUP
BY จัดกลุ่มข้อมูล
ORDER
BY เรียงลำดับข้อมูลโดย
JOIN เชื่อมตาราง
DISTINCT ตัดตัวซ้ำ
AS ใช้คำใหม่ให้กระทัดรัดขึ้น
SET กำหนดตัวแปร
CURDATE()
วันที่ปัจจุบัน
YEAR() ปี
MONTH()
เดือน
DAY() วัน
RIGHT()
ตัดคำจากทางขวา
LEFT() ตัดคำจากทางซ้าย
* ทั้งหมด