SQL (Structured Query Language)
หลังจากทดลองทำ tutorial บนเว็ป w3schools.com พบว่า SQL คือภาษาที่ใช้จัดการ Database โดยมีมาตรฐาน ANSI (American National Standards Institute) แต่การใช้งาน SQL ส่วนแต่ต่างกันเล็กน้อยในเวอชั่นที่ต่างกันออกไปRDBMS (Relational Database Management System)
คือ ระบบการจัดการข้อมูลที่เกี่ยวข้องกัน ซึ่งเป็นรากฐานของ SQL โดยข้อมูลใน RDBMS จะถูกเก็บไว้ในรูปแบบตารางที่มีความสัมพันธ์กันหลายตาราง และแต่ละตารางจะแบ่งย่อยเป็น field หรือ column (แนวตั้ง) และ records หรือ row (แนวนอน)
field จะเป็นส่วนของชื่อกลุ่มข้อมูลนั้นๆ เช่น ชื่อ ที่อยู่ เมือง รหัสไปรษณีย์ ประเทศ ส่วน record จะเป็นตัวข้อมูลตามหัวข้อใน field ที่เรียงกันในแนวนอนในแนวนอน
ตารางแต่ละตารางจะมีชื่อเป็นของตัวเอง เช่น Customers ซึ่งเป็นชื่อตารางด้านล่างนี้ที่มี field ดังนี้ CustomerID, CustomerName, ContactName, Address, City, PostalCode และ Country โดยตารางนี้แสดงข้อมูลออกมาทั้งหมด 9 record
คำสั่งที่ใช้ในการสั่งจะมี semicolon ต่อท้ายเสอมเพื่อให้ง่ายต่อการเขียน script สำหรับรันคำสั่งหลายๆคำสั่งในเวลาเดียวกันได้ โดยคำสั่งจะมีลักษณะดังนี้
แต่ถ้าต้องการแสดงข้อมูลที่ไม่ซ้ำกัน (ตัด record ที่ซ้ำกัน) สามารถใช้ DISTINCT ได้ซึ่งมีรูปแบบดังนี้
เมื่อใช้คำสั่ง SELECT Country FROM Customers; ก่อนที่จะมีการใช้ DISTINCT จะเห็นได้ว่ามี Germany ซ้ำกัน 2 รอบ
คำสังจัดการ Database ส่วนใหญ่จะใช้คำสั่งดังนี้
- SELECT - ดึงข้อมูลจาก database
- UPDATE - updates ข้อมูลบน database
- DELETE - ลบข้อมูลใน database
- INSERT INTO - ใส่ข้อมูลลงใน database
- CREATE DATABASE - สร้าง database ใหม่
- ALTER DATABASE - แก้ไข database
- CREATE TABLE - สร้าง table ใหม่
- ALTER TABLE - แก้ไขรูปแบบ table
- DROP TABLE - ลบ table
- CREATE INDEX - สร้าง keys เพื่อใช้ในการ search
- DROP INDEX - ลบ keys ทิ้ง
SELECT Syntax
ในการเรียกดูข้อมูลปกติสามารถใช้ SELECT ได้ โดยมีรูปแบบดังนี้
รูปแบบบนนี้จะนำข้อมูลมาแสดงจะมีแค่แค่ column ที่เราใส่ไว้เท่านั้นหรือถ้าต้องการแสดง column ทั้งหมด สามารถใช้ * แทนได้
แต่เมื่อใช้ SELECT DISTINCT Country FROM Customers; ข้อมูลตัวที่ซ้ำจะหายไปดังนี้
SQL WHERE Clause
ใช้ในการกรองข้อมูลก่อนนำมาแสดงผล โดยมีรูปแบบดังนี้
ส่วน condition จะเป็นตัวกรองเช่นใน table Customers เราสามารถเรียกข้อมูล เฉพาะข้อมูลที่มี Country = 'Germany' ได้โดยใช้คำสั่ง SELECT * FROM Customers WHERE Country='Germany';
จะได้ตารางดังนี้
นอกจากเครื่องหมาย '=' แล้ว เราสามารถใช้เครื่องหมายอื่นๆ ในการกำหนด condition ได้โดยมีเครื่องหมายดังนี้
- = เท่ากับ
- <> ไม่เท่ากับ
- > มากกว่า (กรณีใช้กับตัวอักษรจะเลือกเฉพาะ String ที่ Sort แล้วมีค่ามากกว่ามาแสดง)
- < น้อยกว่า (กรณีใช้กับตัวอักษรจะเลือกเฉพาะ String ที่ Sort แล้วมีค่าน้อยกว่ามาแสดง)
- >= มากกว่าหรือเท่ากับ (สามารถใช้กับ String ได้)
- <= น้อยกว่าหรือเท่ากับ (สามารถใช้กับ String ได้)
- BETWEEN เลือกเฉพาะข้อมมูลในช่วง โดยมีรูปแบบการใช้ดังนี้
ซึ่งหมายถึงการเลือกข้อมูลเฉพาะในช่วง value1 ถึง value2 เท่านั้น (สามารถใช้กับ String ได้)
- LIKE เลือกเฉพาะข้อมูลที่มีรูปแบบที่กำหนดโดยมีรูปแบบการใช้ดังนี้
โดย pattern สามาถกำหนดได้โดยใช้ % (แทนตัวอักษรที่จะมีกี่ตัวหรือไม่มีก็ได้) และ _ (แทนตัวอักษรตัวเดียว) เช่น
WHERE CustomerName LIKE 'a%' จะหมายถึง String ที่ขึ้นต้นด้วย a หรือ a ตัวเดียว
WHERE CustomerName LIKE '%ion%' จะหมายถึง String ที่มี ion อยู่ในตำแหน่งใดก็ได้
WHERE CustomerName LIKE '_u%' จะหมายถึง String ที่มี u เป็นตัวที่ 2
WHERE CustomerName LIKE 'u_%_%' จะหมายถึง String ที่มี u เป็นตัวแรก และมีความยาว 3 ตัวอักษรขึ้นไป
- IN เลือกข้อมูลเฉพาะที่ระบุเท่านั้น โดยมีรูปแบบดังนี้
เช่น WHERE Country IN ('Germany', 'France', 'UK');
AND, OR and NOT Operators
เป็น Operator ที่ใช้ต่อจาก WHERE โดย
- AND จะหมายถึง ต้องการข้อมูลที่ตรงเงื่อนไขทุกอัน
- OR จะหมายถึง ต้องการข้อมูลที่ตรงกับเงื่อนไขใดเงื่อนไขหนึ่งก็ได้
- NOT จะหายถึง ต้องการข้อมูลที่ไม่ตรงกับเงื่อนไขนั้นๆ
ซึ่งเราสามารถใช้ Operator คละกันหลัง WHERE ได้เช่น
SELECT * FROM Customers WHERE (NOT City = 'Berlin' AND Country = 'Germany') OR Country = 'USA';
จะได้ผลดังนี้
จะเห็นได้ว่าข้อมูลที่ได้ จะมี Country เป็น USA และ Germany แต่ไม่มีข้อมูลที่ City เป็น Berlin
INSERT INTO
เป็นการเพิ่มข้อมูลอันใหม่ลงในตารางโดยจะไม่เขียนทับข้อมูลที่มีอยู่แล้วซึ่งมีรูปแบบดังนี้
ถ้าใส่ Column ไม่ครบข้อมูลในตารางจะขึ้นเป็น null หรือถ้าเราต้องการเพิ่มข้อมูลในทุกๆ column เราไม่จำเป็นต้องระบุ column ให้เว้นว่างไว้ดังนี้
NULL Value
Null value จะเกิดขึ้นเมื่อเราเพิ่มข้อมูลลงใน table ไม่ครบทุก field หรือ column ซึ่งมีวิธีการ Test ดังนี้
- IS NULL จะใช้ตามหลัง WHERE โดยจะเป็นการดึงข้อมูลทั้งหมด ที่เป็น Null ออกมามีรูปแบบการใช้ดังนี้
เช่น WHERE Country IS NULL; จะเลือกข้อมูลที่มี Country เป็น NULL ออกมาแสดง
- IS NOT NULL จะใช้ตามหลัง WHERE โดยจะเป็นการดึงข้อมูลทั้งหมดที่ ไม่ใช่ Null ออกมา
เช่น WHERE Country IS NOT NULL; จะเลือกข้อมูลที่มี Country ไม่เป็น Null ออกมาแสดง
UPDATE Statement
เป็นการเขียนทับข้อมูลที่มีอยู่ โดยจะอัพเดทข้อมูลตัวที่ตรงเงื่อนไขหลัง WHERE ( ถ้าไม่กำหนด WHERE ข้อมูลทุกตัวจะถูก update ไปด้วย ) ซึ่งมีรูปแบบดังนี้
เช่น UPDATE Customers SET ContactName = 'Alfred Schmidt',City= 'Frankfurt' WHERE CustomerID = 1;
จะเป็นการ อัพเดท ค่า ContactName และ City ที่ CussstomerID เป็น 1
DELETE Statement
เป็นการลบ ข้อมูลในตารางที่ตรงตามเงื่อนไขหลัง WHERE ทิ้ง ถ้าไม่มี WHERE ข้อมูลในตารางทั้งหมดซึ่งมีรูปแบบการใช้งานดังนี้
เช่น DELETE FROM Customers WHERE City = 'Berlin; จะหมายถึงลบข้อมูลใน Table Customers ที่มี City เป็น Berlin
SELECT TOP Clause
เป็นการเลือกแสดงข้อมูลตัวอย่างจากข้อมูลทั้งหมดตามจำนวนที่ระบุ ซึ่งเหมาะสมกับ Database ที่มีขนาดใหญ่ แต่การใช้งานอาาจะต่างกันเมื่อใช้ version ที่ต่างกัน
- SQL Server / MS Access Syntax
เป็นการเลือกข้อมูลได้ทั้งแบบ % ของข้อมูลทั้งหมด หรือ จะกำหนดเป็นตัวเลขก็ได้เช่น
SELECT TOP 50 * FROM Customers; จะเป็นการเอาตัวอย่างแค่ 50 ตัวแรกของ table Customers มาแสดงเท่านั้น
SELECT TOP 50 PERCENT * FROM Customers; จะเป็นการเอาตัวอย่างแค่ 50 % แรกของ table Customers มาแสดงเท่านั้น
- MySQL Syntax
เป็นการเลือกข้อมูลมาตามจำนวนเลขที่อยู่หลัง LIMIT
- Oracle Syntax
สามารถเลือกจำนวนตัวอย่างข้อมูลโดยใข้ ROWNUM <= number หลัง WHERE
Join
เมื่อต้องการสร้างตารางใหม่รูปแบบใหม่จาก 2 ตารางสามารถใช้ Join ในการสร้างตารางขึ้นมาใหม่ที่มี่ Column มาจากตารางทั้ง 2 โดยจะมีการนำตารางทั้งสองมา Cross กันทำให้เกิดตารางรูปแบบที่มี Column ของทั้ง 2 ตารางและมี จำนวนข้อมูล = จำนวณข้อมูลจากตาราง1 x จำนวณข้อมูลจากตาราง2
แต่ในการ join ถ้าต้องการให้ข้อมูลมีความหมาย ควรจะมี key ที่ชี้ข้อมูลไปยัง table อีกอัน
ลักษณะการ Inner join (การ join ที่เอาแต่ข้อมมูลที่ทับซ้อนกันมาแสดง) มีรูปแบบการเขียนดังนี้
แต่ในการ join ถ้าต้องการให้ข้อมูลมีความหมาย ควรจะมี key ที่ชี้ข้อมูลไปยัง table อีกอัน
ลักษณะการ Inner join (การ join ที่เอาแต่ข้อมมูลที่ทับซ้อนกันมาแสดง) มีรูปแบบการเขียนดังนี้
กำหนดให้ตารางแรกมีชื่อว่า table1 และ ตารางที่ 2 มีชื่อว่า table2
จะได้ตารางใหม่ดังนี้
จะเห็นได้ว่ามีจำนวณข้อมูลเพิ่มมากขึ้น แต่วิธีนี้จะมีประโยชน์เมื่อมี key ที่ใช้ระบุข้อมูลที่อยู่อีกตาราง ดังนี้ เมื่อ Cross แล้วต้องบอกเงื่อนไขในการนำข้อมูลมาแสดงผลด้วย ซึ่งในกรณีนี้ จะเลือกข้อมูลมาเฉพาะ ที่มี table1.Shirt_color = table2.Index เท่านั้นและ มี Column แค่ Name Age และ Shirt_color เท่านั้นซึ่งสามารถเขียนในรูปแบบ SQL ได้ดังนี้
SELECT table1.Name, table1.Age, table2.Shirt_color FROM table1
INNER JOIN table2 ON table1.Shirt_color = table2.Index;
ผลลัพธ์จะออกมาเป็น
และเมื่อลองกับ table ในเว็ป w3schools.com จะได้ดังนี้
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
จะได้ตารางดังนี้
ซึ่งมาจากตาราง Order
และตาราง Customers