บทที่ 10 ภาษามาตรฐานสำหรับการนิยามข้อมูลและการใช้ข้อมูล (Structure Query Language : SQL)
SQL (Structured Query Language) เป็นภาษามาตราฐานบนระบบฐานข้อมูลเชิงสัมพันธ์ ปัจจุบันมีซอฟต์แวร์ระบบจัดการฐานข้อมูล (DBMS) ที่ สนับสนุนการใช้คำสั่ง SQL เช่น ORACLE, DB2, MS-SQL, MS-Access นอกจากนี้ภาษา SQL ถูกนำมาใช้เขียนร่วมกับโปรแกรมภาษา ต่างๆ เช่น ภาษา C/C++, Visual Basic ,PHP, Java เป็นต้น
ประเภทของคำสั่งในภาษา SQL ภาษานิยามข้อมูล (Data Definition Language : DDL) เป็นคำสั่งที่ใช้ในการสร้างฐานข้อมูล กำหนดโครงสร้างข้อมูลว่ามีคอลัมย์ใด ชนิดของข้อมูล รวมทั้งการเปลี่ยนแปลงตาราง และการสร้างดัชนี คำสั่ง : CREATE, DROP, ALTER ภาษาจัดการข้อมูล (Data Manipulation Language :DML) เป็นคำสั่งที่ใช้ในการเรียกใช้ เพิ่ม ลบ และเปลี่ยนแปลงข้อมูลในตาราง คำสั่ง : SELECT, INSERT, UPDATE, DELETE ภาษาควบคุมข้อมูล (Data Control Language : DCL) เป็นคำสั่งที่ใช้ในการกำหนดสิทธิการอนุญาติ หรือ ยกเลิก การเข้าถึงฐานข้อมูล เพื่อป้องกันความปลอดภัยของฐานข้อมูล คำสั่ง : GRANT, REVOKE
(Structure Query Language) ภาษา SQL (Structure Query Language) ภาษานิยามข้อมูล (DDL) CREATE ALTER DROP ภาษาจัดการข้อมูล (DML) SELECT UPDATE INSERT DELETE ภาษาควบคุมข้อมูล (DCL) GRANT REVOKE
ภาษาสำหรับการนิยามข้อมูล DDL คำสั่ง การทำงาน CREAT TABLE นิยามโครงสร้างข้อมูลในตารางที่สร้างขึ้น DROP TABLE ลบโครงสร้างข้อมูลออกจากระบบ ALTER TABLE แก้ไขปรับปรุงโครงสร้างตาราง
รายละเอียดข้อมูล (Data Dictionary) ของตารางที่ต้องการสร้างเพื่อเก็บข้อมูลในฐานข้อมูล ชื่อตาราง ชื่อคอลัมน์ ประเภทข้อมูล ความหมาย อ้างถึง CUSTOMER PRODUCT IDcustomer (PK) Char (6) รหัสลูกค้า C_name Varchar(40) ชื่อลูกค้า C_address Varchar(30) ที่อยู่ C_Telephone Varchar(10) เบอร์โทรศัพท์ C_Creditlim number วงเงินการให้สินเชื่อ C_currbal ยอดสินเชื่อคงเหลือ IDproduct(PK) Char (6) รหัสสินค้า p_name Varchar(20) ชื่อสินค้า p_unitprice number ราคาต่อหน่วย(บาท) P_onhand จำนวนสินค้าคงเหลือ P_orderpt จำนวนต่ำสุดที่ต้องสั่งซื้อเพิ่ม P_orderqty จำนวนที่ต้องสั่งซื้อเพิ่ม
รายละเอียดข้อมูล (Data Dictionary) ชื่อเทเบิล ชื่อคอลัมน์ ประเภทข้อมูล ความหมาย อ้างถึง EMPLOYEE ORDER IDemployee (PK) Char (6) รหัสพนักงาน e_name Varchar(40) ชื่อพนักงานขาย e_salary number(8,2) เงินเดือนปัจจุบัน e_address Varchar(30) ที่อยู่ e_telephone Char(10) เบอร์โทรศัพท์ IDorder(PK) Char (6) รหัสใบสั่งซื้อสินค้า IDproduct รหัสสินค้า product qty number จำนวนสินค้าที่สั่งซื้อ discount ส่วนลด(%) IDcustomer รหัสลูกค้า Customer IDemployee รหัสพนักงานขาย employee
การสร้างตาราง (Create Table) การสร้างตารางด้วย SQL สามารถทำได้ด้วยคำสั่ง CREATE TABLE ซึ่งกำหนดลักษณะของข้อมูลเป็นคอลัมน์ โดยมีรูปแบบดังนี้ รูปแบบคำสั่ง CREATE TABLE <Table_name> ( ชื่อคอลัมย์ 1 ประเภทข้อมูล [เงื่อนไข] ชื่อคอลัมย์ 2 ประเภทข้อมูล [เงื่อนไข] … … … [PRIMARY KEY (ชื่อคอลัมน์,)] [FOREIGN KEY (ชื่อคอลัมน์) REFERENCES ชื่อตารางที่อ้างอิง(ชื่อคอลัมน์)]);
โจทย์ >> สร้างตาราง customer ตามที่ได้ออกแบบรายละเอียดตารางไว้ CREATE TABLE employee ( em_id char(6) NOT NULL UNIQUE, em_name varchar(20) NOT NULL, em_salary integer em_address varchar(100), PRIMARY KEY (em_id) ); SQL คำอธิบาย กำหนดให้ em_id เป็นคีย์หลัก ดังนั้นจะใส่ PRIMARY KEY (em_id) เข้าไปด้วย และในคอลัมน์ em_id ต้องมีค่าเสมอ(NOT NULL) และมีค่าไม่ซ้ำกัน (UNIQUE) และในแต่ละแถวคอลัมน์ em_name จะต้องมีค่าเสมอ (NOT NULL) เนื่องจากความเป็นจริงที่ข้อมูลพนักงานทุกคนต้องมีชื่อ
การเปลี่ยนโครงสร้างของตาราง (Alter Table) เพิ่มคอลัมน์ให้กับตาราง ใช้คำสั่ง ADD ALTER TABLE <ชื่อตารางที่จะเปลี่ยนแปรง> ADD <ชื่อคอลัมน์> <ประเภทข้อมูล> ; รูปแบบ >> โจทย์ เพิ่มคอลัมน์ที่เป็นรหัสแผนก(dep_id) ในตาราง employee เพื่อบอกว่าพนักงานสังกัดอยู่แผนกใด SQL >> ALTER TABLE employee ADD dep_id char(6) ;
การเปลี่ยนโครงสร้างของตาราง (Alter Table) ลบคอลัมน์ใช้คำสั่ง DROP รูปแบบ >> ALTER TABLE <ชื่อตารางที่ต้องการลบ> DROP <ชื่อคอลัมน์ที่ต้องการลบ> ; โจทย์ >> ลบคอลัมน์ที่เป็นรหัสแผนก (dep_id) ในตาราง employee SQL >> ALTER TABLE employee DROP dep_id ;
การแก้ไขคอลัมน์ในตาราง (MODIFY) รูปแบบ >> ALTER TABLE <ชื่อตารางที่ต้องการแก้ไข> MODIFY <ชื่อคอลัมน์> <ประเภทของข้อมูล> ; โจทย์ >> เปลี่ยนขนาดของข้อมูลในคอลัมน์ dep_id ในตาราง employee จากขนาด 6 ตัวอักษร เป็นขนาด 5 ตัวอักษร SQL >> ALTER TABLE employee MODIFY (dep_id char(5)) ;
การลบตารางออกจากฐานข้อมูล (Drop Table) รูปแบบ DROP TABLE <ชื่อตารางที่ต้องการลบ>; โจทย์ ต้องการลบเทเบิล ORDER ออกจากฐานข้อมูล DROP TABLE ORDER; DROP TABLE Order SQL
ภาษาสำหรับจัดการข้อมูล (DML) คำสั่ง ความหมาย SELECT เรียกดูข้อมูลในที่เก็บในฐานข้อมูล UPDATE แก้ไขข้อมูลที่เก็บในฐานข้อมูล INSERT เพิ่มข้อมูลที่ต้องการเก็บในฐานข้อมูล DELETE ลบข้อมูลที่ไม่ต้องการในฐานข้อมูล
คำสั่งเรียกค้นข้อมูล (SELECT)
ตัวดำเนินการเชิงเปรียบเทียบ(Comparison Operators) ความหมาย เครื่องหมายที่ใช้เปรียบเทียบ ตัวอย่าง เท่ากับ = X = Y ไม่เท่ากับ < > X < > Y มากกว่า > X > Y น้อยกว่า < X < Y มากกว่าหรือเท่ากับ >= X >= Y น้อยกว่าหรือเท่ากับ <= X <= Y
เครื่องหมาย Operator ที่ใช้สัญลักษณ์ทางตรรกศาสตร์ ความหมาย AND ใช้เชื่อมการกระทำ(Operand) ตั้งแต่ 2 ตัว ขึ้นไป ซึ่งนิพจน์จะเป็นจริงก็ต่อเมื่อทุก Operand จะต้องเป็นจริง OR ใช้เชื่อมการกระทำ(Operand) ตั้งแต่ 2 ตัว ขึ้นไป ซึ่งนิพจน์จะเป็นจริงก็ต่อเมื่อทุก Operand ตัวใดตัวหนึ่งหรือทุกตัวเป็นจริง NOT ใช้นำหน้าการกระทำ(Operand) ถ้านำหน้า Operand ที่เป็นจริง จะทำให้นิพจน์เป็นเท็จ ถ้านำหน้า Operand ที่เป็นเท็จ จะทำให้นิพจน์เป็นจริง
การสอบถามข้อมูล (SELECT) FROM <ชื่อตาราง,…> WHERE <เงื่อนไขที่ต้องการระบุ> รูปแบบ >> SELECT เป็นคำสั่งให้ทำการเรียกค้นข้อมูลในคอลัมน์ของตาราง โดยสามารถระบุได้ 1 หรือมากว่า 1 คอลัมน์ ถ้ามากกว่าให้คั่นด้วยเครื่องหมาย , ถ้าต้องการเลือกทุกคอลัมน์ ให้ ใส่เครื่องหมาย * FROM บอกชื่อตารางที่ต้องการดูข้อมูล WHERE ใช้ในการระบุเงื่อนไขที่ต้องการค้น
คำสั่ง SQL อย่างง่ายจากตารางเดียว 1) คำสั่งให้แสดงข้อมูลของคอลัมน์ที่ต้องการ SELECT ชื่อคอลัมน์ที่1,ชื่อคอลัมน์ที่2,…. FROM ชื่อตาราง; 2) คำสั่งให้แสดงข้อมูลของทุกๆ คอลัมน์ SELECT * FROM ชื่อตาราง;
พนักงาน (รหัสพนักงาน,ชื่อสกุล,ที่อยู่,เบอร์โทร,เงินเดือน) ตัวอย่าง พนักงาน (รหัสพนักงาน,ชื่อสกุล,ที่อยู่,เบอร์โทร,เงินเดือน) โจทย์ : ให้แสดง รหัสพนักงาน และ ชื่อสกุลของพนักงานทั้งหมด SELECT รหัสพนักงาน,ชื่อสกุล FROM พนักงาน; โจทย์ : ให้แสดงข้อมูลของพนักงานทั้งหมด SELECT * FROM พนักงาน;
คำสั่งแสดงข้อมูลที่ไม่ซ้ำกันด้วย DISTINCT รูปแบบ >> SELECT DISTINCT ชื่อคอลัมน์ FROM ชื่อตาราง; โจทย์ >> ให้แสดงข้อมูลที่อยู่พนักงานของบริษัทว่าอยู่ที่ใดบ้าง พนักงาน (รหัสพนักงาน,ชื่อสกุล,ที่อยู่,เบอร์โทร) SELECT DISTINCT ที่อยู่ FROM พนักงาน; SQL >>
จัดเรียงข้อมูลด้วย ORDER BY ORDER BY ชื่อคอลัมน์ [DESC] ; เรียงจากมากไปน้อย รูปแบบคำสั่ง >> ORDER BY ชื่อคอลัมน์ ; เรียงจากน้อยไปมาก โจทย์ >> ต้องการทราบ รหัสและชื่อ ของลูกค้าทั้งหมด โดยแสดงผลแบบเรียง ตามลำดับชื่อลูกค้าจากน้อยไปหามาก และ มากไปน้อย สคีมา(โครงสร้าง) ของตาราง : พนักงาน (รหัส, ชื่อ, ที่อยู่, เบอร์โทร,เงินเดือน) SELECT รหัส , ชื่อ FROM พนักงาน ORDER BY รหัส; SQL น้อยไปหามาก SELECT รหัส, ชื่อ FROM พนักงาน ORDER BY ขื่อ DESC; SQL มากไปหาน้อย
การจัดกลุ่มข้อมูล (SELECT… GROUP BY) FROM ชื่อตาราง GROP BY ชื่อคอลัมน์; รูปแบบ >> โจทย์ >> ต้องการทราบ รหัส ชื่อสกุล ที่อยู่ ของพนักงาน และให้ เรียงข้อมูลตาม ชื่อสกุล พนักงาน (รหัสพนักงาน,ชื่อสกุล,ที่อยู่,เบอร์โทร,เงินเดือน) SELECT รหัส,ชื่อสกุล,ที่อยู่ FROM พนักงาน GROUP BY ที่อยู่; SQL >>
การสอบถามข้อมูลแบบมีเงื่อนไข SELECT ชื่อคอลัมน์ FROM ชื่อตาราง WHERE เงื่อนไขที่ต้องการ ; รูปแบบ >> โจทย์ >> ต้องการข้อมูลทั้งหมดของลูกค้าเฉพาะที่อาศัยอยู่ในBangkok SQL >> SELECT * FROM customer WHERE address = ‘Bangkok’ ;
ระบุหลายเงื่อนไขโดยใช้ OR โจทย์ >> สอบถามข้อมูลของลูกค้าที่อยู่ Bangkok และมีวงเงินมากกว่า 500,000 บาท SELECT * FROM customer WHERE (C_address = ‘Bangkok’) AND (C_creditlim> 500000) ; SQL >> โจทย์ >> สอบถามข้อมูลของลูกค้าที่อยู่ Bangkok หรือมีวงเงินมากกว่า 500,000 บาท SQL >> SELECT * FROM customer WHERE (C_address = ‘Bangkok’) OR (C_creditlim> 500000) ;
ระบุหลายเงื่อนไขโดยใช้ IN โจทย์ >> สอบถามข้อมูลของลูกค้าที่อยู่ Bangkok, Rayong หรือ Ayuthaya SELECT * FROM customer WHERE (C_address = ‘Bangkok’) OR (C_address = ‘Rayong’) OR (C_address = ‘Ayuthaya’) ; SQL 1 >> SELECT * FROM customer WHERE address IN (‘Bangkok’, ‘Rayong’ , ‘Ayuthaya’) SQL 2 >>
ระบุหลายเงื่อนไขโดยใช้ NOT โจทย์ >> สอบถามข้อมูลของลูกค้าที่ไม่อยู่ในBangkok SELECT * FROM customer WHERE C_address <> ‘Bangkok’ ; SQL1 >> SELECT * FROM customer WHERE NOT C_address = ‘Bangkok’; SQL2 >>
เลือกข้อมูลที่อยู่ในช่วงที่ต้องการด้วย BETWEEN…AND SELECT ชื่อคอลัมน์ FROM ชื่อตาราง WHERE ชื่อคอลัมน์ BETWEEN ค่าที่ 1 AND ค่าที่ 2 ; รูปแบบ >> *** สำหรับเลือกแสดงข้อมูลที่อยู่ระหว่างค่าที่กำหนด(values1) และ values2*** SELECT ชื่อคอลัมน์ FROM ชื่อตาราง WHERE ชื่อคอลัมน์ NOT BETWEEN ค่าที่ 1 AND ค่าที่ 2 ; รูปแบบ >> *** สำหรับเลือกแสดงข้อมูลที่มีค่าไม่อยู่ระหว่างค่าที่กำหนด***
เลือกข้อมูลที่อยู่ในช่วงที่ต้องการด้วย BETWEEN…AND โจทย์ >> แสดงชื่อของพนักงานที่มีเงินเดือนอยู่ระหว่าง 3,500 และ 5,000 บาท SELECT e_name FROM employee WHERE (salary >= 3500) AND (salary <= 5000) ; SQL1 >> SELECT e_name FROM employee WHERE salary BETWEEN 3500 AND 5000 ; SQL2 >>
เลือกข้อมูลที่ตรงกับความต้องการด้วย LIKE คำสั่ง SQL สามารถกำหนดเงื่อนไขเพื่อเลือกข้อมูลโดยใช้คำว่า “LIKE” และ ‘_’ โดยมีรายละเอียดดังนี้ เครื่องหมาย/คำ การแทนค่า ‘_’ แทนตัวอักษรใดๆ 1 ตัวอักษร ‘%’ แทนตัวอักษรกี่ตัวก็ได้ หรือเป็น 0 (ไม่มีข้อมูลเลยก็ได้)
เลือกข้อมูลที่ตรงกับความต้องการด้วย LIKE โจทย์ >> แสดงชื่อของลูกค้าที่ขึ้นต้นด้วย ‘So’ C_name ------------ Sopha Somchai Somsak SELECT C_name FROM customer WHERE c_name like ‘So%’ ; ผลลัพธ์ >> SQL1 >> โจทย์ >> แสดงชื่อของลูกค้าที่ขึ้นต้นด้วย ‘Si’ และตามด้วยอักษรได้ก็ได้ 3 ตัว SELECT C_name FROM customer WHERE c_name like ‘Si_ _ _’ ; C_name ------------ Silee SQL1 >> ผลลัพธ์ >>
ฟังก์ชั่นสำหรับหาค่าของกลุ่มข้อมูล หน้าที่ AVG ผลลัพธ์เป็นค่าเฉลี่ยของข้อมูลทั้งกลุ่ม SUM ผลลัพธ์เป็นผลบวกของข้อมูลทั้งกลุ่ม MIN ผลลัพธ์เป็นค่าน้อยที่สุดของข้อมูลทั้งกลุ่ม MAX ผลลัพธ์เป็นค่ามากที่สุดของข้อมูลทั้งกลุ่ม COUNT ผลลัพธ์เป็นจำนวนรายการของข้อมูลทั้งกลุ่ม รูปแบบ >> SELECT Function (ชื่อคอลัมน์ ) FROM ชื่อตาราง ;
หาค่าเฉลี่ยด้วย AVG() , MAX() โจทย์ >> ต้องการทราบค่าเฉลี่ยเงินเดือนพนักงานทุกคน AVG(salary) ------------ 4971 SELECT AVG(salary) FROM employee ; ผลลัพธ์ >> SQL1 >> โจทย์ >> ต้องการทราบวงเงินสูงสุดที่ให้แก่ลูกค้ามีค่าเท่าไหร่ MAX(C_creditlim) ------------ 900000 SELECT MAX(C_creditlim) FROM Customer ; ผลลัพธ์ >> SQL1 >>
การนับจำนวน COUNT, DISTINCT โจทย์ >> ต้องการทราบจำนวนลูกค้าของบริษัท count(*) ------------ 9 SELECT COUNT(*) FROM customer ; ผลลัพธ์ >> SQL1 >> แสดงจำนวนรายการสั่งซื้อสินค้าทั้งหมด พร้อมระบุจำนวนรายการสินค้าทั้งหมดที่มีการ สั่งซื้อ โจทย์ >> SELECT COUNT(*) AS “TOTAL” , COUNT(DISTINCT IDorder) AS “ORDER” FROM Order; SQL1 >> TOTAL ORDER ------------ ------------ 6 5 ผลลัพธ์ >>
คำสั่งการเรียกค้น (SELECT)ข้อมูลจากหลายตาราง department employee em_id em_name dep_id EM001 นายขวัญชัย มีจิต DEP04 EM002 นายเอกชัย ใจเพชร DEP02 EM003 นายเกื้อกูล ใจงาม DEP03 EM004 นายณรงค์ มีศิลป์ dep_id dep_name DEP01 แผนกต้อนรับ DEP02 แผนกซ่อมบำรุง DEP03 แผนกการเงิน DEP04 แผนกบัญชี training course em_id course_id date EM001 C001 10/02/53 EM002 C002 11/02/53 EM003 EM004 C004 13/02/53 course_id c_name C001 การทำอาหาร C002 การซ่อมรถยนต์ C003 การทำขนม C004 การทำตุ๊กตา
ตัวอย่างการเชื่อมข้อมูลจากหลายตาราง โจทย์) ต้องการทราบ ชื่อ (em_name) ของพนักงานที่อบรมหลักสูตร C001 SELECT em_name FROM employee,training WHERE employee.em_id = training.em_id AND course_id = ‘C001’ ดึงข้อมูลจาก ตาราง employeeและ ตาราง training
โจทย์) ต้องการทราบว่า พนักงาน ที่มีรหัสแผนก dep04 เข้าอบรมหลักสูตร ใดบ้าง SELECT c_name FROM employee,training,course WHERE employee.dep_id = “dep04” AND employee.em_id = training.em_id AND training.course_id = course.course_id
คำสั่งการเรียกค้นข้อมูลแบบซ้อนกัน (Sub queries) คือ การเรียกค้นข้อมูลที่ประกอบด้วย การเรียกค้นหลัก กับ การเรียกค้นย่อย โดยการเรียกค้นหลักจะใช้ผลลัพธ์ของ การเรียกค้นย่อยไปเป็นเงื่อนไขในการกลั่นกรองข้อมูล หลักการทำงาน ต้องหาการเรียกค้นย่อยก่อนแล้วจึงนำไปใช้งานกับการเรียกค้นหลัก SELECT <ชื่อคอลัมน์> FROM <ชื่อตาราง> WHERE <ชื่อคอลัมน์> IN ( SELECT <ชื่อคอลัมน์> WHERE <ชื่อคอลัมน์> )
ตัวอย่าง : ต้องการทราบชื่อพนักงานที่อยู่แผนกเดียวกับ khanchai SELECT em_name FROM employee WHERE dep_id IN ( SELECT em_name WHERE em_name = “khanchai”)
การเพิ่มข้อมูลแต่ละแถว (INSERT) รูปแบบ >> INSERT INTO <ชื่อตาราง> VALUES ([<value 1>, <value 2>,… ) ; ป้อนข้อมูลของลูกค้าใหม่ ซึ่งมีรหัส 101 ชื่อ Supaporn อาศัยอยู่ Pattani เบอร์โทรศัพท์ 073658758 มีวงเงิน 150,000 บ. และยอดเงินคงเหลือ 100,000 บ. โจทย์ >> INSERT INTO customer VALUES (‘101’,‘Supaporn’, ‘Pattani’,‘073658758’, 150000 ,100000 ) ; SQL >>
การเพิ่มข้อมูลแต่ละแถว (INSERT) (ต่อ) ในกรณีที่อาจการเพิ่มข้อมูลเฉพาะบางคอลัมน์ สามารถเขียนคำสั่งได้ดังนี้ รูปแบบ >> INSERT INTO <Table_name><(list of columnname)> VALUES <( list of matching value)> ; โจทย์ >> ป้อนข้อมูลของลูกค้าใหม่ ซึ่งมีรหัส 150 ชื่อ Walaiporn INSERT INTO customer (IDcustomer , C_name) VALUES (‘150’,‘Walaiporn’) ; SQL >>
การแก้ไขข้อมูล (Update) ในกรณีที่เพิ่มข้อมูลในตารางแล้ว และต้องการแก้ไขข้อมูลที่มีอยู่ สามารถเขียนคำสั่งได้ดังนี้ UPDATE <Table_name> SET <columnname> = new_value WHERE <condition>; รูปแบบ >> โจทย์ >> ต้องการปรับเงินเดือนพนักงานชื่อ Piyanuch จากเดิม 14,400 บาท เป็น 15,000 UPDATE employee SET E_salary= 15000 WHERE E_name=‘Piyanuch’ ; SQL >>
การแก้ไขข้อมูล (Update) หากต้องการแก้ไขข้อมูลที่มีอยู่ ครั้งละหลายแถวสามารถเขียนคำสั่งได้ดังนี้ โจทย์ >> ต้องการเพิ่มวงเงินให้แก่ลูกค้าที่อาศัยอยู่ใน Bangkok อีกคนละ 50,000 บาท UPDATE customer SET C_credit = C_credit + 50000 WHERE C_address =‘Bangkok’ ; SQL >>
การลบข้อมูล (Delete) รูปแบบ >> DELETE <Table_name> WHERE <condition>; รูปแบบ >> โจทย์ >> ในกรณีที่พนักงานชื่อ ‘Walai’ ลาออกจากบริษัท DELETE FROM employee WHERE E_name = ‘Walai’ ; SQL >>
แบบฝึกหัด ต้องการทราบชื่อพนักงาน อยู่แผนก DEP02 ต้องการทราบชื่อพนักงานที่อยู่ แผนกเดียวกับ นายเอกชัย ใจเพชร ต้องการทราบชื่อหลักสูตรที่ นายขวัญชัย ใจเพชร เข้าอบรม ต้องการทราบว่าหลักสูตรการทำอาหารมีใครเรียนบ้าง ต้องการหาชื่อพนักงานที่อบรมในระหว่าง วันที่ 10/02/53– 11/02/53 ต้องการหาชื่อพนักงานที่มีชื่อขึ้นด้วย ข ต้องการหาข้อมูลของพนักงานที่มีตัวอักษร อก
เฉลย 1 SELECT em_name FROM employee WHERE dep_id = "dep02"
ข้อ 2 SELECT em_name FROM employee WHERE dep_id IN (SELECT dep_id WHERE em_name =“นายเอกชัย ใจเพชร") AND em_name != “นายเอกชัย ใจเพชร"
ข้อ 3 SELECT c_name FROM employee,training,course WHERE employee.em_name = "khanchai" AND employee.em_id=training.em_id AND training.course_id = course.course_id
ข้อ 4 SELECT em_name FROM employee,training,course WHERE (c_name ="cooking") AND (training.em_id=employee.em_id) AND (training.course_id =course.course_id)
ข้อ 5 SELECT em_name FROM employee,training WHERE employee.em_id = training.em_id AND (date BETWEEN “10/02/53" AND “11/02/53")
ข้อ 6 SELECT em_name FROM employee WHERE em_name LIKE “ข%"
ข้อ 7 SELECT * FROM employee WHERE em_name LIKE "%อก%"