SQL Structure Query Language
posted on 11 Jun 2009 00:03 by techinnoreview in MITThttp://www.thai-programmer.com/?DPage=90300909
ภาษา SQL
SQL ได้เข้ามามีบทบาทในงาน Application ฐานข้อมูล การเรียนรู้ SQL จึงมีความจำเป็น สำหรับผุ้ที่ต้องการพัฒนา Application ฐานข้อมูลนั้นขึ้นมาใช้งาน Delphi สนับสนุนการใช้งาน SQL ในการจักการกับข้อมูลในฐานข้อมูล โดยผ่านทาง Component
Query เป้นวิธีการเรียกค้นกลุ่มของข้อมูล ที่ต้องการจากตารางออกมาแสดง โดยจะอยู่ในรุปแบบของคำถาม เช่น มีคนที่เป้นผู้ชายกี่คน หรือ มีคนที่อายุมาหหว่า 50 ปีหรือไม่ มีกี่คน เป็นต้น นอกจากจะเรียกค้นข้อมูลแล้ว เรายังสามารถใช้คำสังในการจัดการกับกลุ่มของข้อมูลเหล่านั้นด้วย เช่น การเรียงลำดับข้อมูล การคำนวนต่างๆ เป็นต้น
SQL ย่อมาจาก Structure Query Language เป็นภาาามาตรฐานที่ใช้ในการเขียน Query เพื่อใช้ในการเรียกค้นข้อมูล โดยรูปประโยคของภาษา SQL นั้นจะอยู่ในรูปแบบ ที่เราสามารถเข้าใจได้ง่าย เนื่องจากมีความไกล้เคียงกับภาษาอังกฤษ ที่เราใช้ในชีวิตประจำวันของเรา
คำสั่งต่างๆ ในภาษา SQL เป็นคำสั่งมาตรฐาน ดังนั้นเราจึงสามารถ นำไปใช้ได้กับหลายๆ ระบบ ไม่ว่าจะเป็น Delphi, C++, Visual Basic หรือเป็นฐานข้อมูลของ Otacle ซึ่งแต่ละระบบ อาจมีการกำหนดรูปแบบการใช้คำสั่งแตกต่างกันออกไป แต่ส่วนใหญ่จะมีรุปแบบที่เกมือนๆ กัน สำหรับใน Delphi นั้น ภาษา SQL เป็นส่วนสำคัญในการทำให้ Application ที่เราสร้างขึ้น มีความสามารถตามที่เราต้องการ และมีประสิทธิภาพมากขึ้นด้วย แต่ทั้งนี้ ขึ้นอยู่กับการ ใช้คำสั่งต่างๆ ในการเขียน Query ด้วย
SQL Explorer
SQL Explorer หรือ Database Explorer เป็นเครื่องมืออีกตัวหนึ่ง ที่อยู่ในกลุ่มของ Delphi ใช้แสดงรายละเอียดต่างๆ ของฐานข้อมูล ไม่ว่าจะเป็น รายละเอียดของฐานข้อมูล Alias หรือ Table เป็นต้น นอกจากนั้นแล้ว เรายังสามารถจัดการกับ ข้อมูลในฐานข้อมูลต่างๆ ได้ด้วย รวมทั้งการใช้คำสัง SQL เพื่อเรียกดูข้อมูลจาก ฐานข้อมูล ตามต้องการ ในการเปิด SQL Explorer ขึ้นมาใช้งาน ทำได้โดยเลือกเมนู Database > Explorer หรือเลือกเมนูของ Windows ที่ Start > Programs > Borland Delphi 7 > SQL Explorer จะปรากฏหน้า Windows ของ SQL Explorer ดังรูป

