คำสั่ง SQL เบื้องต้น
สร้าง 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 ใส่ทีละข้อมูล เหมาะกับข้อมูลที่น้อยๆ ที่เราเพิ่มเติมเข้าไป เช่น
2.INSERT ใส่ทีละข้อมูล เหมาะกับข้อมูลที่น้อยๆ ที่เราเพิ่มเติมเข้าไป เช่น
mysql > INSERT INTO pet VALUES
(‘natsusencho’, ‘1992-03-25’, ‘M’);
3. *ทำ SQL script คือเตรียมไฟล์คำสั่ง sql ไว้แล้วนำมาทำการ source ทีเดวเช่น
ส่วนตัวแนะนำวิธีนี้เพราะเราเขียนทั้งหมดทีเดียวไม่ต้องมาใส่ทีละคำสั่ง นึกออกให้เสร็จที่เดียวแล้ว run ทีเดียวทั้งหมด
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 หรือ
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() ตัดคำจากทางซ้าย
* ทั้งหมด
ไม่มีความคิดเห็น:
แสดงความคิดเห็น