ntroduction to Structured Query Language
พื้นฐาน คำสั่ง SELECT
ในระบบฐานข้อมมูลนั้น ข้อมูลทั้งหมดจะถูกจัดเก็บไว้ในรูปของ Table และ Columns ตัวอย่างเช่น
ในTable พนักงาน เราจัดเก็บข้อมูล Social Security Number, Name และ Address:
EmployeeAddressTable
SSN
FirstName
LastName
Address
City
State
512687458
Joe
Smith
83
First Street
Howard
Ohio
758420012
Mary
Scott
842 Vine Ave.
Losantiville
Ohio
102254896
Sam
Jones
33 Elm St
.
Paris
New York
876512563
Sarah
Ackerman
440 U.S. 110
Upton
Michigan
จากของมูลข้างบน ถ้าเราต้องการแสดงที่อยู่ของพนักงานทุกคนโดยใช้คำสั้ง "Select" SQL Statement จะเป็นดังนี้ :
SELECT FirstName, LastName, Address, City, State
FROM EmployeeAddressTable;
จาก SQL Statement ข้างบนเราจะได้ผลดังนี้
First Name
Last Name
Address
City
State
Joe
Smith
83
First Street
Howard
Ohio
Mary
Scott
842 Vine Ave.
Losantiville
Ohio
Sam
Jones
33 Elm St
.
Paris
New York
Sarah
Ackerman
440 U.S. 110
Upton
Michigan
จาก Statement ข้างบน เราได้ เราได้ร้องขอข้อมูลทั้งหมดใน TableEmployeeAddress โดยที่เราระบุ Columns ที่เราต้องการไปด้วยใน Statement ดังนั้น ข้อมูลที่เราจะได้รับก็จะถูกจัดเรียงตาม Columns ที่เราส่งไปกับคำสั้ง SELECT นั้นเอง
คำสั่ง Select แบบทั่วไป
SELECT ColumnName1,ColumnName2, ...
FROM TableName;
นอกจากนี้ในคำสั่ง SQL เราสามารถที่จะขอข้อมูลทั้งหมดทุก Columns ใน Table โดยใช้เครื่องหมาย * แทนการพิมพ์ชื่อทุก Columns ในกรณีนี้ข้อมมูลก็จะถูกส่งมาโดยเรียงตามลำดับ Columns ที่ระบุไว้ใน โครงสร้างของ Tabls
SELECT * FROM TableName;
ในการใช้ คำสั่ง SELECT * นั้น เราควรใช้ในกรณีที่เราแน่ใจจริงๆว่าเราต้องการข้อมูลทั้งหมดในทุก Columns มิฉะนั้นแล้วจะทำให้ Database ทำงานเกินความจำเป็น อีกทั้งเวลาในการประมวลผลคำสั้งนานนั้นยังนานกว่า กราใช้ SELECT statement โดยระบุบ Column name อีกด้วย
อย่างไรก็ตาม ใน Database แต่ละตัวก็อาจจะมีโครงสร้างของคำสั่งที่แตกต่างไปบ้างเล็กน้อย แต่โดยทั่วไปแล้ว พื้นฐานคำสั่งหลัก ๆ ก็จะเหมือนๆ กัน ตามมาตราฐาน SQL92 (จะพูดถึงในบทหลังๆ) ดังนั้นทุกครั้งที่เราเริ่มศึกษา Database ตัวใหม่เราก็ควรทีจะอ่าน Help file โดยเฉพาะในส่วนของ Overview Product.
คำสั่ง SELECT แบบมีเงื่อนไข
ก่อนที่เราจะพูดถึงรายละเอียด มาดูตัวอย่าง Table และเครื่องหมายในการเปรียบเทียบก่อน นะครับ (ตัวอย่างนี้ใช้ในการทดลองเท่านั้นไม่มีส่วนเกี่ยวข้องกับผู้ใด):
EmployeeTable
EmployeeID
Salary
Benefits
Position
010
75000
15000
Manager
105
65000
15000
Manager
152
60000
15000
Manager
215
60000
12500
Manager
244
50000
12000
Staff
300
45000
10000
Staff
335
40000
10000
Staff
400
32000
7500
Entry-Level
441
28000
7500
Entry-Level
เครื่องหมายเปรียบเทียบใน SQL
โดยทั่วไปแล้ว เครื่องหมายเปรียบเทียบ ที่ใช้ใน Database หลัก ๆจะมีอยู่ด้วยกัน 6 ชนิด คือ
=
เท่ากับ
<> หรือ !=
ไม่เท่ากับ
<
น้อยกว่า
>
มากกว่า
<=
น้อยกว่าหรือเท่ากับ
>=
มากกว่าหรือเท่ากับ
ในภาษา SQL นั้นเราสามารถสร้างเงื่อนไขของข้อมูลที่เราต้องการได้ โดยใช้เครื่องหมายเปรียบเทียบที่เราต้องการร่วมกับ กับคำสั่ง WHEREโดยใส่ไว้ข้างหลังคำสั่ง SELECTเสมอ โดยเราจะเรียกในส่วนเงื่อนไขนี้ว่า Where clause คราวนี้เรามาดูตัวอย่างการเขียน Where clause เลยนะครับ
จาก Table ตัวอย่างข้างบน สมมุติว่าเราต้องการ ดูข้อมูล EmployeeID ของคนที่มี salary มากกว่า 50,000 SQL statement ก็จะเป็นดังนี้
SELECT EmployeeID
FROM EmployeeTable
WHERE SALARY >= 50000;
โดยเครื่องหมาย >= (มากกว่า หรือ เท่ากับ) จะดึงข้อมูลของ Records ที่มีข้อมูลใน column salary มากกว่า หรือ เท่ากับ 50000 เท่านั้น มาแสดงผล ดังนั้น ผลที่จะแสดงจะเป็นดังนี้:
EmployeeID
---------------------
010
105
152
215
244
นอกจากนี้เรายังสามารถใช้ คำสั่ง Where caluse กับ columns ที่เก็บข้อมูลเป็น Character (Char, Varchar หรือ Text) ได้อีกด้วย. ตัวอย่าง เราต้องการ แสดงผลข้อมูลของคนที่มีตำแหน่ง "Manager" SQL statement ก็จะเป็นดังนี้
SELECT EmployeeID
FROM EmployeeTable
WHERE POSITION = 'Manager';
อย่างไรก็ตาม ในการใช้เครื่องหมาย เปรียบเทียบกับ Text Columns นั้น โดยส่วนมากจะใช้ได้กับ เครื่องหมาย มากกว่า , เท่ากับ หรือ คำสั่ง Like (จะกล่าวต่อไปในบทหลัง ๆ) เท่านั้น โดยค่าของตัวแปรที่เราส่งเข้าไป จะต้องมีเครื่องหมาย Single Quote (') หรือ Double Quote (") ก่อนและหลังตัวแปรเสมอ
ข้อแนะนำ: ในการเขียน App. ที่ดีนั้นทุกครั้งที่เรามี คำสั่ง Where Clause ใน SQL statement นั้นเราควรจะเช็คดูว่า Column ที่เรานำมาเรียบเทียบนั้น มีการสร้าง Index แล้วหรือยัง ถ้าหากว่ายังไม่มี ตัวDatabase engine จะต้องทำการ สแกนหาข้อมูลใน Table ตั้งแต่ต้น ( เราเรียกว่า Table Scan) ซึ่งจะใช้เวลาในการประมวลผลหาข้อมูลนานกว่า ในกรณีที่เราได้สร้าง Index Column ไว้ที่ Columnsนั้น.
การใช้เครื่องหมายเปรียบเทียบมากกว่า 1ตัว : Compound Conditions
คำสั่ง AND เป็นคำสั่งในการเชื่อมเงื่อนไขในกรณีที่เราต้องการข้อมมูลที่มีเงือนไขมากกว่า 1 อย่าง โดยข้อมูลที่จะแสดงผลนั้น จะต้องแมทช์ กับเงือนไข ทั้งหมด ที่เราส่งไป ที่ Database ตัวอย่างเช่น, เราต้องการ ID ของคนที่มีรายได้มากกว่า 40,000 และมี Position เท่ากับ "Staff": SQL Statement จะเป็นดังนี้
SELECT EMPLOYEEID
FROM EMPLOYEETABLE
WHERE SALARY > 40000 AND POSITION = 'Staff';
คำสั่ง OR ป็นคำสั่งที่ใช้ในการเชื่อมเงือนไขเหมือนกับ คำสั่ง AND แต่จะต่างกันตรงที่ ข้อมูลที่จะได้นั้น สามารถเป็นข้อมูลที่ แมทช์กับ เงือนไขใด เงือนไขหนึ่ง ก็ได้ ตัวอย่างเช่น, เราต้องการ ID ของคนที่ได้ Salary น้อยกว่า 40,000 หรือ มี benefits น้อยกว่า 10,000 in benefits SQL Statement จะเป็นดังนี้
SELECT EMPLOYEEID
FROM EMPLOYEETABLE
WHERE SALARY < 40000 OR BENEFITS < 10000;
นอกจากนี้ คำสั่ง AND และคำสั่ง OR ยังสามารถใช้ด้วยกันได้อีกด้วย ตัวอย่างเช่น :
SELECT EMPLOYEEID
FROM EMPLOYEETABLE
WHERE POSITION = 'Manager' AND SALARY > 60000 OR BENEFIT > 12000;
จากชุดคำสั่งข้างบน อย่างแรก SQL จะค้นหาข้อมูลของคนที่มีตำแหน่ง ='Manager' จากนั้นก็จะใช้ผลลัพธ์นั้นหาต่อไปว่ามี records ใดบ้างที่มี ข้อมูลใน column SALARY มากกว่า 60000. แล้วจากนั้นจึง ไปหาข้อมูลใน ตารางใหม่ว่ามี Record ใดบ้างที่มี BENEFITS มากกว่า 12000 บ้าง จากนั้นจึงเอาผลลัพธ์ทั้งสองมารวมกับ. ดังนั้นข้อมูลทั้งหมดที่เราจะได้จาก คำสั่งข้างบนจะเป็นข้อมูล ของคนที่มีตำแหน่ง เป็น Manager และ ได้เงินเดือนมากกว่า 60000 นอกจากนี้ยังรวมไปถึงข้อมูลของคนอื่นที่ไม่ได้เป็น Manager แต่ได้ BENEFITS มากกว่า 12000 อีกด้วย
อย่างไรก็ตาม ในกรณีที่เราต้องการสร้างเงือนไขมากกว่า 1 เงื่อนไขเราควรที่จะใส่ เครื่องหมาย ( และ ) ก่อนและหลังเงือนไข นั้น เพื่อ ง่าย แก่การเข้าใจ และจะช่วยในการแก้ error ในอนาคต ด้วย ตัวอย่าง เช่น .
SELECT EMPLOYEEID
FROM EMPLOYEETABLE
WHERE (POSITION = 'Manager' AND SALARY > 60000) OR BENEFIT > 12000;<
คำสั่ง IN และ BETWEEN
คำสั่ง IN และ BETWEEN. เป็นคำสั่งที่ใช้ในการสร้างเงือนไขที่มากกว่า 1 เงือนไข ในคำสั่งเดียว ตัวอย่างเช่น ถ้าเราต้องการรายชื่อของ คนที่มี ตำแหน่ง เป็น "MANAGER" และ "STAFF" เราสามารถนำมารวมกัน โดยใช้ คำสั่ง IN เช่น
SELECT EMPLOYEEIDNO
FROM EMPLOYEETABLE
WHERE POSITION IN ('Manager','Staff');
ส่วนคำสั่ง BETWEEN จะคล้าย ๆๆกับ กับสั่ง IN แต่จะใช้ในการ สร้างเงือนไขกับ ย่านข้อมูลที่เป็นตัวเลข ตัวอย่างเช่น เราต้องการ ข้อมูลของคนที่มีเงินเดือนระหว่าง 30,000 - 50,000 เราสามารถเขียน ได้ดังนี้
SELECT EMPLOYEEIDNO
FROM EMPLOYEETABLE
WHERE SALARY BETWEEN 30000 AND 50000;
นอกจากนี้เรายังสามารถใช้คำสั่ง NOT ร่วมกับ IN หรือ BETWEEN เพื่อที่จะได้ผลตรงข้ามกัน ดังเช่น
SELECT EMPLOYEEIDNO
FROM EMPLOYEETABLE
WHERE SALARY NOT BETWEEN 30000 AND 50000;