จากรูป ทางด้านซ้ายมือประกอบไปด้วย Page 2 Page คือ Database และ Dictionary สำหรับ Page Database จะแสดง Alias ทั้งหมดของฐานข้อมูล ที่มีทั้งหมดใน Computer ของเรา โดยอยู่ในรูปแบบของ Tree และ Page Dictionary ใช้ในการนพฐานข้อมูล ตาราง และคุณสมบัติต่างๆ เข้ามาเก็บไว้ใน Data Dictionary
สำหรับการจัดการกับข้อมุลในตารางด้วยคำสั่งภาษา SQL เพื่อดึงข้อมูลต่างๆ ออกมาแสดง ทำได้โดยเลือก Page Enter SQL จากนั้นป้อนคำสั่งลงไปดังรูป

เมื่อป้อนเสร้จแล้วกดปุ่มรูป ฟ้าผ่า ด้านขวามือ ผลลัพธ์ก็จะแสดงออกมาในส่วนล่างของ Page ถ้าเราต้องการแสดงข้อมูลรูปภาพหรือ Memo ก็สามารถทำได้โดย Click ที่ Field รูปภาพ หรือ Memo แล้วเลือกเมนู View > Blob Explorer หรือ Click ที่ Icon
หรือ Double Click ที่ Field ที่ต้องการแสดง ก้จะปรากฏ Dialog Box สำหรับแสดงรุปภาพหรือ Memo ออกมา ดังรูป


เพียงเท่านี้ เราก็สามารถดึงข้อมูล และจัดการกับข้อมูลภายในตาราง ที่เราเลือกได้อย่างง่ายดาย ด้วย SQL Explorer นอกจากนั้นแล้ว เรายังสามารถใช้ SQL Explorer ในการทดสอบข้อมูลก่อน ที่จะนำไปใช้ ในการสร้าง Application บน Delphi ได้อีกด้วย
คำสั่ง SELECT
การเรียกค้น เป้นการค้นหาข้อมูลที่เราต้องการ จากตารางใรฐานข้อมูล ซึ่งเป็นส่วนสำคัญ ในการทำงานด้านฐานข้อมูล ในกรณีที่เรามีข้อมูลอยู่เป็นจำนวนมาก การค้นหาข้อมูล โดยการเข้าถึงข้อมูลทีละ Record ในตารางจะทำให้เสียเวลามาก การเรียกค้นจึงเป้นวิธีการที่เรานำมาใช้เพื่อให้การค้นหาข้อมูล จากฐานข้อมุลเป้นไปอย่างรวดเร็ว รูปแบบประโยคพื้นฐานของภาษา SQL สำหรับการเรียกค้นสามารถทำได้ดังนี้
SELECT FieldName, FieldName,...
FROM TableName, TableName,...
จากรูปแบบข้างบน ถ้าแปลกันอย่างคร่าวๆ คือ เป็นการเลือก Field ต่างๆ จากตารางต่างๆ ที่กำหนด ออกมาแสดง ดังตัวอย่างต่อไปนี เป็นการเรียกค้น แสดง Field ต่างๆ ดังนี้คือ EmpID,Name,Telephone,Sex จาก EmpTable ซึ่งจะต้องทำดังนึ้
SELECT EmpID,Name,Telephone,Sex
FROM EmpTable
ผลการแสดง ก็จะแสดงข้อมูล เพียง EmpID,Name,Telephone,Sex ดังรูป

ถ้าหากต้องการแสดงข้อมุลทั้งหมดทุก Field จะใช้ * แทน หมายถึงการแสดงทุก Field ดังนี้
SELECT *
FROM EmpTable
คำสั่ง WHERE
คำสั่ง SELECT สามารถช่วยให้เราค้นหาข้อมูล ที่ต้องการได้ในระดับหนึ่งเท่านั้น ถ้าต้องการเจาะลึกเข้าไปในรายละเอียด ของแต่ละ Record แล้ว เราจะไม่สามารถเรียกค้นข้อมุลตามที่ต้องการ ได้เลยเช่น ต้องการเรียกค้นเฉพาะเพศชาย เป็นต้น ดังนั้นจึงต้องใช้ WHERE เพื่อค้นหาตามเงื่อนไขข้างต้น รูปแบบดังนี้
WHERE Condition
เช่น
SELECT *
FROM EmpTable
WHERE Sex = 'M'

