รับสอนเขียนJAVA , C# , VB.net
24. ภาษา SQL
ภาษา SQL หรือ Structured Query Language เป็นภาษาที่ช่วยจัดการงานพื้นฐานของข้อมูล เช่นการจัดเก็บ การปรับปรุงและการลบข้อมูล ซึ่งสามารถใช้งานได้จากทั้งการพิมพ์แบบโต้ตอบที่ทำให้ได้ผลออกมาทันที(ทำในโปรแกรมฐานข้อมูล) หรือทำแบบฝังไว้ในโปรแกรม(แล้วก็ทำปุ่มกดเอา)เอาก็ได้
มีด้วยกันทั้งหมด 3 ประเภท
1.ภาษานิยามข้อมูล(Data Definition Language, DDL)
เป็นภาษาสำหรับสร้างฐานข้อมูล ประกอบไปด้วยคำสั่งสำหรับสร้างตาราง แก้ไขและลบตาราง สร้าง attribute และกำหนาชนิดข้อมูล (ดูเรื่องการใช้ xampp)
2.ภาษาจัดการข้อมูล(Data Manipulation Language, DML)
เป็นภาษาสำคัญสำหรับเพิ่ม แก้ไข ลบและเรียกดูข้อมูลในฐานข้อมูล ซึ่งมีความสำคัญมากๆและจะได้กล่าวถึงต่อไป
3.ภาษาควบคุมข้อมูล(Data Control Language, DCL)
เป็นคำสั่งสำหรับความปลอดภัยของข้อมูล ใช้สำหรับควบคุมฐานข้อมูลจำกัดคนที่จะเข้าถึงฐานข้อมูล
ภาษาจัดการข้อมูล หรือ DML
ภาษาจัดการข้อมูล คือภาษาสำหรับการจัดการเพิ่ม เปลี่ยนแปลง ลบและค้นหา ซึ่งอย่างที่ได้บอกไปคือฐานข้อมูลสามารถใช้งานได้จากทั้งการพิมพ์แบบโต้ตอบที่ทำให้ได้ผลออกมาทันที(ทำในโปรแกรมฐานข้อมูล)และทำแบบฝังไว้ในโปรแกรม(แล้วก็ทำปุ่มกดเอา) ซึ่งสำหรับการสร้างฐานข้อมูลเราอาจออกใช้การพิมพ์ใน xampp เพื่อความมั่นใจก่อนเอาโค๊ดไปใส่ในโปรแกรมด้วยภาษาที่เขียน ซึ่งจะอยู่ในหน้า SQL

