ภาษาเอสคิวแอล อ. เหมรัศมิ์ วชิรหัตถพงศ์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยบูรพา
2 ตัวอย่างฐานข้อมูลระบบงานขาย
3 ตาราง Customer CREATE TABLE IF NOT EXISTS `Customer` ( `CustNo` VARCHAR(8) NOT NULL, `CustFirstName` VARCHAR(30) NULL, `CustLastName` VARCHAR(50) NULL, `CustAddress` VARCHAR(50) NULL, `CustSubDistrict` VARCHAR(30) NULL, `CustDistrict` VARCHAR(30) NULL, `CustProvince` VARCHAR(30) NULL, `CustZipCode` VARCHAR(5) NULL, PRIMARY KEY (`CustNo`))
4 ตาราง Product CREATE TABLE IF NOT EXISTS Product` ( `ProdNo` VARCHAR(8) NOT NULL, `ProdName` VARCHAR(50) NULL, `ProdQuantity` INT NULL, `ProdPrice` FLOAT NULL, `ProdShipDate` DATE NULL, PRIMARY KEY (`ProdNo`))
5 ตาราง Employee CREATE TABLE IF NOT EXISTS `Employee` ( `EmpNo` VARCHAR(8) NOT NULL, `EmpFirstName` VARCHAR(20) NULL, `EmpLastName` VARCHAR(30) NULL, `EmpAddress` VARCHAR(50) NULL, `EmpSubDistrict` VARCHAR(30) NULL, `EmpDistrict` VARCHAR(30) NULL, `EmpProvince` VARCHAR(30) NULL, `EmpZipCode` VARCHAR(5) NULL, `EmpPhoneNo` VARCHAR(15) NULL, `Emp ` VARCHAR(50) NULL, `EmpSalary` FLOAT NULL, `SupEmpNo` VARCHAR(8) NULL, PRIMARY KEY (`EmpNo`))
6 ตาราง Order CREATE TABLE IF NOT EXISTS `Order` ( `OrdNo` VARCHAR(8) NOT NULL, `EmpNo` VARCHAR(8) NOT NULL, `CustNo` VARCHAR(8) NOT NULL, `OrdDate` DATE NULL, `OrdShipAddress` VARCHAR(50) NULL, `OrdShipSubDistrict` VARCHAR(50) NULL, `OrdShipDistrict` VARCHAR(30) NULL, `OrdProvince` VARCHAR(30) NULL, `OrdZipCode` VARCHAR(5) NULL, PRIMARY KEY (`OrdNo`))
7 ตาราง OrderDetail CREATE TABLE IF NOT EXISTS `OrderDetail` ( `ProdNo` VARCHAR(8) NOT NULL, `OrdNo` VARCHAR(8) NOT NULL, PRIMARY KEY (`ProdNo`, `OrdNo`))
8 ข้อมูลในตาราง Customer
9 ข้อมูลในตาราง Employee
10 ข้อมูลในตาราง Order
11 ข้อมูลในตาราง Product
12 เทคนิคการใช้งานภาษา SQL วิเคราะห์ output ดูว่าจะต้องแสดงผลลัพธ์อย่างไรตามความต้องการ ของโจทย์ วิเคราะห์ input ต้องใช้ข้อมูล (column) จากตาราง (Table) อะไร วิเคราะห์ process จำ syntax หรือ รูปแบบของคำสั่งให้ถูกต้อง วิเคราะห์ว่า ต้องเขียนเงื่อนไขอย่างไร จึงจะได้ผล ตามต้องการ
13 ตัวอย่าง การใช้คำสั่ง SELECT แบบมีเงื่อนไข SELECT ProdNo,ProdName FROM Product WHERE ProdQuantity > 100 ORDER BY ProdQuantity ASC; ProdNoProdNa me Prod Quant ity ProdPri ce Prod ShipDa te P0001Card Cases P0002Money Clips P0003Condition ers P0004Creams P0005Creams P0006Lotions P0007Palettes P0008Eyebrow P0009Drawing P0010Electric Product ผลลัพธ์ ProdNoProdNam e P0005Creams P0008Eyebrow P0004Creams P0006Lotions P0007Palettes
14 ตัวอย่าง การใช้คำสั่ง SELECT แบบมีเงื่อนไขหลายเงื่อนไข SELECT ProdNo,ProdName FROM Product WHERE ProdQuantity > 100 AND ProdPrice > 200 ORDER BY ProdQuantity ASC; ProdNoProdNa me Prod Quant ity ProdPri ce Prod ShipDa te P0001Card Cases P0002Money Clips P0003Condition ers P0004Creams P0005Creams P0006Lotions P0007Palettes P0008Eyebrow P0009Drawing P0010Electric Product ผลลัพธ์ ProdNoProdNam e P0007Palettes
15 ตัวอย่าง การใช้คำสั่ง SELECT แบบมีเงื่อนไขหลายเงื่อนไข SELECT ProdNo,ProdName FROM Product WHERE ProdQuantity > 100 OR ProdPrice > 200 ORDER BY ProdQuantity ASC; ProdNoProdNa me Prod Quant ity ProdPri ce Prod ShipDa te P0001Card Cases P0002Money Clips P0003Condition ers P0004Creams P0005Creams P0006Lotions P0007Palettes P0008Eyebrow P0009Drawing P0010Electric Product ผลลัพธ์ ProdNoProdNam e P0010Electric P0005Creams P0008Eyebrow P0004Creams P0006Lotions P0007Palettes
16 ตัวอย่าง การใช้คำสั่ง SELECT เลือกข้อมูลจากหลายตาราง Emp No Emp FirstN ame Emp LastNa me Emp Sala ry Sup EmpN o E000 1 Wittaw as Chankaja ng E0002 Nubdao w Saensuk E000 3 Wande e Chalermr ad E0002 E000 4 WipadaThongson g E0002 E000 5 JandaSaeLi E0002 E000 6 Kamon nop Rangsan E0002 E000 7 Andam an Sakornra d E0002 Employee OrdN o Emp No Cust No OrdD ate ORD00 1 E0001C ORD00 2 E0003C ORD00 3 E0006C ORD00 4 E0007C ORD00 5 E0007C Order
17 คำสั่งที่มีการใช้งานหลาย ตาราง (join) SELECT FROM WHERE ; ต้องมีการเชื่อม PK และ FK ของทั้งสองตารางเข้า ด้วยกัน (Join) หากมี field ใดที่ชื่อซ้ำกันทั้งสองตาราง เมื่ออ้างถึง ต้อง ระบุชื่อตาราง ตามด้วยชื่อฟิลด์ เช่น Product.ProdNo หรือ Order.OrdNo
18 แสดงข้อมูลรหัสพนักงาน ชื่อพนักงาน นามสกุล เงินเดือนพนักงาน เนื่องจาก ข้อมูลพนักงาน อยู่คนละตาราง กับ ข้อมูลการสั่งซื้อ จึงต้องมีการ join ตารางที่มีข้อมูลเข้า ด้วยกัน SELECT Employee.EmpNo, EmpFirstName,EmpLastName,EmpSal ary FROM Employee,`Order` WHERE Employee.EmpNo=`Order`.EmpNo คำสั่งที่มีการใช้งานหลาย ตาราง (join)
19 ผลลัพธ์การ join ตาราง Employee และ Order
20 แสดงข้อมูลการสั่งซื้อ โดยแสดงรหัส พนักงาน รหัสลูกค้า วันที่สั่งซื้อ โดยการ เลือกข้อมูล Joing กันของตาราง Order และ OrderDetail และเลือกข้อมูลที่มี OrdNo ที่มีอยู่ใน Order มาแสดง SELECT `Order`.EmpNo,CustNo,O rdDate FROM `Order`,OrderDetail WHERE `Order`.OrdNo=OrderDe tail.OrdNo คำสั่งที่มีการใช้งานหลาย ตาราง (join)
21 ผลลัพธ์การ join ตาราง Order และ OrderDetail
22 แสดงข้อมูลรหัสพนักงาน ชื่อพนักงาน นามสกุล พนักงานที่มี ที่อยู่อยู่ที่จังหวัด Chonburi และ Rayong SELECT EmpNo,EmpFirstName,EmpLastName FROM Employee WHERE Employee.EmpProvince IN ('Chonburi','Rayong'); การใช้ Operator IN
23 ตัวอย่าง การใช้คำสั่ง SELECT กับ Operator IN Emp No Emp FirstN ame Emp LastNa me Emp Sala ry Emp Provi nce E000 1 Wittaw as Chankaja ng Chonb uri E000 2 Nubdao w Saensuk Chonb uri E000 3 Wande e Chalermr ad Chach oengsa o E000 4 WipadaThongson g Rayon g E000 5 JandaSaeLi Chonb uri E000 6 Kamon nop Rangsan Rayon g E000 7 Andam an Sakornra d Chach oengsa o Employee EmpNoEmp FirstNa me Emp LastNa me E0001Wittawa s Chankaj ang E0002Nubdao w Saensuk E0004WipadaThongso ng E0005JandaSaeLi E0006Kamonn op Rangsan Order SELECT EmpNo,EmpFirstName,Emp LastName FROM Employee WHERE Employee.EmpProvice IN ('Chonburi','Rayong'); ผลลัพธ์
24 ตัวอย่าง การใช้คำสั่ง SELECT กับ Operator IN ( นิเสธ ) Emp No Emp FirstN ame Emp LastNa me Emp Sala ry Emp Provi nce E000 1 Wittaw as Chankaja ng Chonb uri E000 2 Nubdao w Saensuk Chonb uri E000 3 Wande e Chalermr ad Chach oengsa o E000 4 WipadaThongson g Rayon g E000 5 JandaSaeLi Chonb uri E000 6 Kamon nop Rangsan Rayon g E000 7 Andam an Sakornra d Chach oengsa o Employee EmpNoEmp FirstNa me Emp LastNa me E0001Wittawa s Chankaj ang E0007Andama n Sakornr ad Order SELECT EmpNo,EmpFirstName,Emp LastName FROM Employee WHERE Employee.EmpProvice NOT NOT IN ('Chonburi','Rayong'); ผลลัพธ์
25 การทำงานแบบ sub query SELECT FROM WHERE field_i = (SELECT field FROM table1) ; การ Select ในการทำ Sub-query สามารถ เลือกได้ Filed เดียวเท่านั้น สามารถเลือกใช้ Operator เชิงเซต (in) เมื่อ Sub-query ให้ผลมากกว่า 1 ค่า จะสามารถใช้ Operator เชิงเปรียบเทียบ ( =, >, < ) ได้ เมื่อ การทำ sub-query ให้ผลค่าเดียว เท่านั้น
26 แสดงข้อมูลการสั่งซื้อโดยที่เลือก เฉพาะข้อมูลที่มี EmpNo ได้จาก การเลือก EmpNo จากตาราง Employee ที่อยู่ในจังหวัดชลบุรี SELECT OrdNo, EmpNo, CustNo FROM `Order` WHERE EmpNo IN (SELECT EmpNo FROM Employee WHERE EmpProvince='Chonburi') ; การใช้ Sub Query ตัวอย่างที่ 1
27 ต้องการแสดงข้อมูล พนักงาน โดยเลือก รหัสพนักงาน ชื่อ พนักงาน นามสกุล ของพนักงานที่ขาย สินค้า SELECT EmpNo, EmpFirstName, EmpLastName FROM Employee WHERE EmpNo IN (SELECT DISTINCT EmpNo FROM Order); การใช้ Sub Query ตัวอย่างที่ 2
28 แสดงข้อมูล พนักงานโดย ต้องการคำนวณ รายได้ทั้งปีของ พนักงาน SELECT EmpNo, EmpFirstName, EmpLastName, EmpSalary * 12 FROM Employee การคำนวณโดยใช้คำสั่ง SQL
29 Operators ในการคำนวณ Operat or ความหมาย + บวก - ลบ * คูณ / หาร ^ ยกกำลัง
30 แสดงข้อมูล พนักงานโดย ต้องการคำนวณ รายได้ทั้งปีของ พนักงาน SELECT EmpNo, EmpFirstName, EmpLastName, EmpSalary * 12 NetSalary FROM Employee รูปแบบคำสั่งที่มีการเปลี่ยนชื่อ การแสดงผล (alias)
31 แสดงข้อมูล พนักงานโดย ต้องการคำนวณ รายได้ทั้งปีของ พนักงาน SELECT EmpNo, EmpFirstName, EmpLastName, EmpSalary * 12 AS NetSalary FROM Employee รูปแบบคำสั่งที่มีการเปลี่ยนชื่อ การแสดงผล (alias)
32 แสดงข้อมูล พนักงานโดย ต้องการคำนวณ รายได้ทั้งปีของ พนักงาน SELECT e.EmpNo, e.EmpFirstName, e.EmpLastName, o.OrdNo FROM Employee e, `Order` O รูปแบบคำสั่งที่มีการตั้งชื่อแฝง (alias) ให้ชื่อตาราง
33 แสดงข้อมูล พนักงานโดย ต้องการคำนวณ รายได้ทั้งปีของ พนักงาน SELECT e.EmpNo, e.EmpFirstName, e.EmpLastName, o.OrdNo FROM Employee AS e, `Order` AS O รูปแบบคำสั่งที่มีการตั้งชื่อแฝง (alias) ให้ชื่อตาราง
34 ตัวอย่างการใช้คำสั่ง SQL แสดงข้อมูลพนักงาน รหัสพนักงาน ชื่อ นามสกุล ของพนักงานที่ขายสินค้าทั้งหมด แสดงข้อมูลลูกค้า รหัสลูกค้า ชื่อ นามสกุล ของ ลูกค้าที่มาซื้อของทั้งหมด แสดงข้อมูลสินค้า รหัสสินค้า ชื่อสินค้า จำนวน สำหรับสินค้าที่ยังไม่ได้ขาย แสดงข้อมูลการสั่งซื้อสินค้า โดยแสดงรหัสใบสั่ง ซื้อ รหัสสินค้า ชื่อสินค้า แยกตามใบสั่งซื้อโดย แสดงรายละเอียดการสั่งซื้อสินค้าด้วย แสดงข้อมูลพนักงาน โดยแสดงรหัสพนักงาน ชื่อพนักงาน ที่ไม่ได้ขายสินค้าให้ใครเลย