การกำหนดเงื่อนไขใน Query นั้น เป้นวิธีการเปรียบเทียบค่า ถ้าค่าที่เราเปรียบเทียบนั้น เป็นจริง ก็จะแสดงผลลัพธ์ออกมาตามเงื่อนไข ที่กำหนดไว้ เครื่องหมายที่เราใช้ในการเปรียบเทียบ ค่าใน Query นั้น เป้นเครื่องหมายที่เราคุ้นเคยกันทางคณิตศาสตร์ เช่น =, >, <, <=, >= ส่วนเครื่องหมายไม่เท่ากันใช้ != หรือ <> นอกจากเครื่องหมายทางคณิตศาตร์ ข้างต้นแล้ว เรายังใช้คำสั่งเพื่อใช้ในการเปรียบเทียบค่าหลายค่าด้วย IN ดังนี้
FieldName IN(ค่าที่1,2,3,...,n)
เช่น
SELECT *
FROM EmpTable
WHERE EmpID IN('48010001','48010007','48010009')

BETWEEN...AND เป้นการตรวจสอบว่า อยู่ในช่างของข้อมุลที่กำหนดหรือไม่ มีรูปแบบดังนี้
BETWEEN ค่าที่1 AND ค่าที่2
เช่น
SELECT *
FROM EmpTable
WHERE BirthDay BETWEEN '1/1/2514' AND '1/1/2522'

NOT เป็นการดึงข้อมูลที่นอกเหนือจากสิ่งที่กำหนดไว้ หมายถึงไม่ใช่ค่านี้นั่นเอง มีรูปแบบดังนี้
NOT Condition
เช่น
SELECT *
FROM EmpTable
WHERE BirthDay NOT BETWEEN '1/1/2514' AND '1/1/2522'

LIKE กรณีที่เราต่องการค้นหาข้อมุลที่เป็นอักขระ แต่เราจำข้อมูลลนั้นได้เพียงบางส่วน เราจะใช้ LIKE ในการกำหนดเงื่อนไข รูปแบบดังนี้
LIKE %ข้อมูล%
สำหรับเครื่องหมาย % ตัวด้านหน้า หมายความว่า ขึ้นต้นด้วยอะไรก็ได้ ส่วน % ด้านหลัง หมายความว่าลงท้ายด้วยอะไรก็ได้ หากไม่ใส่ % เช่น LIKE 'ABC%' หมายความว่า ขึ้นต้นด้วย ABC ลงท้ายด้วยอะไรก็ได้ หรือ LIKE '%ABC' ขึ้นต้นด้วยอะไรก็ได้ ตามด้วย ABC หรือ LIKE '%ABC%' ขึ้นต้นด้วยอะไรก็ได้ และลงท้ายด้วยอะไรก็ได้ แต่ต้องมี ABC เป็นต้น
เช่น
SELECT *
FROM EmpTable
WHERE Address LIKE '%Lopburi%'

ตัวเชื่อม AND
AND เป็นตัวเชื่อมเงื่อนไข เมื่อเราต้องการเงื่อนไขเยอะขึ้นเช่น ต้องการข้อมูลคนที่ ไม่เกิดช่วง 1/1/2514 ถึง 1/1/2522 และเป็นคนที่เป็นผู้หญิงเท่านั้น ดังนี้
SELECT *
FROM EmpTable
WHERE BirthDay NOT BETWEEN '1/1/2514' AND '1/1/2522'
AND Sex = 'F'

ตัวเชื่อม OR
OR เป็นตัวเชื่อมเงื่อนไข เมื่อเราต้องการเงื่อนไขเยอะขึ้นเช่น ต้องการข้อมูลคนที่ ไม่เกิดช่วง 1/1/2514 ถึง 1/1/2522 หรือเป็นคนที่เป็นผู้หญิงเท่านั้น ดังนี้
SELECT *
FROM EmpTable
WHERE BirthDay NOT BETWEEN '1/1/2514' AND '1/1/2522'
OR Sex = 'F'