รูป7-1
จะเห็นว่าใน SQL จะมีช่องสำหรับแสดงผลและปุ่มคำสั่งพื้นฐานแต่อย่างไรก็ตามปุ่มคำสั่งพื้นไม่มีครบทุกคำสั่ง ดังนั้นยังจำเป็นที่จะต้องจำคำสั่งหรือเข้าใจคำสั่ง SQL ก่อนเพื่อประสิทธิภาพของการทำงาน
สำหรับการศึกษาโค๊ด SQLจะใช้ตัวอย่างตารางข้อมูลของร้านชาบูชาบู้เป็นตัวอย่าง(ลองสร้างฐานข้อมูลตามนี้แล้วพิมพ์ใน SQL ดู)
chaempID |
gender |
chaempName |
position |
branchID |
branchAddress |
Cha153 |
M |
ตอเต่า เต่าตอ |
ผู้จัดการ |
CB001 |
กรุงเทพ |
Cha110 |
F |
มอม้า คึกคัก |
ผู้จัดการ |
CB005 |
หัวหิน |
Cha393 |
M |
ปอปลา ตากลม |
พนักงาน |
CB003 |
เชียงใหม่ |
Cha652 |
M |
ฌอเฌอ คู่กัน |
พนักงาน |
CB002 |
กระบี่ |
Cha758 |
F |
ชอช้าง อ้วนจัง |
ผู้ช่วยผู้จัดการ |
CB001 |
กรุงเทพ |
Cha405 |
F |
นอหนู มากมาย |
พนักงาน |
CB002 |
กระบี่ |
Cha223 |
M |
มอแมว ไม่มอง |
พนักงาน |
CB005 |
ประจวบคีรีขันธ์ |
คำสั่งสำหรับการเพิ่มข้อมูลลงในฐานข้อมูล
VALUES (‘สิ่งที่ใส่ในฐานข้อมูล 1’, ‘สิ่งที่ใส่ในฐานข้อมูล 2’, … ,‘สิ่งที่ใส่ในฐานข้อมูล n’);
INSERT INTO CHABUCHABU_BRANCH
VALUES (‘CB004’, ‘ปทุมวัน’, ‘กรุงเทพ’, ‘10330’);
สังเกตว่าการเพิ่มข้อมูลลงในตารางจำเป็นต้องใส่ให้ตรงกับตำแหน่งของตารางในฐานข้อมูล เพราะแต่ละช่องในตารางนั้นจะระบุชนิดของข้อมูลเอาไว้ หากใส่ไม่ตรงกันก็จะไม่ถูกต้องมีการเก็บข้อมูลที่ผิดพลาด
หากมีช่องใดช่องที่ไม่ได้ใส่ค่าอะไรลงไปให้เขียนเป็น NULL เช่นเขียนว่า ปทุมวัน ก็รู้แล้วว่าอยู่กรุงเทพ ก็เลยไม่กรอกตรงกรุงเทพลงไป ก็เลยใส่ NULL
INSERT INTO CHABUCHABU_BRANCH
VALUES (‘CB004’, ‘ปทุมวัน’, NULL, ‘10330’);
หรืออาจทำการระบุไว้ก่อนก็ได้ว่าจะให้ใส่แค่ตารางอะไร
INSERT INTO CHABUCHABU_BRANCH (branchID, sub_district, postalCode)
VALUES (‘CB004’, ‘ปทุมวัน’, ‘10330’);
เป็นคำสั่งสำหรับการปรับปรุงเปลี่ยนแปลงข้อมูล
SET แถวที่1 = ข้อมูลที่ต้องการเปลี่ยน1, แถวที่2 = ข้อมูลที่ต้องการเปลี่ยน2 …
WHERE เงื่อนไข(เผื่อมีหลายแถวแต่อยากเปลี่ยนข้อมูลแค่แถวเดียว)
ต้องการปรับฐานเงินเดือนพนักงานขึ้นทุกคน
UPDATE CHABUCHABU_EMPLOYEE
หรืออาจต้องการปรับหน้าที่จากพนักงานเป็นผู้ช่วยผู้จัดการ ก็ต้องใส่เงื่อนไขตรง WHERE
UPDATE CHABUCHABU_EMPLOYEE
SET salary = 20000, position = ‘ผู้ช่วยผู้จัดการ’;
WHERE chaempID = ‘Cha223’;
เป็นคำสั่งสำหรับการลบข้อมูลออกจากตาราง
การลบข้อมูลเมื่อใส่ชื่อตารางลงไปแล้ว หากไม่ต้องการลบทั้งตารางอย่าลืมใส WHERE เด็ดขาด !!! ไม่งั้นมันจะหายไปทั้งหมดทั้งตาราง
DELETE FROM CHABUCHABU_BRANCH
WHERE branchID = ‘CB005’;
คำสั่งสำหรับการเลือก โดยคำสั่งนี้จะมีวิธีการใช้งานหลายวิธีดังนั้นจึงควรจำให้ดีๆ
1. หากต้องการทั้งหมด ทั้งตาราง
เครื่องหมาย * หมายถึงเลือกทุกแถวมาแสดง
SELECT ข้อมูล, ข้อมูล2, … , ข้อมูล n
SELECT chaempName, position
chaempName |
position |
ตอเต่า เต่าตอ |
ผู้จัดการ |
มอม้า คึกคัก |
ผู้จัดการ |
ปอปลา ตากลม |
พนักงาน |
ฌอเฌอ คู่กัน |
พนักงาน |
ชอช้าง อ้วนจัง |
ผู้ช่วยผู้จัดการ |
นอหนู มากมาย |
พนักงาน |
มอแมว ไม่มอง |
พนักงาน |
เป็นการไม่เลือกดูข้อมูลซ้ำ เช่นเราอยากรู้ว่าเราจ้างพนักงานมีตำแหน่งอะไรบ้าง ถ้าเรียกดู position ก็จะมีพนักงานๆ ผู้จัดการๆ ปรากฏขึ้นมาซ้ำๆ ก็ใช้ DISTINCT มาช่วย
4. การเลือกมาดูพร้อมคำนวณ
สมมติอยากรู้ว่าถ้าเพิ่มเงินเดือนพนักงานจะต้องจ่ายเงินมากขึ้นอีกเท่าไหร่ก็เอามาลองขึ้นดูก่อนได้
SELECT chaempName, position, salary*2
5. การเรียกดูพร้อมมีเงื่อนไข
SELECT chaempName, position, salary
6. การใช้ BETWEEN/ NOT BETWEEN
เป็นการค้นหาข้อมูลช่วงที่กำหนด
SELECT chaempName, position, salary
WHERE salary BETWEEN 20000 AND 25000
เพื่อดูเงื่อนที่สมาชิกอยู่กลุ่มที่กำหนดหรือไม่ได้อยู่ในกลุ่มที่หนด
SELECT chaempName, position
WHERE position NOT IN(‘พนักงาน’);
เอาไว้ค้นหาข้อมูลชนิดตัวอักษร ด้วยเครื่องหมาย %
WHERE chaempName LIKE ‘%ต’ //ชื่อขึ้นต้นด้วยตอเต่า
%ตัวอักษร หมายถึงมีอักษรตัวนี้ขึ้นต้น
ตัวอักษร% หมายถึงมีอักษรตัวนี้ตามท้าย
เผื่อบางทีมีคนมาสมัครเป็นพนักงานแต่ยังไม่มีสาขาที่จะลง ก็เลยมี NULL อยู่ในช่องสาขาพอเวลาที่จะหาว่ามีพนักงานคนไหนยังไม่มีสาขาอยู่ก็สามารถค้นหาได้ไม่ต้องมาเลื่อนๆดูพนักงานทุกคน
SELECT chaempName, branchID
10. การเรียกดูแบบเรียงข้อมูล
SELECT chaempName, salary
เรียงจากคนที่ได้เงินมากไปหาคนที่ได้เงินน้อย
ใช้สำหรับการค้นหาว่าทุกคนที่มีตรงเงื่อนไขมีใครบ้าง
SELECT chaempName, salary
WHERE salary > ALL(SELECT salary
WHERE branchID= ‘CB001’;)
ให้หาทุกคนที่เงินเดือนมากกว่าทุกคน ซึ่งต้องมีแค่คนเดียวเท่านั้นที่จะเงินเดือนมากกว่าทุกคน
คล้ายกับ ALL แต่ SOME ต้องการให้แสดงอย่างน้อย1
SELECT chaempName, salary
WHERE salary > SOME(SELECT salary
WHERE branchID= ‘CB001’;)
ให้หาบางคนที่เงินเดือนมากกว่าบางคนซึ่งก็ต้องมีหลายที่มีเงินเดือนมากกว่าบางคน เช่น ผู้จัดการเงินเดือนมากกว่าผู้ช่วย แต่ผู้ช่วยก็เงินเดือนมากกว่าพนักงานดังนั้นก็ต้องแสดงทั้ง ผู้จัดการและผู้ช่วย
เป็นการรวม 2 ตารางเข้าด้วยกัน โดยจะทำการจับคู่แถวที่ตรงกันของตารางมาแสดง โดยใช้คำสั่ง INNER JOIN
SELECT ชื่อตาราง1.ชื่อattribute1, ชื่อตาราง1.ชื่อattribute2
ON ชื่อตาราง1.ชื่อ attribute1 = ชื่อตาราง2.ชื่อ attribute1 (ตรวจอันที่ตรงกัน)
มี 2 ตารางได้แก่ตารางชื่อคนและตารางการสั่งซื้อสินค้า ต้องการทราบว่าคนชื่อนี้สั่งสินค้ารหัสอะไร
SELECT person.perName //ในตาราง person เลือกช่อง perName
ON person.perID = order.perID // perIDในตาราง person ให้เป็นตัวเดียวกับ perID ใน order