วันพุธที่ 17 ธันวาคม พ.ศ. 2557

คำสั่ง 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 > quitmysql > 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() ตัดคำจากทางซ้าย
* ทั้งหมด

ที่มา : http://natsusencho.blogspot.com/2012/08/sql-language.html

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

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