คำสั่ง COUNT
ถ้าเรามีข้อมูลอยู่จำนวนมาก และต้องการนับจำนวนข้อมูลทั้งหมดเหล่านั้น หรือนับข้อมุลที่เป็นจริงตามเงื่อนไขที่กำหนด คงจะเป็นการทำงานที่ยากอยู่พอสมควร ถ้าเราต้องนับข้อมูลเหล่านั้นด้วยตัวเอง ดังนั้น SQL จึงมีคำสั่งที่ช่วยให้เราสามารถนับจำนวนข้อมูล ที่ต้องการได้อย่างง่ายดาย คือ COUNT ผลลัพธ์ที่ได้จาการใช้คำสั่งนี้ จะมีเพียงแค่แถวเดียว โดยจะแสดงข้อมูลจำนวนนับเท่านั้น เนื่องจากเป็นการจัดการกับข้อมูลทั้งหมดเพื่อสรุป เป็นผลลัพธ์ออกมา ซึ่งมีรูปแบบดังนี้
COUNT(*)
เช่น
SELECT COUNT(*)
FROM EmpTable
WHERE BirthDay NOT BETWEEN '1/1/2514' AND '1/1/2522'
AND Sex = 'F'

คำสั่ง MIN, MAX, AVG และ SUM
นอกจากเราจะสามารถนับจำนวน Record ได้แล้ว เรายังสามารถหาค่าสูงสุด หาค่าต่ำสุด หาค่าเฉลี่ย และหาผลรวม ของข้อมูลได้ โดยใช้คำสั่ง MIN, MAX, AVG และ SUM สำหรับ การหาค่าเฉลี่ย และการหาค่าผลรวมนั้น หาได้เฉพาะ Field ชนิดตัวเลขเท่านั้น ส่วนการหาค่าตำสุด และการหาค่าสูงสุด หาได้ทั้ง Field ชนิดตัวเลขและตัวอักษร ซึ่งมีรูปแบบดังนี้
- MIN(FieldName)
- MAX(FieldName)
- AVG(FieldName)
- SUM(FieldName)
เช่น
SELECT MIN(Qty), MAX(Qty), AVG(Qty), SUM(Qty), MIN(DateOrder), MAX(DateOrder)
FROM OrderTable
WHERE BookID = 'T034'

คำสั่ง ORDER BY
การเรียงลำดับข้อมูลจะทำให้ข้อมูล ที่ค้นขึ้นมาดูนั้นเป็นระเบียบ และง่ายต่อการค้นหา ในกรณีที่ผลลัพธ์มีเป็นจำนวนมากอีกด้วย เราจะใช้คำสั่ง ORDER BY เป็นตัวกำหนด ในการจัดเรียงข้อมูล ซึ่งการจัดเรียงใน SQL นั้นมีอยู่ 2 แบบ คือ จากน้อยไปมาก และจากมากไปน้อย การเรียงลำดับข้อมูลทำได้โดย กำหนด Field ที่ต้องการ ให้มีการจัดเรียง ตามหลังคำว่า ORDER BY จากนั้นจะเป็นรูปแบบการเรียงลำดับ โดยจะวางไว้หลัง Field ที่กำหนด ซึ่งมีรูปแบบดังนี้
ORDER BY FieldName DESC | ASC
เช่น
SELECT *
FROM OrderTable
WHERE BookID = 'T017'
ORDER BY Qty ASC

โดย DESC คือการเรียงจากมากไปหาน้อย ส่วน ASC เป็นการเรียงจากน้อยไปหามาก หากไม่กำหนดรูปแบบการเรียง SQL จะกำหนดรูปแบบการเรียงอัตโนมัติให้เป็น จากน้อยไปหามาก คือ ASC นั่นเอง
คำสั่ง GROUP BY
GROUP BY เป็นการ แยกข้อมูลออกเป็นกลุ่มๆ และทำการพิจารณาเฉพาะข้อมูลในกลุ่มนั้นๆ เช่นต้องการหาผลรวมของจำนวนยอดขายโดยสรุปเป็นกลุ่มตามรหัสหนังสือเป็นต้น ซึ่งมีรูปแบบดังนี้
GROUP BY FieldName, FieldName, ...
เช่น
SELECT BookID, COUNT(Qty)
FROM OrderTable
GROUP BY BookID

