SQL

คำสั่ง SQL เบื้องต้น by natsu ก่อนอื่นต้องบอกเลยครับว่ามันไม่ได้ดีมากนักสำหรับหน้าเวปนี้เพราะผมอ่านหนังสือและสรุปอย่างคร่าวๆ แล้วรูปแบบมันอาจจะเพี้ยนๆ เพราะผมเขียนใน PAGE แล้วเอา COPY and PASTE ลงเล้ย แบบไม่แก้ไขอันใด tab มั่วไปหมด ถ้าผิดพลาดประการใดต้องขออภัยด้วยครับ ภาษา SQL นั้นไม่เป็น case sensitive (ตัวเล็ก ตัวใหญ่มีค่าเท่ากัน) และในแต่ละคำสั่งจะถูกปิดด้วย ; (semi-colon) (วิธีการลง SQL ใน Window7 : http://natsusencho.blogspot.com/2012/07/mysql-window7.html) มาเริ่มกันเลย การเข้าใช้ให้เราเปิด cmd ขึ้นมาและ $ mysql -u root -p จากนั้นใส่ password ลงไป จะเข้าสู่การใช้
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() ตัดคำจากทางซ้าย * ทั้งหมด

ไม่มีความคิดเห็น:

แสดงความคิดเห็น