วันพฤหัสบดีที่ 9 กันยายน พ.ศ. 2553

SQL

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;