คำสั่ง HAVING
เราสามารถกำหนดเงื่อนไขในการจัดกลุ่ม ได้โดยใช้ HAVING เช่น ต้องการหาผลรวมของจำนวนยอดขายโดยสรุปเป็นกลุ่มตามรหัสพนักงานขาย โดยมียอดขายมากกว่า 500 เป็นต้น เช่น
SELECT EmpID, COUNT(Qty)
FROM OrderTable
GROUP BY EmpID
HAVING COUNT(Qty) > 500

การ JOIN Table
นอกจากจะเรียกค้นข้อมูลที่ต้องการจากต่ารางเพียงตารางเดียวแล้ว เรายังสามารถเขียนคำสั่ง SQL เพื่อทำการเรียกค้นข้อมูลขากหลายๆ ตารางได้ เราเรียกว่าการ Join หรือการเชื่อมตารางเข้าด้วยกัน เช่นเราต้องการ เชื่อมตาราง EmpTable กับ OrderTableและ BookStrock เพื่อแสดงชื่อพนักงานขายหนังสีอ และจำนวนหนังสือที่ขาย พร้อมชือหนังสือ เช่น
SELECT A.Name, C.Name, B.Qty
FROM EmpTable A,OrderTable B, BookStrock C
WHERE B.EmpID = A.EmpID
AND B.BookID = C.BookID
AND B.Qty > 50
ORDER BY B.Qty

Sub Query
เราสามารถกำหนด Query ภายใน Query ได้ เพื่อเป็นการดึงข้อมูล ออกจากตาราง ตั้งแต่ 1 ตารางขึ้นไป ตามที่ต้องการ เราใช้ Query ย่อยๆ นี้ คล้ายๆ กับ การเรียกข้อมูลจากหลายๆ ตารางข้างต้น เช่น
SELECT BookID,Name
FROM BookStrock
WHERE BookID IN ( SELECT BookID
FROM OrderTable
WHERE Qty > 50)
AND Price > 300

คำสั่ง INSERT
คำสั่ง INSERT มีไว้สำหรับ เพิ่มข้อมูลเข้าไปในตารางใดๆ โดยมีรูปแบบดังนี้
INSERT INTO TableName [(FieldName1, FieldName2, FieldName3, ...)]
VALUES (Value1, Value2, Value3, ...)
เช่น
INSERT INTO EmpTable (EmpID, Name, Telephone, BirthDay, Address, Sex)
VALUES ('48010013', 'Sompoth Doundee', '01-100-5247', '3/22/2510', '154 Moo 2 Phoknoi Punnanicom Sakonnakhon' , 'M')


คำสั่ง UPDATE
คำสั่ง UPDATE เป็นคำสั่งที่ใช้ในการเปลี่ยนแปลงขอ้มูลในตาราง หรือเรียกว่าแก้ไขข้อมูลนั่นเอง มีรูปแบบดังนี้
UPDATE TableName
SET FieldName = Value , FieldName = Value, ....
WHERE Condition
เช่น
UPDATE EmpTable
SET Name = 'Paitoon Sonsomnuek' , Telephone = '01-121-9637'
WHERE EmpID = '48010013'


คำสั่ง DELETE
คำสั่ง DELETE ใช้สำหรับลบ Record ที่เราไม่ต้องการออกจากตาราง ซึ่งมีรูปแบบดังนี้
DELETE FROM TableName
WHERE Condition
เช่น
DELETE FROM EmpTable
WHERE EmpID = '48010013'


edit @ 11 Jun 2009 00:06:02 by Auttapong Maesincee

#1 By MAN-Eater on 2009-09-10 00:53