Chapter 9 : ภาษาทางด้านฐานข้อมูลคำสั่ง SQL (SQL Command) อ.คเชนทร์ ซ่อนกลิ่น
แนะนำภาษา SQL Query Language หรือเอสคิวแอล (SQL) หรือซีควอล (SE-QUEL) เป็นภาษาที่ พัฒนาขึ้นมาโดยบริษัท IBM เป็นภาษามาตราฐานบนระบบฐานข้อมูลเชิงสัมพันธ์ สามารถใช้งานได้กับเครื่อง คอมพิวเตอร์หลายระดับ ภาษา SQL (Standard Query Language) เป็นส่วนหนึ่งของระบบฐานข้อมูล แบบรีเลชั่นเนล(Relational Database) ที่ได้รับความนิยมมากเพราะง่ายต่อความ เข้าใจ และอยู่ในรูปภาษาอังกฤษ ปัจจุบันมีซอฟต์แวร์ระบบจัดการฐานข้อมูล (DBMS) ที่สนับสนุนการใช้คำสั่ง SQL เช่น MySQL, ORACLE, DB2,SQL Sever, MS-Access
SQL (Structure Query Language) ส่วนประกอบของระบบจัดการฐานข้อมูล DBMS SQL (Structure Query Language) พจนานุกรมข้อมูล (Data Dictionary) โปรแกรมอำนวยความสะดวก (General Utilities) โปรแกรมช่วยสร้างโปรแกรมประยุกต์ (Application Generators) โปรแกรมช่วยสร้างรายงาน (Report Generators)
วัตถุประสงค์ของ SQL 1. สร้างฐานข้อมูลและตาราง 2. สนับสนุนการจัดการฐานข้อมูล ซึ่งประกอบด้วย การเพิ่ม การปรับปรุงและการลบข้อมูล 3. สนับสนุนการเรียกใช้หรือสืบค้นข้อมูล
ประเภทของคำสั่งในภาษา SQL 1. DDL (Data Definition Language) เป็นชุดคำสั่งที่ใช้ในการนิยาม กำหนด หรือการ สร้างข้อมูลบนฐานข้อมูล ได้แก่ คำสั่ง CREATE TABLE เป็นต้น 2. DML (Data Manipulation Language) เป็นชุดคำสั่งที่ใช้ในการประมวลผลหรือ จัดการกับข้อมูลในฐานข้อมูล ได้แก่ คำสั่ง SELECT, INSERT , UPDATE เป็นต้น 3. DCL (Data Control Language) เป็นคำสั่งที่ใช้ในการควบคุมสิทธิ์ของผู้ใช้ในการใช้ ข้อมูล รวมทั้งส่วนที่ใช้ควบคุมการใช้ฐานข้อมูลจากผู้ใช้หลายๆคนพร้อมกัน
(Standard Query Language) รูปแสดงประเภทของคำสั่งในภาษา SQL ภาษา SQL (Standard Query Language) ภาษานิยามข้อมูล (DDL) CREATE ALTER DROP ภาษาจัดการข้อมูล (DML) SELECT UPDATE INSERT DELETE ภาษาควบคุมข้อมูล (DCL) GRANT REVOKE
เป็นกลุ่มคำสั่งที่ใช้กระทำกับโครงสร้างของฐานข้อมูล 1.ภาษานิยามข้อมูล (Data Definition Language) CREATE ใช้สร้างตาราง ALTER ใช้แก้ไข/เปลี่ยนแปลงตาราง DROP ใช้สำหรับลบตาราง เป็นกลุ่มคำสั่งที่ใช้กระทำกับโครงสร้างของฐานข้อมูล
CREATE TABLE การสร้างตาราง รูปแบบ >> CREATE TABLE ชื่อตาราง ( ชื่อคอลัมน์1 ประเภทข้อมูล Constraint, ชื่อคอลัมน์2 ประเภทข้อมูล Constraint, PRIMARY KEY (ชื่อคอลัมน์) , FOREIGN KEY (ชื่อคอลัมน์ ) REFERENCES ชื่อตาราง, );
CREATE TABLE การสร้างตาราง ชื่อตาราง EMPLOYEE ตัวอย่าง >> Constraint ชนิดข้อมูล CREATE TABLE EMPLOYEE ( ID CHAR(5) NOT NULL , NAME VARCHAR(35) NOT NULL , ADDRESS VARCHAR(15) NOT NULL , PHONE CHAR(8) NOT NULL , EMAIL CHAR(1) NOT NULL , PRIMARY KEY (ID) ); ให้ ID เป็น PK
CREATE TABLE การสร้างตาราง ชื่อตาราง PRODUCT ตัวอย่าง >> ชนิดข้อมูล Constraint CREATE TABLE PRODUCT ( P_CODE VARCHAR(10) NOT NULL , P_DESCRIPT VARCHAR(35) NOT NULL , P_INDATE DATE NOT NULL , P_ONHAND SMALLINT NOT NULL , P_MIN SMALLINT NOT NULL , P_PRICE NUMBER NOT NULL , P_DISCOUNT NUMBER NOT NULL , ID CHAR(5) , PRIMARY KEY (P_CODE) , FOREIGN KEY (ID) REFERENCES EMPLOYEE(ID) ); ให้ ID เป็น FK
ALTER TABLE การแก้ไข/เปลี่ยนแปลงตาราง รูปแบบ >> ALTER TABLE ชื่อตาราง คำสั่งเปลี่ยนแปลงตาราง ชื่อคอลัมน์ ประเภทข้อมูล ; คำสั่งการเปลี่ยนแปลง ได้แก่ 1. ADD เพิ่มคอลัมน์ 2. MODIFY แก้ไขคอลัมน์ในตาราง 3. DROP ลบคอลัมน์
ALTER TABLE การแก้ไข/เปลี่ยนแปลงตาราง ตัวอย่าง ADD เพิ่มคอลัมน์ โจทย์ >> เพิ่มคอลัมน์ที่เป็นรหัสแผนก(IDdepartment) ในตาราง employee เพื่อบอกว่าพนักงานสังกัดอยู่แผนกใด SQL >> ALTER TABLE employee ADD IDdepartment char(6) ;
ALTER TABLE การแก้ไข/เปลี่ยนแปลงตาราง ตัวอย่าง MODIFY แก้ไขคอลัมน์ในตาราง โจทย์ >> เปลี่ยนขนาดของข้อมูลในคอลัมน์ IDdeparment ในตาราง employee จากขนาด 6 ตัวอักษร เป็นขนาด 5 ตัวอักษร SQL >> ALTER TABLE employee MODIFY (IDdepartment char(5)) ;
ALTER TABLE การแก้ไข/เปลี่ยนแปลงตาราง ตัวอย่าง DROP ลบคอลัมน์ โจทย์ >> ลบคอลัมน์ที่เป็นรหัสแผนก(IDdepartment) ในตาราง employee SQL >> ALTER TABLE employee DROP IDdepartment ;
DROP TABLE การลบตาราง รูปแบบ >> ตัวอย่าง โจทย์ >> ต้องการลบตาราง(Table) ORDER ออกจากฐานข้อมูล SQL >> DROP TABLE ORDER;
2. ภาษาจัดการข้อมูล (Data Manipulation Language) SELECT ใช้เรียกข้อมูลในตารางมาแสดงผล INSERT ใช้เพิ่มข้อมูลเข้าไปในตาราง UPDATE ใช้แก้ไขข้อมูลในตาราง DELETE ใช้ลบข้อมูลในตาราง เป็นกลุ่มคำสั่งที่กระทำกับข้อมูลในฐานข้อมูล
SELECT <การเรียกดูข้อมูล> การเรียกดูข้อมูลในคอลัมน์ที่ต้องการ รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง ;
SELECT <การเรียกดูข้อมูล> ตัวอย่าง Employees Emp_ID First_name Last_name Address 001 สมชาย ชาตรี เชียงใหม่ 002 สมหญิง งามแท้ อุตรดิตถ์ โจทย์ >> ต้องการแสดงชื่อและนามสกุลของพนักงาน SQL >> SELECT First_name, Last_name FROM Employees ; ผลลัพธ์ >> First_name Last_name สมชาย ชาตรี สมหญิง งามแท้
SELECT <การเรียกดูข้อมูล> การเรียกดูข้อมูลในทุก ๆ คอลัมน์ รูปแบบ >> SELECT * FROM ชื่อตาราง ;
SELECT <การเรียกดูข้อมูล> ตัวอย่าง Employees Emp_ID First_name Last_name Address 001 สมชาย ชาตรี เชียงใหม่ 002 สมหญิง งามแท้ อุตรดิตถ์ โจทย์ >> ต้องการแสดงข้อมูลของพนักงาน SQL >> SELECT * FROM Employees ; ผลลัพธ์ >> Emp_ID First_name Last_name Address 001 สมชาย ชาตรี เชียงใหม่ 002 สมหญิง งามแท้ อุตรดิตถ์
SELECT <การเรียกดูข้อมูล> การเรียกดูข้อมูลเฉพาะบางแถวที่ตรงตามเงื่อนไข รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง WHERE เงื่อนไข ; โดยภายในเงื่อนไขประกอบด้วย เงื่อนไข => คอลัมน์ที่เป็นเงื่อนไข Operator Value
SELECT <การเรียกดูข้อมูล> ตัวอย่าง Employees Emp_ID First_name Last_name Address 001 สมชาย ชาตรี เชียงใหม่ 002 สมหญิง งามแท้ อุตรดิตถ์ โจทย์ >> ตัวอย่าง แสดงชื่อ นามสกุล และที่อยู่ของพนักงาน โดยจะแสดงข้อมูลเฉพาะพนักงาน ที่อยู่จังหวัดอุตรดิตถ์ SQL >> SELECT First_name, Last_name, Address FROM Employees WHERE Address = ‘อุตรดิตถ์’; Address คอลัมน์ที่เป็นเงื่อนไข อุตรดิตถ์ คือ value ผลลัพธ์ >> = คือ operator First_name Last_name Address สมหญิง งามแท้ อุตรดิตถ์
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวเปรียบเทียบ (Comparison operators) ได้แก่ เครื่องหมาย =, <, >, <=, >=, <> ตัวปฏิบัติการทางด้านลอจิก (Logical operators) AND OR NOT ตัวปฏิบัติการพิเศษ NOT, BETWEEN , IN , LIKE , OR , SOME , IS NULL , IS NOT NULL , EXISTS , DISTINCT เชื่อมต่อเงื่อนไขในกรณีที่มีมากกว่า 1 เงื่อนไข
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวเปรียบเทียบ (Comparison operators) ตัวเปรียบเทียบ ความหมาย = เท่ากับ < น้อยกว่า <= น้อยกว่าหรือเท่ากับ > มากกว่า >= มากกว่าหรือเท่ากับ <> หรือ != ไม่เท่ากับ
ตรงกันข้าม, ไม่เท่ากับ Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัว Logical operators Logical operators ความหมาย AND และ OR หรือ NOT ตรงกันข้าม, ไม่เท่ากับ
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวปฏิบัติการพิเศษ (Special operators) BETWEEN…AND… : ตรวจสอบช่วงของค่าใน Attribute IS NULL : ตรวจสอบว่ามีค่าว่างหรือไม่ IS NOT NULL : ตรวจสอบว่าไม่มีค่าว่างหรือไม่ LIKE : ตรวจสอบค่า String ใน Attribute ว่ามีส่วน คล้ายกับที่กำหนดไว้หลัง LIKE หรือไม่ IN : ตรวจสอบค่าใน Attribute ว่าตรงกันกับที่ กำหนดไว้หลัง IN หรือไม่ EXISTS : ตรวจสอบว่ามีการ Return ค่าของ Subquery หรือไม่ DISTINCT : จำกัดค่าให้แสดงผลโดยค่าไม่ซ้ำกัน
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ AND Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 โจทย์ >> ต้องการ แสดงชื่อ นามสกุล ที่อยู่ และเงินเดือนโดยจะแสดงข้อมูลเฉพาะพนักงานที่อยู่จังหวัดอุตรดิตถ์และมีเงินเดือนมากกว่า 5000 บาท จากโจทย์ สิ่งที่ต้องแสดง คือ ชื่อ นามสกุล ที่อยู่ เงินเดือน จากตาราง พนักงาน เงื่อนไข พนักงานคนนั้นต้องอยู่จังหวัดอุตรดิตถ์ และมีเงินเดือน มากกว่า 5000 บาท คอลัมน์เงื่อนไข Address และ Salary
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ AND จากโจทย์จะเห็นว่า มีสองเงื่อนไข และต้องเป็นจริงทั้งสองเงื่อนไข ดังนั้นจึงต้องใช้ AND เชื่อมระหว่าง 2 เงื่อนไขนี้ SQL >> SELECT First_name, Last_name, Address, Salary FROM Employees WHERE Address = ‘อุตรดิตถ์’ AND Salary > 5000; Employees First_name Last_name Address Salary สมหญิง งามแท้ อุตรดิตถ์ 6000 จะเห็นว่าผลลัพธ์ที่ได้พนักงานคนนั้นต้องอยู่อุตรดิตถ์และมีเงินเดือนมากกว่า 5000
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 โจทย์ >> ต้องการ แสดงชื่อ นามสกุล ที่อยู่ และเงินเดือนโดยจะแสดงข้อมูลเฉพาะพนักงานที่อยู่จังหวัดอุตรดิตถ์หรือมีเงินเดือนมากกว่า 5000 บาท จากโจทย์ สิ่งที่ต้องแสดง คือ ชื่อ นามสกุล ที่อยู่ เงินเดือน จากตาราง พนักงาน เงื่อนไข พนักงานคนนั้นต้องอยู่จังหวัดอุตรดิตถ์ หรือมีเงินเดือน มากกว่า 5000 บาท คอลัมน์เงื่อนไข Address และ Salary
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where SQL >> SELECT First_name, Last_name, Address, Salary FROM Employees WHERE Address = ‘อุตรดิตถ์’ OR Salary > 5000; Employees First_name Last_name Address Salary สมชาย ชาตรี เชียงใหม่ 15000 สมหญิง งามแท้ อุตรดิตถ์ 6000 จะเห็นว่าผลลัพธ์ที่ได้ สมชายไม่ได้อยู่จังหวัดอุตรดิตถ์ แต่ที่สมชายแสดงในผลลัพธ์ เพราะมีเงินเดือนมากกว่า 5000 สรุป ผลลัพธ์ที่ได้จาก OR เข้าเงื่อนไขใดเงื่อนไขหนึ่งก็เป็นจริงแล้ว
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ BETWEEN…AND… กำหนดเงื่อนไขให้กับ where โดยเลือกช่วงข้อมูลที่สนใจ รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง WHERE ชื่อคอลัมน์ Between Value1 AND value2 ;
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ BETWEEN…AND… Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 003 สมใจ สุขสม แพร่ 5000 โจทย์ >> ต้องการ แสดงชื่อ และเงินเดือนของพนักงาน โดยจะแสดงข้อมูลเฉพาะพนักงาน ที่มีเงินเดือน 6000 ถึง 15000 SQL >> SELECT First_name, Salary FROM Employees WHERE Salary Between 6000 AND 15000; ผลลัพธ์ >> First_name Salary สมชาย 15000 สมหญิง 6000
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ Not Between…AND…. การใช้ Not ร่วมกับ Between….AND… เป็นการระบุเงื่อนไขว่า ข้อมูลต้องไม่อยู่ในช่วงที่กำหนด Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 003 สมใจ สุขสม แพร่ 5000 โจทย์ >> ต้องการ แสดงชื่อ และเงินเดือนของพนักงาน โดยจะแสดงข้อมูลเฉพาะพนักงาน ที่มีเงินเดือนไม่อยู่ในช่วง 6000 ถึง 15000 SQL >> SELECT First_name, Salary FROM Employees WHERE Salary Not Between 6000 AND 15000; ผลลัพธ์ >> First_name Salary สมใจ 5000
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ LIKE เลือกข้อมูลที่ตรงกับความต้องการด้วย LIKE รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง WHERE ชื่อคอลัมน์ Like pattern ; คือสิ่งที่ต้องต้องการค้นหา โดย Pattern มีรูปแบบดังนี้ % หมายถึง ตัวอักษรใด ๆ จำนวนไม่จำกัดตัวอักษร _ หมายถึง ตัวอักษรใด ๆ จำนวน 1 ตัวอักษร
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ LIKE รูปแบบ ตัวอย่าง คำอธิบาย ผลลัพธ์ '%value' ‘%y' ตัวอักษรด้านหน้าเป็นอะไรก็ได้ ตัวสุดต้องเป็น y Janeny , Nuy 'value%' ‘K%' ข้อความนั้นต้องขึ้นต้นด้วย K Kacha '%value%' '%a%' ข้อความต้องมี a ประกอบอยู่ ในข้อความ Chane, Nuyza '%value%value%' '%a%e%' ข้อความต้องมี a และ e ประกอบอยู่ในข้อความ แต่ลำดับของ a ต้องมาก่อนตัวอักษร e Alen, Chane '_ value%' '_ a%' ในข้อความ ตัวอักษรตัวแรกเป็นอะไรก็ได้ ขอให้ตัวอักษรตัวที่ 2 เป็น a Rattana,Cat ‘%value_ _ ' '%a_ _' ในข้อความ ตัวอักษรสองตัวหลังจะเป็นอะไรก็ได้ แต่ตัวที่สาม (นับจากด้านหลัง) ต้องเป็น a Ball, Hall
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ Not Like การใช้ Not Like คือการกำหนดเงื่อนว่า ข้อความที่เราต้องการค้นหาต้องไม่ใช่ที่เราระบุ ลงไปใน Pattern รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง WHERE ชื่อคอลัมน์ Not Like pattern ; เช่น >> SELECT last_name FROM Employees WHERE last_name Not Like '%ร%'; ผลลัพธ์ที่ได้ คือ last_name ที่แสดงผลจะไม่มีตัว ร ปรากฏอยู่ใน last_name
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ IN เป็นคำสั่งที่ใช้สำหรับการระบุเงื่อนไขการเลือกข้อมูลในตาราง (Table) โดยเลือกเฉพาะค่าที่กำหนด รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง WHERE ชื่อคอลัมน์ IN (value1,value2,...);
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ IN Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 003 สมใจ สุขสม แพร่ 5000 004 สมหวัง ทุกเรื่อง พะเยา 7800 โจทย์ >> ต้องการ แสดงรหัส และชื่อของพนักงาน โดยจะแสดงข้อมูลเฉพาะพนักงานที่มีรหัส 001 ,002,004 SQL >> SELECT Emp_ID, First_name FROM Employees WHERE Emp_ID IN ('001', '002','004'); ผลลัพธ์ >> Emp_ID First_name 001 สมชาย 002 สมหญิง 004 สมหวัง
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ Not IN Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 003 สมใจ สุขสม แพร่ 5000 004 สมหวัง ทุกเรื่อง พะเยา 7800 โจทย์ >> ต้องการ แสดงรหัส และชื่อของพนักงาน โดยจะแสดงข้อมูลเฉพาะพนักงานที่ไม่มีรหัส 001 ,002,004 SQL >> SELECT Emp_ID, First_name FROM Employees WHERE Emp_ID Not IN ('001', '002','004'); ผลลัพธ์ >> Emp_ID First_name 003 สมใจ
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ IS NULL เป็นการระบุเงื่อนไขว่าคอลัมน์ที่ต้องการต้องมีค่าเป็น NULL รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง WHERE ชื่อคอลัมน์ IS NULL;
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ IS NULL Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 003 สมใจ สุขสม 5000 004 สมหวัง ทุกเรื่อง 7800 โจทย์ >> ตัวอย่าง แสดงชื่อและที่อยู่ของพนักงาน โดยจะแสดงข้อมูลเฉพาะพนักงานที่ไม่ได้ระบุที่อยู่ SQL >> SELECT First_name, Address FROM Employees WHERE Address IS NULL; ผลลัพธ์ >> First_name Address สมใจ สมหวัง
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ IS NOT NULL เป็นการระบุเงื่อนไขว่าคอลัมน์ที่ต้องการต้องไม่มีค่าเป็น NULL รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการดูข้อมูลที่ 1, ชื่อคอลัมน์ที่ 2,…,ชื่อคอลัมน์ที่ n FROM ชื่อตาราง WHERE ชื่อคอลัมน์ IS NOT NULL;
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ IS NOT NULL Employees Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 003 สมใจ สุขสม 5000 004 สมหวัง ทุกเรื่อง 7800 โจทย์ >> ตัวอย่าง แสดงชื่อและที่อยู่ของพนักงาน โดยจะแสดงข้อมูลเฉพาะพนักงานที่ระบุที่อยู่ SQL >> SELECT First_name, Address FROM Employees WHERE Address IS NOT NULL; ผลลัพธ์ >> First_name Address สมชาย เชียงใหม่ สมหญิง อุตรดิตถ์
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ DISTINCT - ใช้สำหรับการแสดงผลค่าที่ซ้ำกันเพียง 1 ค่า รูปแบบ >> SELECT DISTINCT ชื่อคอลัมน์ที่ต้องการให้แสดงผลค่าซ้ำเพียง 1 ค่า FROM ชื่อตาราง;
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ DISTINCT SELECT V_CODE FROM PRODUCT; SELECT DISTINCT V_CODE FROM PRODUCT; ผลลัพธ์ ผลลัพธ์ หากไม่ใช้ DISTINCT ผลลัพธ์จะได้ค่าที่ซ้ำกัน
Operator (ตัวปฏิบัติการ) ที่ใช้ใน Where ตัวอย่างการใช้ DISTINCT SELECT DISTINCT Amphur FROM Personal; Personal ผลลัพธ์ FirstName LastName Amphur มานะ พากเพียร เมือง อดทน ตั้งใจเรียน มานี หมั่นเพียร ปง Amphur เมือง ปง
INSERT < การเพิ่มข้อมูลเข้าไปในตาราง > การเพิ่มข้อมูลลง หรือ การเพิ่มแถว(Row) เข้าไปในตาราง รูปแบบ >> INSERT INTO ชื่อตาราง VALUES (ข้อมูลทุกคอลัมน์); หรือ INSERT INTO ชื่อตาราง (ชื่อทุกคอลัมน์) VALUES (ข้อมูลทุกคอลัมน์);
INSERT < การเพิ่มข้อมูลเข้าไปในตาราง > ตัวอย่าง ป้อนข้อมูลของลูกค้าใหม่ ซึ่งมีรหัส 101 ชื่อ สมปอง อาศัยอยู่ เชียงใหม่ เบอร์โทรศัพท์ 073658758 มีวงเงิน 150,000 บ. และยอดเงินคงเหลือ 100,000 บ. โจทย์ >> INSERT INTO customer VALUES (‘101’,‘สมปอง’, ‘เชียงใหม่’,‘073658758’, 150000 ,100000 ) ; SQL >>
INSERT < การเพิ่มข้อมูลเข้าไปในตาราง > ตัวอย่าง SQL >> INSERT INTO Orders(ProdID, Product, EmpID) VALUES (999, “Ram”, “02”); Orders Orders ProdID Product EmpID 234 Printer 01 657 Table 03 865 Chair ProdID Product EmpID 234 Printer 01 657 Table 03 865 Chair 999 Ram 02
UPDATE <การแก้ไขข้อมูลในตาราง> รูปแบบ >> UPDATE ชื่อตาราง SET ชื่อคอลัมน์ = ข้อมูลใหม่ WHERE เงื่อนไข;
UPDATE <การแก้ไขข้อมูลในตาราง> ตัวอย่าง SQL >> UPDATE PRODUCT SET P_DATE = ’18-JAN-2004’ WHERE P_CODE = ‘P0000007’; แก้ไขข้อมูลวันที่สินค้าเข้าคลัง (P_DATE) โดยให้แก้ไขเฉพาะสินค้าที่มีรหัสสินค้า (P_CODE) เป็น P0000007 ให้เป็นวันที่สินค้าเข้าคลังเป็น 18-JAN-2004
UPDATE <การแก้ไขข้อมูลในตาราง> ตัวอย่าง SQL >> UPDATE Book SET Author = ’สมโชค’ WHERE Book_name = ‘ระบบฐานข้อมูล’; แก้ไขข้อมูลผู้แต่ง (Author) โดยให้แก้ไขเฉพาะหนังสือที่ชื่อระบบฐานข้อมูล (Book_name) ให้เป็นผู้แต่งชื่อสมโชค
UPDATE <การแก้ไขข้อมูลในตาราง> ตัวอย่าง SQL >> UPDATE Book SET Author = ’สมควร’, publisher=‘ดอกหญ้า’ WHERE Book_id = ‘00015’; แก้ไขข้อมูลผู้แต่ง (Author) โดยให้แก้ไขเฉพาะหนังสือที่มีรหัส 00015 (Book_id) ให้เป็นผู้แต่งชื่อสมโชค และสำนักพิมพ์ดอกหญ้า
UPDATE <การแก้ไขข้อมูลในตาราง> SQL >> UPDATE Employees SET Name = “FOX”; Employees Employees EmpID Name 01 ANT 02 BAT 03 CAT 04 DOG EmpID Name 01 FOX 02 03 04
UPDATE <การแก้ไขข้อมูลในตาราง> SQL >> UPDATE Employees SET Name = “FOX” WHERE EmpID = “04”; Employees Employees EmpID Name 01 ANT 02 BAT 03 CAT 04 DOG EmpID Name 01 ANT 02 BAT 03 CAT 04 FOX
DELETE < การลบข้อมูลในตาราง > การลบข้อมูล หรือ การลบแถว(Row) ออกจากตาราง รูปแบบ >> DELETE FROM ชื่อตาราง WHERE เงื่อนไข;
DELETE < การลบข้อมูลในตาราง > ตัวอย่าง โจทย์ >> ในกรณีที่พนักงานชื่อ ‘วิไล’ ลาออกจากบริษัท SQL >> DELETE FROM employee WHERE E_name = ‘วิไล’ ;
DELETE < การลบข้อมูลในตาราง > SQL >> DELETE FROM Employees WHERE EmpID = “04”; Employees Employees EmpID Name 01 ANT 02 BAT 03 CAT 04 DOG EmpID Name 01 ANT 02 BAT 03 CAT
DELETE < การลบข้อมูลในตาราง > SQL >> DELETE FROM Employees; Employees Employees EmpID Name 01 ANT 02 BAT 03 CAT 04 DOG EmpID Name
3. ภาษาควบคุมข้อมูล (Data Control Language) GRANT เป็นคำสั่งให้สิทธิ์ผู้ใช้ (User) REVOKE เป็นคำสั่งยกเลิกสิทธิ์ผู้ใช้ (User) ควบคุมสิทธิ์ของผู้ใช้ในการใช้ข้อมูล รวมทั้งส่วนที่ใช้ควบคุมการใช้ฐานข้อมูลจากผู้ใช้หลายๆคนพร้อมกัน
ส่วนที่ 2
การจัดเรียงข้อมูลด้วย ORDER BY ORDER BY ชื่อคอลัมน์ DESC; เรียงจากมากไปน้อย ORDER BY ชื่อคอลัมน์ ASC; เรียงจากน้อยไปมาก ORDER BY ชื่อคอลัมน์ ; เรียงจากน้อยไปมาก รูปแบบ >> โจทย์ >> ต้องการทราบรหัสและชื่อของลูกค้าทั้งหมด โดยแสดงผลแบบเรียงตามลำดับชื่อลูกค้าจาก น้อยไปหามาก และ มากไปน้อย SQL น้อยไปหามาก SELECT IDCustomer , C_name FROM customer ORDER BY C_name ASC; SQL มากไปหาน้อย SELECT IDCustomer , C_name FROM customer ORDER BY C_name DESC;
ตัวอย่าง การจัดเรียงข้อมูลด้วย ORDER BY SELECT * FROM Address ORDER BY ZipCode ASC; น้อยไปหามาก Address ผลลัพธ์ Amphur ZipCode เมืองพะเยา 56000 จุน 56002 ปง 56001 Amphur ZipCode เมืองพะเยา 56000 ปง 56001 จุน 56002
ตัวอย่าง การจัดเรียงข้อมูลด้วย ORDER BY SELECT * FROM Address ORDER BY ZipCode DESC; มากไปหาน้อย Address ผลลัพธ์ Amphur ZipCode เมืองพะเยา 56000 จุน 56002 ปง 56001 Amphur ZipCode จุน 56002 ปง 56001 เมืองพะเยา 56000
ตัวอย่าง การจัดเรียงข้อมูลด้วย ORDER BY โจทย์ >> แสดงรหัส(Id), ชื่อ(Name), ที่อยู่(Addr) และเงินค้างชำระ(Curr_Bal )ของลูกค้า(customer)โดยเรียงตามเงินค้างชำระจากมากไปน้อย SELECT Id, Name, Addr, Curr_Bal FROM customer ORDER BY Curr_Bal DESC; Id Name Addr Curr_Bal - - - - - - - - - - - - - - - - - - - - - - - - - - - - 197 วรชาติ สีคล้ำ อยุธยา 500000 110 ศิรี สุขพานิช กรุงเทพฯ 200000 217 อนันต์ บุญญานุพงศ์ กรุงเทพฯ 200000 309 สุภาวดี เพชรสุข ระยอง 150000 100 โสภา สีคล้ำ กรุงเทพฯ 100000
ตัวอย่าง การจัดเรียงข้อมูลด้วย ORDER BY โจทย์ >> ต้องการดูรหัสสินค้า(P_CODE) ชื่อสินค้า(P_DESCRIPT) วันที่สินค้าเข้ามา(P_INDATE) และราคาสินค้า(P_PRICE) จากตารางสินค้า(PRODUCT) โดยให้เรียงลำดับตามราคาสินค้าจากมากไปน้อย SELECT P_CODE, P_DESCRIPT, P_INDATE, P_PRICE FROM PRODUCT ORDER BY P_PRICE DESC;
ตัวอย่าง การจัดเรียงข้อมูลด้วย ORDER BY โจทย์ >> ต้องการดูชื่อสินค้า(P_DESCRIPT) รหัสผู้ค้าส่ง(V_CODE) วันที่สินค้าเข้ามา(P_INDATE) และราคาสินค้า(P_PRICE) จากตารางสินค้า(PRODUCT) โดยให้เรียงลำดับตามรหัสผู้ค้าส่งจากน้อยไปหามาก ถ้าหากผู้ค้าส่งเป็นรายเดียวกันให้แสดงผลเรียงลำดับตามราคาสินค้าจากมากไปหาน้อย SELECT P_DESCRIPT, V_CODE, P_INDATE, P_PRICE FROM PRODUCT ORDER BY V_CODE ASC, P_PRICE DESC;
ตัวอย่าง การจัดเรียงข้อมูลด้วย ORDER BY โจทย์ >> ต้องการดูชื่อสินค้า(P_DESCRIPT) รหัสผู้ค้าส่ง(V_CODE) และราคาสินค้า(P_PRICE) ที่มีราคาสินค้าต่ำกว่า 500 บาท จากตารางสินค้า(PRODUCT) โดยให้เรียงลำดับตามรหัสผู้ค้าส่งจากน้อยไปหามาก ถ้าหากผู้ค้าส่งเป็นรายเดียวกันให้แสดงผลเรียงลำดับตามราคาสินค้าจากมากไปหาน้อย SELECT P_DESCRIPT, V_CODE, P_PRICE FROM PRODUCT WHERE P_PRICE < 500 ORDER BY V_CODE ASC, P_PRICE DESC;
การเปลี่ยนหัวคอลัมน์เป้นข้อความอื่นโดยการใช้ ALIAS รูปแบบ >> SELECT ชื่อคอลัมน์ที่1 AS ชื่อคอลัมน์ใหม่, ชื่อคอลัมน์ที่2,.... FROM ชื่อตาราง; หมายเหตุ จะเปลี่ยนชื่อคอลัมน์ในการแสดงผลเท่านั้น โดยที่จะไม่ไปเปลี่ยนในโครงสร้าง ของตารางจริง
ตัวอย่าง การใช้ ALIAS Employees โจทย์ >> Emp_ID First_name Last_name Address Salary 001 สมชาย ชาตรี เชียงใหม่ 15000 002 สมหญิง งามแท้ อุตรดิตถ์ 6000 003 สมใจ สุขสม แพร่ 5000 โจทย์ >> ต้องการ แสดงรหัส และชื่อของพนักงาน โดยเปลี่ยนชื่อคอลัมน์ Emp_ID เป็น ID SQL >> ผลลัพธ์ >> SELECT Emp_ID AS ID, First_name FROM Employees ; ID First_name 001 สมชาย 002 สมหญิง 003 สมใจ เปลี่ยนชื่อคอลัมน์ Emp_ID เป็น ID
Operators ในการคำนวณ Operator ความหมาย + บวก - ลบ * คูณ / หาร ^ ยกกำลัง
การคำนวณในคำสั่ง SQL และการใช้ชื่อแทน (Alias) SELECT P_DESCRIPT, P_ONHAND, P_PRICE, P_ONHAND*P_PRICE FROM PRODUCT ORDER BY P_PRICE ASC; สังเกตเมื่อมีการคำนวณโดยใช้ P_ONHAND*P_PRICE ผลลัพธ์ที่ได้จะแสดงในคอลัมน์ P_ONHAND*P_PRICE ซึ่งคอลัมน์นี้เป็นคอลัมน์ที่ phpMyAdminสร้างขึ้นมาให้เองโดยอัตโนมัติ P_DESCRIPT P_ONHAND P_PRICE P_ONHAND*P_PRICE ตะไบ 46 41 1886 ค้อน 23 90 2070 สว่านไร้สาย 12 380 4560
ตัวอย่าง คำนวณในคำสั่ง SQL และการใช้ชื่อแทน (Alias) ตาราง PRODUCT P_CODE P_DESCRIPT P_ONHAND P_PRICE 1 ค้อน 23 90 2 ตะไบ 46 41 3 สว่านไร้สาย 12 380 โจทย์ >> ต้องการหาว่าสินค้าที่เหลืออยู่ในตารางแต่ละชนิดมีมูลค่ารวม(TOTAL_VALUE) เท่ากับเท่าไร SELECT P_DESCRIPT, P_ONHAND, P_PRICE, P_ONHAND*P_PRICE AS TOTAL_VALUE FROM PRODUCT; P_DESCRIPT P_ONHAND P_PRICE TOTAL_VALUE ตะไบ 46 41 1886 ค้อน 23 90 2070 สว่านไร้สาย 12 380 4560 ผลลัพธ์ >>
ตัวอย่าง คำนวณในคำสั่ง SQL และการใช้ชื่อแทน (Alias) โจทย์ >> ต้องการแสดงรหัสสินค้า(P_CODE) วันที่สินค้านั้นเข้ามาในคลังสินค้า (P_INDATE) และวันที่สินค้าแต่ละตัวจะมีวันสิ้นสุดการรับประกัน(EXPIRE_DATE)ในที่นี้คิดที่ 90 วัน โดยการคิดจะคิดเริ่มจากวันที่สินค้านั้นเข้ามาในคลังสินค้า การรับประกันในที่นี้คิดที่ 90 วัน โดยการคิดจะคิดเริ่มจากวันที่สินค้านั้นเข้ามาในคลังสินค้า วิธีคิด วันที่สินค้าเข้ามาในคลังสินค้า คือ P_INDATE การรับประกันทางบริษัทกำหนด รับประกันสินค้า 90 วัน จะได้สมการดังนี้ SELECT P_CODE, P_INDATE, P_INDATE + 90 AS EXPIRE_DATE FROM PRODUCT;
ฟังก์ชันสำหรับหาค่าของกลุ่มข้อมูล หน้าที่ AVG ผลลัพธ์เป็นค่าเฉลี่ยของข้อมูลทั้งกลุ่ม SUM ผลลัพธ์เป็นผลบวกของข้อมูลทั้งกลุ่ม MIN ผลลัพธ์เป็นค่าน้อยที่สุดของข้อมูลทั้งกลุ่ม MAX ผลลัพธ์เป็นค่ามากที่สุดของข้อมูลทั้งกลุ่ม COUNT ผลลัพธ์เป็นจำนวนรายการของข้อมูลทั้งกลุ่ม รูปแบบ >> SELECT ฟังก์ชัน (ชื่อคอลัมน์ที่ต้องการแสดง or *) FROM ชื่อตาราง ;
ตัวอย่าง หาค่าเฉลี่ยด้วย AVG() โจทย์ >> ต้องการทราบค่าเฉลี่ยเงินเดือน(salary)พนักงาน(employee)ทุกคน SQL >> SELECT AVG(salary) FROM employee ; ผลลัพธ์ >> AVG(salary) 5642
ตัวอย่าง หาค่าเฉลี่ยด้วย AVG() โจทย์ >> ต้องการทราบราคาสินค้าเฉลี่ย(P_PRICE ) SQL >> SELECT AVG(P_PRICE) FROM PRODUCT; ผลลัพธ์ >> AVG(P_PRICE) 40 โจทย์ >> ต้องการดูสินค้า (PRODUCT) ที่มีราคา (P_PRICE) สูงกว่าราคาสินค้าเฉลี่ย SQL >> SELECT * FROM PRODUCT WHERE P_PRICE > (SELECT AVG(P_PRICE) FROM PRODUCT) ORDER BY P_PRICE DESC; หาราคาสินค้าเฉลี่ย P_CODE P_DESCRIPT P_ONHAND P_PRICE 1 ค้อน 23 90 2 ตะไบ 46 41 ผลลัพธ์ >>
ตัวอย่าง หาผลรวมด้วย SUM() โจทย์ >> ต้องการดูผลรวมของจำนวนสินค้า (AMOUNT)ที่อยู่ในคลังสินค้าทั้งหมด SQL >> SELECT SUM(AMOUNT) FROM PRODUCT; ผลลัพธ์ >> SUM(AMOUNT) 69 โจทย์ >> ต้องการหามูลค่าสินค้าที่มีอยู่ในร้านทั้งหมด หมายเหตุ มูลค่าสินค้าแต่ละประเภท = จำนวนสินค้าแต่ละประเภท(P_ONHAND) * ราคาสินค้าต่อหน่วย(P_PRICE) SQL >> SELECT SUM(P_ONHAND * P_PRICE) AS TOTAL_VALUE FROM PRODUCT; ผลลัพธ์ >> P_DESCRIPT P_ONHAND P_PRICE ตะไบ 46 41 ค้อน 23 90 TOTAL_VALUE 3956
ตัวอย่าง หาค่าต่ำสุด MIN() โจทย์ >> ต้องการหาราคาสินค้า(P_PRICE)ที่ถูกที่สุดในร้าน SQL >> SELECT MIN(P_PRICE) FROM PRODUCT; ผลลัพธ์ >> MIN(P_PRICE) 41 โจทย์ >> ต้องการดูรายละเอียดของสินค้าที่ถูกที่สุดในร้าน SQL >> SELECT * FROM PRODUCT WHERE P_PRICE = (SELECT MIN(P_PRICE) FROM PRODUCT); ผลลัพธ์ >> P_DESCRIPT P_ONHAND P_PRICE ตะไบ 46 41 ค้อน 23 90 P_DESCRIPT P_ONHAND P_PRICE ตะไบ 46 41
ตัวอย่าง หาค่าสูงสุด MAX() โจทย์ >> ต้องการหาราคาสินค้าที่แพงที่สุดในร้าน SQL >> SELECT MAX(P_PRICE) FROM PRODUCT; ผลลัพธ์ >> MAX(P_PRICE) 90 โจทย์ >> ต้องการดูรายละเอียดของสินค้าที่แพงที่สุดในร้าน SQL >> SELECT * FROM PRODUCT WHERE P_PRICE = (SELECT MAX(P_PRICE) FROM PRODUCT); ผลลัพธ์ >> P_DESCRIPT P_ONHAND P_PRICE ตะไบ 46 41 ค้อน 23 90 P_DESCRIPT P_ONHAND P_PRICE ตะไบ 46 90
ตัวอย่าง นับจำนวนรายการ COUNT() โจทย์ >> ต้องการนับจำนวนลูกค้าของบริษัท SQL >> SELECT COUNT(*) FROM customer ; ผลลัพธ์ >> COUNT(*) 21
ตัวอย่าง นับจำนวนรายการ COUNT() โจทย์ >> แสดงจำนวนรายการสั่งซื้อสินค้าทั้งหมด พร้อมระบุจำนวนรายการสินค้าทั้งหมด ที่มีการสั่งซื้อ SELECT COUNT(*) AS TOTAL , COUNT(DISTINCT IDOrder) AS ORDER FROM Order; นับจำนวนรายการสั่งซื้อสินค้าทั้งหมดพร้อมทั้งเปลี่ยนหัวคอลัมน์เป็น TOTAL SQL >> นับจำนวนรายการสินค้าทั้งหมดที่มีการสั่งซื้อโดยไม่นับจำนวนรายการที่ไม่ซ้ำกันพร้อมทั้งเปลี่ยนหัวคอลัมน์เป็น ORDER ผลลัพธ์ >> OrderDate IDOrder 1-SEP-2012 R1 12-SEP-2012 R2 1-OCT-2012 TOTAL ORDER 2 R1 1 R2
GROUP BY และ HAVING GROUP BY เป็นคำสั่งที่ใช้สำหรับการแสดงผลในลักษณะจัดกลุ่ม อาจใช้ร่วมกับ HAVING ในการกำหนดเงื่อนไขของการแสดงผล รูปแบบ >> SELECT ชื่อคอลัมน์ที่ต้องการแสดง หรือ * FROM ชื่อตาราง WHERE เงื่อนไข GROUP BY ชื่อคอลัมน์ที่ต้องการจัดกลุ่ม HAVING เงื่อนไข ORDER BY ชื่อคอลัมน์ที่ต้องการเรียงลำดับ ASC หรือ DESC;
ตัวอย่าง การใช้ GROUP BY จัดกลุ่มโดยใช้ชื่อ(Name) SELECT Name, SUM(Amount) FROM Income GROUP BY Name; Income ผลลัพธ์ Name Amount ANT 5500 BAT 4500 7100 Name SUM(Amount) ANT 12600 BAT 4500
ตัวอย่าง การใช้ GROUP BY โจทย์ >> ต้องการทราบค่าเฉลี่ยของวงเงิน(credit_lim)ของลูกค้า(customer )แต่ละกลุ่ม โดยแบ่งกลุ่มตามที่อยู่(address) SQL >> SELECT address, AVG(credit_lim) FROM customer GROUP BY address; จัดกลุ่มตามที่อยู่(address)
ตัวอย่าง การใช้ GROUP BY และ HAVING จัดกลุ่มโดยใช้ชื่อ(Name) SELECT Name, SUM(Amount) FROM Income GROUP BY Name HAVING NAME = “ANT”; แสดงผลเฉพาะ NAME เท่ากับ ANT Income ผลลัพธ์ Name Amount ANT 5500 BAT 4500 7100 Name SUM(Amount) ANT 12600
ตัวอย่าง การใช้ GROUP BY และ HAVING โจทย์ >> ต้องการทราบค่าเฉลี่ยของวงเงินของลูกค้าแต่ละกลุ่มโดยแบ่งกลุ่มตามที่อยู่(address) ที่มีวงเงินเฉลี่ยตั้งแต่ 300,000 ขึ้นไป มูลค่าเฉลี่ยของวงเงิน SQL >> SELECT address, AVG(credit_lim) FROM customer GROUP BY address HAVING AVG(credit_lim)>=300000 ; จัดกลุ่มตามที่อยู่(address) address AVG(credit_lim) Ayuthaya 800000 Bangkok 500000 Rayong 300000 มีวงเงินเฉลี่ยตั้งแต่ 300,000 ขึ้นไป
SUM(P_PRICE * P_ONHAND) ตัวอย่าง การใช้ GROUP BY และ WHERE โจทย์ >> ต้องการดูมูลค่ารวมของสินค้าที่แต่ละผู้ค้าส่ง(V_CODE) ส่งสินค้าให้กับเรา มูลค่ารวมของสินค้า SQL >> SELECT V_CODE, SUM(P_PRICE * P_ONHAND) FROM PRODUCT WHERE V_CODE <> NULL GROUP BY V_CODE; ผู้ค้าส่งต้องส่งสินค้า คือ ไม่มีค่าเท่ากับ ค่าว่าง P_DESCRIPT P_ONHAND P_PRICE V_CODE ตะไบ 46 41 v001 ค้อน 23 90 สว่านไร้สาย 12 380 v002 ตะปู 10 50 จัดกลุ่มตามผู้ค้าส่ง (V_CODE) V_CODE SUM(P_PRICE * P_ONHAND) v001 3956 v002 4560 ผลลัพธ์ >>
ตัวอย่าง การใช้ GROUP BY และ WHERE โจทย์ >> ต้องการดูราคาเฉลี่ยของสินค้าที่แต่ละผู้ค้าส่ง(V_CODE) ส่งสินค้าให้กับเรา ราคาเฉลี่ยของสินค้า SQL >> SELECT V_CODE, AVG(P_PRICE) FROM PRODUCT WHERE V_CODE <> NULL GROUP BY V_CODE; ผู้ค้าส่งต้องส่งสินค้า คือ ไม่มีค่าเท่ากับ ค่าว่าง P_DESCRIPT P_ONHAND P_PRICE V_CODE ตะไบ 46 41 v001 ค้อน 23 90 สว่านไร้สาย 12 380 v002 ตะปู 10 50 จัดกลุ่มตามผู้ค้าส่ง (V_CODE) V_CODE AVG(P_PRICE) v001 65.5 v002 380 ผลลัพธ์ >>
ตัวอย่าง การใช้ GROUP BY ,WHERE และ HAVING โจทย์ >> ต้องการดูราคาเฉลี่ยของสินค้าที่แต่ละผู้ค้าส่ง ส่งสินค้าให้กับเรา โดยดูเฉพาะราคาเฉลี่ยที่ต่ำกว่า 100 ราคาเฉลี่ยของสินค้า SQL >> SELECT V_CODE, AVG(P_PRICE) FROM PRODUCT WHERE V_CODE <> NULL GROUP BY V_CODE HAVING AVG(P_PRICE) < 100; ผู้ค้าส่งต้องส่งสินค้า คือ ไม่มีค่าเท่ากับ ค่าว่าง จัดกลุ่มตามผู้ค้าส่ง (V_CODE) ดูเฉพาะราคาเฉลี่ยที่ต่ำกว่า 100 P_DESCRIPT P_ONHAND P_PRICE V_CODE ตะไบ 46 41 v001 ค้อน 23 90 สว่านไร้สาย 12 380 v002 ตะปู 10 50 V_CODE AVG(P_PRICE) v001 65.5 ผลลัพธ์ >>
ตัวอย่าง การใช้ GROUP BY ,WHERE และ HAVING โจทย์ >> ต้องการดูข้อมูลค่าเฉลี่ยของสินค้าและหาจำนวนสินค้าทั้งหมดที่แต่ละผู้ค้าส่งสินค้า ให้กับเรา โดยดูเฉพาะมูลค่าเฉลี่ยของราคาสินค้าที่ต่ำกว่า 100 หาจำนวนสินค้า SQL >> SELECT V_CODE, SUM(P_ONHAND), AVG(P_PRICE) FROM PRODUCT WHERE V_CODE IS NOT NULL GROUP BY V_CODE HAVING AVG(P_PRICE) < 100; ราคาเฉลี่ยของสินค้า ผู้ค้าส่งต้องส่งสินค้า คือ ไม่มีค่าเท่ากับ ค่าว่าง จัดกลุ่มตามผู้ค้าส่ง (V_CODE) P_DESCRIPT P_ONHAND P_PRICE V_CODE ตะไบ 10 41 v001 ค้อน 20 90 สว่านไร้สาย 12 380 v002 ตะปู 50 ดูเฉพาะราคาเฉลี่ยที่ต่ำกว่า 100 V_CODE SUM(P_ONHAND) AVG(P_PRICE) v001 30 65.5 ผลลัพธ์ >>
ตัวอย่าง การใช้ GROUP BY ,WHERE และ HAVING โจทย์ >> ต้องการดูข้อมูลค่าเฉลี่ยของสินค้าและหาจำนวนสินค้าทั้งหมดที่แต่ละผู้ค้าส่งสินค้า ให้กับเรา โดยดูเฉพาะมูลค่าเฉลี่ยของราคาสินค้าที่ต่ำกว่า 100 SQL >> SELECT V_CODE, SUM(P_ONHAND), AVG(P_PRICE) FROM PRODUCT WHERE V_CODE IS NOT NULL GROUP BY V_CODE HAVING AVG(P_PRICE) < 100; หรือ ใช้ Alias (ชื่อแทน) เพื่อการแสดงผลที่ดียิ่งขึ้น SELECT V_CODE, SUM (P_ONHAND) AS AMOUNT_OF_PRODUCT, AVG(P_PRICE) AS PRICE_AVERAGE FROM PRODUCT WHERE V_CODE IS NOT NULL GROUP BY V_CODE HAVING AVG(P_PRICE) < 100; ผลลัพธ์ >> V_CODE AMOUNT_OF_PRODUCT PRICE_AVERAGE v001 30 65.5
ตัวอย่าง การใช้ GROUP BY และ WHERE โจทย์ >> ต้องการดูมูลค่ารวมของสินค้าที่แต่ละผู้ค้าส่ง(V_CODE) ส่งสินค้าให้กับเรา และให้แสดงผลเรียงตามราคาจากมากไปหาน้อย SQL >> SELECT V_CODE, SUM(P_PRICE * P_ONHAND) AS TOTAL_PRICE FROM PRODUCT WHERE V_CODE <> NULL GROUP BY V_CODE ORDER BY TOTAL_PRICE DESC; ผลลัพธ์ >> P_DESCRIPT P_ONHAND P_PRICE V_CODE ตะไบ 46 41 v001 ค้อน 23 90 สว่านไร้สาย 12 380 v002 ตะปู 10 50 V_CODE TOTAL_PRICE v002 4560 v001 3956
การแสดงผลจากหลายตารางโดยการ Join (เชื่อม) ตารางสินค้า(PRODUCT) มีรายละเอียดดังนี้ PRODUCT(P_CODE,P_DESCRIPT, P_PRICE, P_INDATE, V_CODE) FK(V_CODE) to VENDOR ตารางผู้ค้าส่ง(VENDOR) มีรายละเอียดดังนี้ VENDOR(V_CODE, V_NAME, V_CONTACT, V_AREACODE, V_PHONE) โจทย์ >> ต้องการดูรายละเอียดสินค้า(P_DESCRIPT) และต้องการทราบชื่อผู้ค้าส่ง(V_NAME) พนักงานที่เราติดต่อ(V_CONTACT)และที่อยู่ของผู้ค้าส่ง(V_AREACODE) และเบอร์โทรศัพท์ผู้ค้าส่ง(V_PHONE) ชื่อตาราง.ชื่อคอลัมน์ SQL >> SELECT PRODUCT.P_DESCRIPT, VENDOR.V_NAME, VENDOR.V_CONTACT, VENDOR.V_AREACODE, VENDOR.V_PHONE FROM PRODUCT, VENDOR WHERE PRODUCT.V_CODE = VENDOR.V_CODE; ชื่อตารางที่นำมาเชื่อมกัน นำเอาคอลัมน์ที่ทั้ง 2 ตารางมาเป็นเงื่อนไข
การแสดงผลจากหลายตารางโดยการ Join (เชื่อม) ตารางสินค้า(PRODUCT) มีรายละเอียดดังนี้ PRODUCT(P_CODE,P_DESCRIPT, P_PRICE, P_INDATE, V_CODE) FK(V_CODE) to VENDOR ตารางผู้ค้าส่ง(VENDOR) มีรายละเอียดดังนี้ VENDOR(V_CODE, V_NAME, V_CONTACT, V_AREACODE, V_PHONE) โจทย์ >> ต้องการดูรายละเอียดสินค้า (P_DESCRIPT) และผู้ค้าส่งที่ส่งสินค้า(V_NAME) หลังวันที่ 1-SEP-2012(P_INDATE) ชื่อตาราง.ชื่อคอลัมน์ SQL >> SELECT PRODUCT.P_DESCRIPT, PRODUCT.P_INDATE, PRODUCT.P_PRICE, VENDOR.V_NAME, VENDOR.V_AREACODE, VENDOR.V_PHONE FROM PRODUCT, VENDOR WHERE PRODUCT.V_CODE = VENDOR.V_CODE AND PRODUCT.P_INDATE > “1-SEP-2012”; ชื่อตารางที่นำมาเชื่อมกัน นำเอาคอลัมน์ที่ทั้ง 2 ตารางมาเป็นเงื่อนไข ส่งสินค้าหลังวันที่ 1-SEP-2012(P_INDATE)
แบบฝึกหัด 1.จงเขียนสคริปต์คำสั่ง SQL ดังต่อไปนี้ 1.1 จงเปลี่ยนชนิดของข้อมูล ของตาราง student คอลัมน์ student_id เปลี่ยนเป็น int(5) 1.2 จงเพิ่ม คอลัมน์ department ของตาราง teacher โดยมีชนิดข้อมูลเป็น char(20) 1.3 หากต้องการลบคอลัมน์ department ของตาราง teacher ต้องเขียนคำสั่งอย่างไร 2.จงเขียนสคริปต์คำสั่ง SQL เพื่อแทรกข้อมูล (Insert) ลงในตารางดังต่อไปนี้ Table name : subject 3.จงเขียนสคริปต์คำสั่ง SQL เพื่อขอดูข้อมูลดังต่อไปนี้ 3.1 นักศึกษาที่มีงานอดิเรก(Hobby) คือ ‘อ่านหนังสือ’ โดยให้แสดงรหัสนักศึกษา(St_Code)และชื่องานอดิเรก (Hobby) จากตารางนักศึกษา(Student) 3.2 รหัสวิชา ‘I003’ ใช้หนังสือเล่มใดสอนบ้าง โดยให้แสดงรหัสวิชา(Subject_id) และชื่อหนังสือ(BookName) จากตาราง รายวิชา(Subject) 3.3 แสดงรายชื่อนักศึกษาที่ขึ้นต้นด้วย ‘ม’ และเรียนอยู่ใน class ‘B’ โดยให้แสดงชื่อนักศึกษา (St_Name) และ class 3.4 ให้แสดงรหัสนักศึกษา (St_Code)ที่มีงานอดิเรก (Hobby) คือ ฟังเพลง และทำเว็บไซต์ จากตารางนักศึกษา(Student) 3.5 ให้แสดงรหัสนักศึกษา (St_Code) ที่ได้คะแนน(Point)ระหว่าง 70-80 ของวิชา(Subject_id) ‘I001’ จากตารางคะแนนสอบ(ExamPoint) Subject_id Name credit I004 การวิเคราะห์และออกแบบระบบ 3 S003 โปรแกรมชั้นสูง 2