PowerPoint Template

Download Report

Transcript PowerPoint Template

1
Chapter 10 : ภาษาทางด้ านฐานข้ อมูลคาสั่ง SQL
(SQL Command)
4122205Z ระบบฐานข้ อมูลและการออกแบบ
อ.คเชนทร์ ซ่ อนกลิ่น
2
แนะนาภาษา SQL
• Query Language หรื อเอสคิวแอล (SQL) หรื อซีควอล (SE-QUEL) เป็ นภาษาที่
พัฒนาขึ ้นมาโดยบริษัท IBM
• เป็ นภาษามาตราฐานบนระบบฐานข้ อมูลเชิงสัมพันธ์ สามารถใช้ งานได้ กบั เครื่ อง
คอมพิวเตอร์ หลายระดับ
• ภาษา SQL (Standard Query Language) เป็ นส่วนหนึง่ ของระบบฐานข้ อมูล
แบบรี เลชัน่ เนล(Relational Database) ที่ได้ รับความนิยมมากเพราะง่ายต่อความ
เข้ าใจ และอยูใ่ นรูปภาษาอังกฤษ
• ปั จจุบนั มีซอฟต์แวร์ ระบบจัดการฐานข้ อมูล (DBMS) ที่สนับสนุนการใช้ คาสัง่
SQL เช่น MySQL, ORACLE, DB2,SQL Sever, MS-Access
3
ส่ วนประกอบของระบบจัดการฐานข้ อมูล
DBMS
SQL (Structure Query Language)
พจนานุกรมข้ อมูล (Data Dictionary)
โปรแกรมอานวยความสะดวก (General Utilities)
โปรแกรมช่วยสร้ างโปรแกรมประยุกต์
(Application Generators)
โปรแกรมช่วยสร้ างรายงาน (Report Generators)
4
วัตถุประสงค์ ของ SQL
1. สร้ างฐานข้ อมูลและตาราง
2. สนับสนุนการจัดการฐานข้ อมูล ซึ่งประกอบด้ วย
การเพิ่ม การปรับปรุ งและการลบข้ อมูล
3. สนับสนุนการเรียกใช้ หรือสืบค้ นข้ อมูล
5
ประเภทของคาสั่งในภาษา SQL
1. DDL (Data Definition Language) เป็ นชุดคาสัง่ ที่ใช้ ในการนิยาม กาหนด หรื อการ
สร้ างข้ อมูลบนฐานข้ อมูล ได้ แก่ คาสัง่ CREATE TABLE เป็ นต้ น
2. DML (Data Manipulation Language) เป็ นชุดคาสัง่ ที่ใช้ ในการประมวลผลหรื อ
จัดการกับข้ อมูลในฐานข้ อมูล ได้ แก่ คาสัง่ SELECT, INSERT , UPDATE เป็ นต้ น
3. DCL (Data Control Language) เป็ นคาสัง่ ที่ใช้ ในการควบคุมสิทธิ์ของผู้ใช้ ในการใช้
ข้ อมูล รวมทังส่
้ วนที่ใช้ ควบคุมการใช้ ฐานข้ อมูลจากผู้ใช้ หลายๆคนพร้ อมกัน
6
รูปแสดงประเภทของคาสั่งในภาษา SQL
ภาษา SQL
(Standard Query Language)
ภาษานิยามข้ อมูล
ภาษาจัดการข้ อมูล
ภาษาควบคุมข้ อมูล
(DDL)
(DML)
(DCL)
• CREATE
• ALTER
• DROP
•
•
•
•
SELECT
UPDATE
INSERT
DELETE
• GRANT
• REVOKE
7
1.ภาษานิยามข้ อมูล (Data Definition Language)
▫ CREATE ใช้ สร้ างตาราง
▫ ALTER ใช้ แก้ ไข/เปลี่ยนแปลงตาราง
▫ DROP ใช้ สาหรับลบตาราง
เป็ นกลุ่มคาสั่งที่ใช้ กระทากับโครงสร้ างของฐานข้ อมูล
8
CREATE TABLE การสร้ างตาราง
รู ปแบบ >>
CREATE TABLE ชือ่ ตาราง
(
ชือ่ คอลัมน์1 ประเภทข้อมูล Constraint,
ชือ่ คอลัมน์2 ประเภทข้อมูล Constraint,
PRIMARY KEY (ชือ่ คอลัมน์) ,
FOREIGN KEY (ชือ่ คอลัมน์ ) REFERENCES ชือ่ ตาราง,
);
9
CREATE TABLE การสร้ างตาราง
ตัวอย่ าง >>
ชื่อตาราง EMPLOYEE
ชนิดข้ อมูล
CREATE TABLE EMPLOYEE (
ID
CHAR(5)
NAME
VARCHAR(35)
ADDRESS
VARCHAR(15)
PHONE
CHAR(8)
EMAIL
CHAR(1)
PRIMARY KEY (ID)
);
NOT NULL ,
NOT NULL ,
NOT NULL ,
NOT NULL ,
NOT NULL ,
ให้ ID เป็ น PK
Constraint
10
CREATE TABLE การสร้ างตาราง
ตัวอย่ าง >>
ชื่อตาราง PRODUCT
ชนิดข้ อมูล
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
Constraint
11
ALTER TABLE การแก้ ไข/เปลี่ยนแปลงตาราง
รู ปแบบ >>
ALTER TABLE ชือ่ ตาราง
คาสัง่ เปลีย่ นแปลงตาราง ชือ่ คอลัมน์ ประเภทข้อมูล ;
คาสัง่ การเปลี่ยนแปลง ได้ แก่
1. ADD เพิ่มคอลัมน์
2. MODIFY แก้ ไขคอลัมน์ในตาราง
3. DROP ลบคอลัมน์
12
ALTER TABLE การแก้ ไข/เปลี่ยนแปลงตาราง
ตัวอย่ าง ADD เพิ่มคอลัมน์
โจทย์ >> เพิ่มคอลัมน์ที่เป็ นรหัสแผนก(IDdepartment)
ในตาราง employee เพื่อบอกว่าพนักงานสังกัดอยูแ่ ผนกใด
SQL >>
ALTER TABLE employee
ADD IDdepartment char(6) ;
13
ALTER TABLE การแก้ ไข/เปลี่ยนแปลงตาราง
ตัวอย่ าง MODIFY แก้ ไขคอลัมน์ ในตาราง
โจทย์ >> เปลี่ยนขนาดของข้ อมูลในคอลัมน์ IDdeparment
ในตาราง employee จากขนาด 6 ตัวอักษร เป็ นขนาด 5 ตัวอักษร
SQL >>
ALTER TABLE employee
MODIFY (IDdepartment char(5)) ;
14
ALTER TABLE การแก้ ไข/เปลี่ยนแปลงตาราง
ตัวอย่ าง DROP ลบคอลัมน์
โจทย์ >> ลบคอลัมน์ที่เป็ นรหัสแผนก(IDdepartment)
ในตาราง employee
SQL >>
ALTER TABLE employee
DROP IDdepartment ;
15
DROP TABLE การลบตาราง
รู ปแบบ >>
DROP TABLE ชือ่ ตาราง ;
ตัวอย่ าง
โจทย์ >> ต้ องการลบตาราง(Table) ORDER ออกจากฐานข้ อมูล
SQL
>>
DROP TABLE ORDER;
16
2. ภาษาจัดการข้ อมูล (Data Manipulation Language)
▫ SELECT
▫ INSERT
▫ UPDATE
▫ DELETE
ใช้ เรี ยกข้ อมูลในตารางมาแสดงผล
ใช้ เพิ่มข้ อมูลเข้ าไปในตาราง
ใช้ แก้ ไขข้ อมูลในตาราง
ใช้ ลบข้ อมูลในตาราง
เป็ นกลุ่มคาสั่งที่กระทากับข้ อมูลในฐานข้ อมูล
17
SELECT <การเรียกดูข้อมูล>
 การเรี ยกดูข้อมูลในคอลัมน์ ท่ ตี ้ องการ
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการดูขอ้ มูลที ่ 1, ชือ่ คอลัมน์ที่ 2,…,ชือ่ คอลัมน์ที่ n
FROM ชือ่ ตาราง ;
18
SELECT <การเรียกดูข้อมูล>
ตัวอย่ าง
Employees
Emp_ID
First_name
Last_name
Address
001
สมชาย
ชาตรี
เชียงใหม่
002
สมหญิง
งามแท้
อุตรดิตถ์
โจทย์ >> ต้ องการแสดงชื่อและนามสกุลของพนักงาน
SQL
>> SELECT First_name, Last_name FROM Employees ;
ผลลัพธ์
>>
First_name
Last_name
สมชาย
ชาตรี
สมหญิง
งามแท้
19
SELECT <การเรียกดูข้อมูล>
 การเรี ยกดูข้อมูลในทุก ๆ คอลัมน์
รู ปแบบ >>
SELECT *
FROM ชือ่ ตาราง ;
20
SELECT <การเรียกดูข้อมูล>
ตัวอย่ าง
Employees
Emp_ID
First_name
Last_name
Address
001
สมชาย
ชาตรี
เชียงใหม่
002
สมหญิง
งามแท้
อุตรดิตถ์
โจทย์ >> ต้ องการแสดงข้ อมูลของพนักงาน
SQL
>> SELECT * FROM Employees ;
ผลลัพธ์
>>
Emp_ID
First_name
Last_name
Address
001
สมชาย
ชาตรี
เชียงใหม่
002
สมหญิง
งามแท้
อุตรดิตถ์
21
SELECT <การเรียกดูข้อมูล>
 การเรี ยกดูข้อมูลเฉพาะบางแถวที่ตรงตามเงื่อนไข
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการดูขอ้ มูลที ่ 1, ชือ่ คอลัมน์ที่ 2,…,ชือ่ คอลัมน์ที่ n
FROM ชือ่ ตาราง
WHERE เงือ่ นไข ;
โดยภายในเงื่อนไขประกอบด้ วย
เงือ่ นไข => คอลัมน์ทีเ่ ป็ นเงือ่ นไข Operator Value
22
SELECT <การเรียกดูข้อมูล>
ตัวอย่ าง
Employees
Emp_ID
First_name
Last_name
Address
001
สมชาย
ชาตรี
เชียงใหม่
002
สมหญิง
งามแท้
อุตรดิตถ์
โจทย์ >> ตัวอย่ าง แสดงชื่อ นามสกุล และที่อยู่ของพนักงาน
โดยจะแสดงข้ อมูลเฉพาะพนักงาน ที่อยู่จังหวัดอุตรดิตถ์
SQL
ผลลัพธ์
>>
>>
SELECT First_name, Last_name, Address
FROM Employees
WHERE Address = ‘อุตรดิตถ์’;
First_name
Last_name
Address
สมหญิง
งามแท้
อุตรดิตถ์
Address คอลัมน์ที่เป็ นเงื่อนไข
อุตรดิตถ์ คือ value
= คือ operator
23
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
Operator ที่สามารถใช้ กาหนดเงื่อนไขใน where มีดงั นี ้
• ตัวเปรี ยบเทียบ (Comparison operators)
ได้ แก่ เครื่ องหมาย =, <, >, <=, >=, <>
• ตัวปฏิบัตกิ ารทางด้ านลอจิก (Logical operators)
▫ AND
▫ OR
▫ NOT
เชื่อมต่ อเงื่อนไขในกรณีท่ มี ีมากกว่ า 1 เงื่อนไข
• ตัวปฏิบัตกิ ารพิเศษ
NOT, BETWEEN , IN , LIKE , OR , SOME , IS NULL , IS NOT NULL , EXISTS , DISTINCT
24
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
• ตัวเปรี ยบเทียบ (Comparison operators)
ตัวเปรียบเทียบ
=
ความหมาย
เท่ากับ
<
<=
>
>=
น้ อยกว่า
น้ อยกว่าหรื อเท่ากับ
มากกว่า
มากกว่าหรื อเท่ากับ
<> หรื อ !=
ไม่เท่ากับ
25
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
• ตัว Logical operators
Logical operators
AND
ความหมาย
และ
OR
NOT
หรื อ
ตรงกันข้ าม, ไม่เท่ากับ
26
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
• ตัวปฏิบัตกิ ารพิเศษ (Special operators)
▫
▫
▫
▫
BETWEEN…AND…
IS NULL
IS NOT NULL
LIKE
▫ IN
▫ EXISTS
▫ DISTINCT
: ตรวจสอบช่วงของค่าใน Attribute
: ตรวจสอบว่ามีค่าว่างหรื อไม่
: ตรวจสอบว่าไม่มีค่าว่างหรื อไม่
: ตรวจสอบค่า String ใน Attribute ว่ามีสว่ น
คล้ ายกับที่กาหนดไว้ หลัง LIKE หรื อไม่
: ตรวจสอบค่าใน Attribute ว่าตรงกันกับที่
กาหนดไว้ หลัง IN หรื อไม่
: ตรวจสอบว่ามีการ Return ค่าของ Subquery หรื อไม่
: จากัดค่าให้ แสดงผลโดยค่าไม่ซ ้ากัน
27
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ AND
Employees
Emp_ID
First_name Last_name Address
Salary
001
สมชาย
ชาตรี
เชียงใหม่
15000
002
สมหญิง
งามแท้
อุตรดิตถ์
6000
โจทย์ >> ต้ องการ แสดงชื่อ นามสกุล ที่อยู่ และเงินเดือนโดยจะแสดงข้ อมูลเฉพาะ
พนักงานที่อยู่จังหวัดอุตรดิตถ์ และมีเงินเดือนมากกว่ า 5000 บาท
จากโจทย์
สิ่งทีต่ ้ องแสดง คือ ชื ่อ นามสกุล ทีอ่ ยู่ เงิ นเดื อน
จากตาราง พนักงาน
เงื่อนไข
พนักงานคนนัน้ ต้องอยู่จงั หวัดอุตรดิ ตถ์ และมี เงิ นเดื อน
มากกว่า 5000 บาท
คอลัมน์ เงื่อนไข Address และ Salary
28
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
29
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ OR
Employees
Emp_ID
First_name Last_name Address
Salary
001
สมชาย
ชาตรี
เชียงใหม่
15000
002
สมหญิง
งามแท้
อุตรดิตถ์
6000
โจทย์ >> ต้ องการ แสดงชื่อ นามสกุล ที่อยู่ และเงินเดือนโดยจะแสดงข้ อมูลเฉพาะ
พนักงานที่อยู่จังหวัดอุตรดิตถ์ หรือมีเงินเดือนมากกว่ า 5000 บาท
จากโจทย์
สิ่งทีต่ ้ องแสดง คือ ชื ่อ นามสกุล ทีอ่ ยู่ เงิ นเดื อน
จากตาราง พนักงาน
เงื่อนไข
พนักงานคนนัน้ ต้องอยู่จงั หวัดอุตรดิ ตถ์ หรื อมี เงิ นเดื อน
มากกว่า 5000 บาท
คอลัมน์ เงื่อนไข Address และ Salary
30
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ OR
จากโจทย์จะเห็นว่า มีสองเงื่อนไข แต่โจทย์ใช้ คาว่าหรื อ แสดงว่ามีเงื่อนไขใดเงื่อนใดหนึง่ เป็ นจริง
หรื อเป็ นจริงทั ้งสองเงื่อนไขก็ได้ ดังนั ้นจึงต้ องใช้ OR เชื่อมระหว่าง 2 เงื่อนไขนี ้
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 เข้ าเงื่อนไขใดเงื่อนไขหนึ่งก็เป็ นจริงแล้ ว
31
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ BETWEEN…AND…
กาหนดเงื่อนไขให้ กบั where โดยเลือกช่วงข้ อมูลที่สนใจ
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการดูขอ้ มูลที ่ 1, ชือ่ คอลัมน์ที่ 2,…,ชือ่ คอลัมน์ที่ n
FROM ชือ่ ตาราง
WHERE ชือ่ คอลัมน์ Between Value1 AND value2 ;
32
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
33
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
34
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ LIKE
เลือกข้ อมูลที่ตรงกับความต้ องการด้ วย LIKE
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการดูขอ้ มูลที ่ 1, ชือ่ คอลัมน์ที่ 2,…,ชือ่ คอลัมน์ที่ n
FROM ชือ่ ตาราง
WHERE ชือ่ คอลัมน์ Like pattern ;
คือสิ่งที่ต้องต้ องการค้ นหา
โดย Pattern มีรูปแบบดังนี ้
% หมายถึง ตัวอักษรใด ๆ จานวนไม่จากัดตัวอักษร
_ หมายถึง ตัวอักษรใด ๆ จานวน 1 ตัวอักษร
35
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
36
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
37
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ IN
เป็ นคาสัง่ ที่ใช้ สาหรับการระบุเงื่อนไขการเลือกข้ อมูลในตาราง (Table) โดยเลือก
เฉพาะค่าที่กาหนด
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการดูขอ้ มูลที ่ 1, ชือ่ คอลัมน์ที่ 2,…,ชือ่ คอลัมน์ที่ n
FROM ชือ่ ตาราง
WHERE ชือ่ คอลัมน์ IN (value1,value2,...);
38
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
สมหวัง
39
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
สมใจ
40
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ IS NULL
เป็ นการระบุเงื่อนไขว่าคอลัมน์ที่ต้องการต้ องมีคา่ เป็ น NULL
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการดูขอ้ มูลที ่ 1, ชือ่ คอลัมน์ที่ 2,…,ชือ่ คอลัมน์ที่ n
FROM ชือ่ ตาราง
WHERE ชือ่ คอลัมน์ IS NULL;
41
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
สมใจ
สมหวัง
42
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ IS NOT NULL
เป็ นการระบุเงื่อนไขว่าคอลัมน์ที่ต้องการต้ องไม่มีคา่ เป็ น NULL
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการดูขอ้ มูลที ่ 1, ชือ่ คอลัมน์ที่ 2,…,ชือ่ คอลัมน์ที่ n
FROM ชือ่ ตาราง
WHERE ชือ่ คอลัมน์ IS NOT NULL;
43
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
สมชาย
เชียงใหม่
สมหญิง
อุตรดิตถ์
44
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ DISTINCT
- ใช้ สาหรับการแสดงผลค่าที่ซ ้ากันเพียง 1 ค่า
รู ปแบบ >>
SELECT DISTINCT ชือ่ คอลัมน์ทีต่ อ้ งการให้แสดงผลค่าซ้าเพียง 1 ค่า
FROM ชือ่ ตาราง;
45
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ DISTINCT
SELECT V_CODE
FROM PRODUCT;
ผลลัพธ์
หากไม่ ใช้ DISTINCT
ผลลัพธ์ จะได้ ค่าที่ซา้ กัน
SELECT DISTINCT V_CODE
FROM PRODUCT;
ผลลัพธ์
46
Operator (ตัวปฏิบัตกิ าร) ที่ใช้ ใน Where
ตัวอย่างการใช้ DISTINCT
SELECT DISTINCT Amphur
FROM Personal;
Personal
FirstName
LastName
Amphur
มานะ
พากเพียร
เมือง
อดทน
ตั ้งใจเรี ยน
เมือง
มานี
หมัน่ เพียร
ปง
ผลลัพธ์
Amphur
เมือง
ปง
47
INSERT < การเพิ่มข้ อมูลเข้ าไปในตาราง >
 การเพิ่มข้ อมูลลง หรื อ การเพิ่มแถว(Row) เข้ าไปในตาราง
รู ปแบบ >>
INSERT INTO ชือ่ ตาราง VALUES (ข้อมูลทุกคอลัมน์);
หรื อ
INSERT INTO ชือ่ ตาราง (ชือ่ ทุกคอลัมน์) VALUES (ข้อมูลทุกคอลัมน์);
48
INSERT < การเพิ่มข้ อมูลเข้ าไปในตาราง >
ตัวอย่ าง
โจทย์ >>
SQL >>
ป้อนข้ อมูลของลูกค้ าใหม่ ซึง่ มีรหัส 101 ชื่อ สมปอง อาศัยอยู่ เชียงใหม่
เบอร์ โทรศัพท์ 073658758 มีวงเงิน 150,000 บ. และยอดเงินคงเหลือ
100,000 บ.
INSERT INTO customer
VALUES (‘101’,‘สมปอง’, ‘เชียงใหม่’,‘073658758’, 150000 ,100000 ) ;
49
INSERT < การเพิ่มข้ อมูลเข้ าไปในตาราง >
ตัวอย่ าง
SQL >>
INSERT INTO Orders(ProdID, Product, EmpID)
VALUES (999, “Ram”, “02”);
Orders
ProdID
Orders
Product
EmpID
ProdID
Product
EmpID
234
Printer
01
234
Printer
01
657
Table
03
657
Table
03
865
Chair
03
865
Chair
03
999
Ram
02
50
UPDATE <การแก้ ไขข้ อมูลในตาราง>
 การแก้ ไขข้ อมูลในตาราง
รู ปแบบ >>
UPDATE ชือ่ ตาราง
SET ชือ่ คอลัมน์ = ข้อมูลใหม่
WHERE เงือ่ นไข;
51
UPDATE <การแก้ ไขข้ อมูลในตาราง>
ตัวอย่ าง
SQL
>>
UPDATE PRODUCT
SET P_DATE = ’18-JAN-2004’
WHERE P_CODE = ‘P0000007’;
แก้ ไขข้ อมูลวันที่สินค้ าเข้ าคลัง (P_DATE) โดยให้ แก้ ไขเฉพาะสินค้ าที่มีรหัสสินค้ า
(P_CODE) เป็ น P0000007 ให้ เป็ นวันที่สินค้ าเข้ าคลังเป็ น 18-JAN-2004
52
UPDATE <การแก้ ไขข้ อมูลในตาราง>
ตัวอย่ าง
SQL
>>
UPDATE Book
SET Author = ’สมโชค’
WHERE Book_name = ‘ระบบฐานข้ อมูล’;
แก้ ไขข้ อมูลผู้แต่ง (Author) โดยให้ แก้ ไขเฉพาะหนังสือที่ชื่อระบบฐานข้ อมูล
(Book_name) ให้ เป็ นผู้แต่งชื่อสมโชค
53
UPDATE <การแก้ ไขข้ อมูลในตาราง>
ตัวอย่ าง
SQL
>>
UPDATE Book
SET Author = ’สมโชค’, publisher=‘ดอกหญ้ า’
WHERE Book_id = ‘00015’;
แก้ ไขข้ อมูลผู้แต่ง (Author) โดยให้ แก้ ไขเฉพาะหนังสือที่มีรหัส 00015 (Book_id) ให้
เป็ นผู้แต่งชื่อสมโชค และสานักพิมพ์ดอกหญ้ า
54
UPDATE <การแก้ ไขข้ อมูลในตาราง>
ตัวอย่ าง UPDATE แบบไม่ ระบุแถว
SQL
>>
UPDATE Employees
SET Name = “FOX”;
Employees
Employees
EmpID
Name
EmpID
Name
01
ANT
01
FOX
02
BAT
02
FOX
03
CAT
03
FOX
04
DOG
04
FOX
55
UPDATE <การแก้ ไขข้ อมูลในตาราง>
ตัวอย่ าง UPDATE แบบระบุแถว
SQL
>>
UPDATE Employees
SET Name = “FOX”
WHERE EmpID = “04”;
Employees
Employees
EmpID
Name
EmpID
Name
01
ANT
01
ANT
02
BAT
02
BAT
03
CAT
03
CAT
04
DOG
04
FOX
56
DELETE < การลบข้ อมูลในตาราง >
 การลบข้ อมูล หรื อ การลบแถว(Row) ออกจากตาราง
รู ปแบบ >>
DELETE FROM ชือ่ ตาราง
WHERE เงือ่ นไข;
57
DELETE < การลบข้ อมูลในตาราง >
ตัวอย่ าง
โจทย์ >> ในกรณีที่พนักงานชื่อ ‘วิไล’ ลาออกจากบริ ษัท
SQL >>
DELETE FROM employee
WHERE E_name = ‘วิไล’ ;
58
DELETE < การลบข้ อมูลในตาราง >
ตัวอย่ าง DELETE แบบระบุแถว
SQL
>>
DELETE FROM Employees
WHERE EmpID = “04”;
Employees
Employees
EmpID
Name
EmpID
Name
01
ANT
01
ANT
02
BAT
02
BAT
03
CAT
03
CAT
04
DOG
59
DELETE < การลบข้ อมูลในตาราง >
ตัวอย่ าง DELETE แบบไม่ ระบุแถว
SQL
>> DELETE FROM Employees;
Employees
Employees
EmpID
Name
01
ANT
02
BAT
03
CAT
04
DOG
EmpID
Name
60
3. ภาษาควบคุมข้ อมูล (Data Control Language)
▫ GRANT เป็ นคาสัง่ ให้ สิทธิ์ผ้ ใู ช้ (User)
▫ REVOKE เป็ นคาสัง่ ยกเลิกสิทธิ์ผ้ ใู ช้ (User)
ควบคุมสิทธิ์ของผู้ใช้ ในการใช้ ข้อมูล รวมทัง้ ส่ วนที่ใช้
ควบคุมการใช้ ฐานข้ อมูลจากผู้ใช้ หลายๆคนพร้ อมกัน
61
ส่ วนที่ 2
62
การจัดเรี ยงข้ อมูลด้ วย 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;
63
ตัวอย่ าง การจัดเรี ยงข้ อมูลด้ วย ORDER BY
SELECT *
FROM Address
ORDER BY ZipCode ASC;
Address
Amphur
น้ อยไปหามาก
ผลลัพธ์
ZipCode
Amphur
ZipCode
เมืองพะเยา
56000
เมืองพะเยา
56000
จุน
56002
ปง
56001
ปง
56001
จุน
56002
64
ตัวอย่ าง การจัดเรี ยงข้ อมูลด้ วย ORDER BY
SELECT *
FROM Address
ORDER BY ZipCode DESC;
Address
Amphur
มากไปหาน้ อย
ผลลัพธ์
ZipCode
Amphur
ZipCode
เมืองพะเยา
56000
จุน
56002
จุน
56002
ปง
56001
ปง
56001
เมืองพะเยา
56000
65
ตัวอย่ าง การจัดเรี ยงข้ อมูลด้ วย ORDER BY
โจทย์ >> แสดงรหัส(Id), ชื่อ(Name), ที่อยู(่ Addr) และเงินค้ างชาระ(Curr_Bal )
ของลูกค้ า(customer)โดยเรี ยงตามเงินค้ างชาระจากมากไปน้ อย
SELECT Id, Name, Addr, Curr_Bal
FROM customer
ORDER BY Curr_Bal DESC;
Id
---197
110
217
309
100
Name
---------วรชาติ สีคล ้า
ศิรี สุขพานิช
อนันต์ บุญญานุพงศ์
สุภาวดี เพชรสุข
โสภา สีคล ้า
Addr
------อยุธยา
กรุงเทพฯ
กรุงเทพฯ
ระยอง
กรุงเทพฯ
Curr_Bal
------500000
200000
200000
150000
100000
66
ตัวอย่ าง การจัดเรี ยงข้ อมูลด้ วย 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;
67
ตัวอย่ าง การจัดเรี ยงข้ อมูลด้ วย 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;
68
ตัวอย่ าง การจัดเรี ยงข้ อมูลด้ วย 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;
69
การเปลี่ยนหัวคอลัมน์ เป็ นข้ อความอื่นโดยการใช้ ALIAS
ALIAS คือ การสร้ างชื่อจาลองขึ ้นมาใหม่ให้ คอลัมน์ในขณะที่แสดงผล
รูปแบบ >>
SELECT ชือ่ คอลัมน์ที1่ AS ชือ่ คอลัมน์ใหม่, ชือ่ คอลัมน์ที2่ ,....
FROM ชือ่ ตาราง;
หมายเหตุ จะเปลี่ยนชื่อคอลัมน์ในการแสดงผลเท่านัน้ โดยที่จะไม่ไปเปลี่ยนในโครงสร้ าง
ของตารางจริ ง
70
ตัวอย่ าง การใช้ 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 ;
เปลี่ยนชื่อคอลัมน์ Emp_ID เป็ น ID
ID
First_name
001
สมชาย
002
สมหญิง
003
สมใจ
71
Operators ในการคานวณ
Operator
+
-
ความหมาย
บวก
ลบ
*
/
คูณ
หาร
ยกกาลัง
^
72
การคานวณในคาสั่ง SQL และการใช้ ช่ ือแทน (Alias)
SELECT P_DESCRIPT, P_ONHAND, P_PRICE, P_ONHAND*P_PRICE
FROM PRODUCT
ORDER BY P_PRICE ASC;
P_DESCRIPT P_ONHAND
P_PRICE
P_ONHAND*P_PRICE
ตะไบ
46
41
1886
ค้ อน
23
90
2070
สว่านไร้ สาย
12
380
4560
สังเกตเมื่อมีการคานวณโดยใช้
P_ONHAND*P_PRICE ผลลัพธ์ ท่ ไี ด้ จะ
แสดงในคอลัมน์ P_ONHAND*P_PRICE
ซึ่งคอลัมน์ นีเ้ ป็ นคอลัมน์ ท่ ี phpMyAdmin
สร้ างขึน้ มาให้ เองโดยอัตโนมัติ
73
ตัวอย่ าง คานวณในคาสั่ง 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
74
ตัวอย่ าง คานวณในคาสั่ง 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;
75
ฟั งก์ ชันสาหรั บหาค่ าของกลุ่มข้ อมูล
ฟั งก์ ชัน
รู ปแบบ >>
หน้ าที่
AVG
ผลลัพธ์เป็ นค่าเฉลี่ยของข้ อมูลทังกลุ
้ ่ม
SUM
ผลลัพธ์เป็ นผลบวกของข้ อมูลทังกลุ
้ ม่
MIN
ผลลัพธ์เป็ นค่าน้ อยที่สดุ ของข้ อมูลทังกลุ
้ ม่
MAX
ผลลัพธ์เป็ นค่ามากที่สดุ ของข้ อมูลทังกลุ
้ ม่
COUNT
ผลลัพธ์เป็ นจานวนรายการของข้ อมูลทังกลุ
้ ม่
SELECT ฟั งก์ชนั (ชื่ อคอลัมน์ที่ต้องการแสดง or *)
FROM ชือ่ ตาราง ;
76
ตัวอย่ าง หาค่ าเฉลี่ยด้ วย AVG()
โจทย์ >> ต้ องการทราบค่าเฉลี่ยเงินเดือน(salary)พนักงาน(employee)ทุกคน
SQL
>>
SELECT AVG(salary)
FROM employee ;
ผลลัพธ์ >>
AVG(salary)
5642
77
ตัวอย่ าง หาค่ าเฉลี่ยด้ วย AVG()
โจทย์ >> ต้ องการทราบราคาสินค้ าเฉลี่ย(P_PRICE )
SQL
>> SELECT AVG(P_PRICE)
ผลลัพธ์ >>
AVG(P_PRICE)
40
FROM PRODUCT;
โจทย์ >> ต้ องการดูสินค้ า (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
78
ตัวอย่ าง หาผลรวมด้ วย SUM()
้
โจทย์ >> ต้ องการดูผลรวมของจานวนสินค้ า (AMOUNT)ที่อยู่ในคลังสินค้ าทังหมด
SQL >>
ผลลัพธ์ >>
SUM(AMOUNT)
SELECT SUM(AMOUNT)
69
FROM PRODUCT;
้
โจทย์ >> ต้ องการหามูลค่าสินค้ าที่มีอยู่ในร้ านทังหมด
หมายเหตุ มูลค่าสินค้ าแต่ละประเภท = จานวนสินค้ าแต่ละประเภท(P_ONHAND) * ราคาสินค้ าต่อหน่วย(P_PRICE)
SQL
>>
SELECT SUM(P_ONHAND * P_PRICE) AS TOTAL_VALUE
FROM PRODUCT;
P_DESCRIPT P_ONHAND
P_PRICE
ผลลัพธ์ >>
ตะไบ
46
41
TOTAL_VALUE
ค้ อน
23
90
3956
79
ตัวอย่ าง หาค่ าต่าสุด MIN()
โจทย์ >>ต้ องการหาราคาสินค้ า(P_PRICE)ที่ถกู ที่สดุ ในร้ าน
SQL >>
MIN(P_PRICE)
ผลลัพธ์ >>
SELECT MIN(P_PRICE)
41
FROM PRODUCT;
โจทย์ >> ต้ องการดูรายละเอียดของสินค้ าที่ถกู ที่สดุ ในร้ าน
SELECT *
SQL >>
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
80
ตัวอย่ าง หาค่ าสูงสุด 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
81
ตัวอย่ าง นับจานวนรายการ COUNT()
โจทย์ >> ต้ องการนับจานวนลูกค้ าของบริษัท
SQL
>>
SELECT COUNT(*)
FROM customer ;
ผลลัพธ์ >>
COUNT(*)
21
82
ตัวอย่ าง นับจานวนรายการ COUNT()
้
พร้ อมระบุจานวนรายการสินค้ าทังหมด
้
โจทย์ >> แสดงจานวนรายการสัง่ ซื ้อสินค้ าทังหมด
ที่มีการสัง่ ซื ้อ
SQL
>>
นับจานวนรายการสัง่ ซื ้อสินค้ าทังหมดพร้
้
อมทังเปลี
้ ่ยนหัวคอลัมน์เป็ น TOTAL
SELECT COUNT(*) AS TOTAL , COUNT(DISTINCT IDOrder) AS ORDER
FROM Order;
นับจานวนรายการสินค้ าทังหมดที
้
่มีการสัง่ ซื ้อโดยไม่นบั จานวน
รายการที่ไม่ซ ้ากันพร้ อมทังเปลี
้ ่ยนหัวคอลัมน์เป็ น ORDER
OrderDate
IDOrder
1-SEP-2012
R1
12-SEP-2012
R2
1-OCT-2012
R1
ผลลัพธ์ >>
TOTAL
ORDER
2
R1
1
R2
83
GROUP BY และ HAVING
GROUP BY เป็ นคาสัง่ ที่ใช้ สาหรับการแสดงผลในลักษณะจัดกลุม่
อาจใช้ ร่วมกับ HAVING ในการกาหนดเงื่อนไขของการแสดงผล
รู ปแบบ >>
SELECT ชือ่ คอลัมน์ทีต่ อ้ งการแสดง หรื อ *
FROM ชือ่ ตาราง
WHERE เงือ่ นไข
GROUP BY ชือ่ คอลัมน์ทีต่ อ้ งการจัดกลุ่ม
HAVING เงือ่ นไข
ORDER BY ชือ่ คอลัมน์ทีต่ อ้ งการเรี ยงลาดับ ASC หรือ DESC;
84
ตัวอย่ าง การใช้ GROUP BY
จัดกลุ่มโดยใช้ ช่ ือ(Name)
SELECT Name, SUM(Amount)
FROM Income
GROUP BY Name;
Income
ผลลัพธ์
Name
ANT
Amount
5500
BAT
ANT
4500
7100
Name
ANT
BAT
SUM(Amount)
12600
4500
85
ตัวอย่ าง การใช้ GROUP BY
โจทย์ >> ต้ องการทราบค่าเฉลี่ยของวงเงิน(credit_lim)ของลูกค้ า(customer )แต่ละกลุม่
โดยแบ่งกลุม่ ตามที่อยู่(address)
SQL
>>
SELECT address, AVG(credit_lim)
FROM customer
GROUP BY address;
จัดกลุ่มตามที่อยู่(address)
86
ตัวอย่ าง การใช้ GROUP BY และ HAVING
จัดกลุ่มโดยใช้ ช่ ือ(Name)
SELECT Name, SUM(Amount)
FROM Income
GROUP BY Name
HAVING NAME = “ANT”;
Income
Name
ANT
BAT
ANT
แสดงผลเฉพาะ
NAME เท่ ากับ ANT
ผลลัพธ์
Amount
5500
4500
7100
Name
ANT
SUM(Amount)
12600
87
ตัวอย่ าง การใช้ GROUP BY และ HAVING
โจทย์ >> ต้ องการทราบค่าเฉลี่ยของวงเงินของลูกค้ าแต่ละกลุม่ โดยแบ่งกลุม่ ตามที่อยู่(address)
ที่มีวงเงินเฉลี่ยตังแต่
้ 300,000 ขึ ้นไป
SQL
>>
address
SELECT address, AVG(credit_lim)
FROM customer
GROUP BY address
HAVING AVG(credit_lim)>=300000 ;
AVG(credit_lim)
Ayuthaya
800000
Bangkok
500000
Rayong
300000
มูลค่ าเฉลี่ยของวงเงิน
จัดกลุ่มตามที่อยู่(address)
มีวงเงินเฉลี่ยตัง้ แต่ 300,000 ขึน้ ไป
88
ตัวอย่ าง การใช้ GROUP BY และ WHERE
โจทย์ >> ต้ องการดูมลู ค่ารวมของสินค้ าที่แต่ละผู้ค้าส่ง(V_CODE) ส่งสินค้ าให้ กบั เรา
SQL
P_DESCRIPT
มูลค่ ารวมของสินค้ า
>>
SELECT V_CODE, SUM(P_PRICE * P_ONHAND)
FROM PRODUCT
ผู้ค้าส่ งต้ องส่ งสินค้ า
WHERE V_CODE <> NULL
คือ ไม่ มีค่าเท่ ากับ ค่ าว่ าง
GROUP BY V_CODE;
P_ONHAND
P_PRICE
V_CODE
ตะไบ
46
41
v001
ค้ อน
23
90
v001
สว่านไร้ สาย
12
380
v002
ตะปู
10
50
จัดกลุ่มตามผู้ค้าส่ ง (V_CODE)
ผลลัพธ์ >>
V_CODE
SUM(P_PRICE * P_ONHAND)
v001
3956
v002
4560
89
ตัวอย่ าง การใช้ GROUP BY และ WHERE
โจทย์ >> ต้ องการดูราคาเฉลี่ยของสินค้ าที่แต่ละผู้ค้าส่ง(V_CODE) ส่งสินค้ าให้ กบั เรา
SQL
P_DESCRIPT
>>
SELECT V_CODE, AVG(P_PRICE)
FROM PRODUCT
WHERE V_CODE <> NULL
GROUP BY V_CODE;
P_ONHAND
P_PRICE
V_CODE
ตะไบ
46
41
v001
ค้ อน
23
90
v001
สว่านไร้ สาย
12
380
v002
ตะปู
10
50
ราคาเฉลี่ยของสินค้ า
ผู้ค้าส่ งต้ องส่ งสินค้ า
คือ ไม่ มีค่าเท่ ากับ ค่ าว่ าง
จัดกลุ่มตามผู้ค้าส่ ง (V_CODE)
ผลลัพธ์ >>
V_CODE
AVG(P_PRICE)
v001
65.5
v002
380
90
ตัวอย่ าง การใช้ GROUP BY ,WHERE และ HAVING
โจทย์ >> ต้ องการดูราคาเฉลี่ยของสินค้ าที่แต่ละผู้ค้าส่ง ส่งสินค้ าให้ กบั เรา
โดยดูเฉพาะราคาเฉลี่ยที่ต่ากว่า 100
SQL
P_DESCRIPT
>>
ราคาเฉลี่ยของสินค้ า
SELECT V_CODE, AVG(P_PRICE)
FROM PRODUCT
WHERE V_CODE <> NULL
GROUP BY V_CODE
HAVING AVG(P_PRICE) < 100;
P_ONHAND
P_PRICE
V_CODE
ตะไบ
46
41
v001
ค้ อน
23
90
v001
สว่านไร้ สาย
12
380
v002
ตะปู
10
50
ผู้ค้าส่ งต้ องส่ งสินค้ า
คือ ไม่ มีค่าเท่ ากับ ค่ าว่ าง
จัดกลุ่มตามผู้ค้าส่ ง (V_CODE)
ดูเฉพาะราคาเฉลี่ยที่ต่ากว่ า 100
ผลลัพธ์ >>
V_CODE
AVG(P_PRICE)
v001
65.5
91
ตัวอย่ าง การใช้ GROUP BY ,WHERE และ HAVING
้
่แต่ละผู้ค้าส่งสินค้ า
โจทย์ >> ต้ องการดูข้อมูลค่าเฉลี่ยของสินค้ าและหาจานวนสินค้ าทังหมดที
ให้ กบั เรา โดยดูเฉพาะมูลค่าเฉลี่ยของราคาสินค้ าที่ต่ากว่า 100
SQL
P_DESCRIPT
หาจานวนสินค้ า
>>
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_ONHAND
P_PRICE
V_CODE
ตะไบ
10
41
v001
ค้ อน
20
90
v001
สว่านไร้ สาย
12
380
v002
ตะปู
10
50
ดูเฉพาะราคาเฉลี่ยที่ต่ากว่ า 100
ผลลัพธ์ >>
V_CODE
SUM(P_ONHAND)
AVG(P_PRICE)
v001
30
65.5
92
ตัวอย่ าง การใช้ 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
V_CODE AMOUNT_OF_PRODUCT PRICE_AVERAGE
GROUP BY V_CODE
v001
30
65.5
HAVING AVG(P_PRICE) < 100;
93
ตัวอย่ าง การใช้ GROUP BY และ WHERE
โจทย์ >> ต้ องการดูมลู ค่ารวมของสินค้ าที่แต่ละผู้ค้าส่ง(V_CODE) ส่งสินค้ าให้ กบั เรา
และให้ แสดงผลเรี ยงตามราคาจากมากไปหาน้ อย
SQL
P_DESCRIPT
>>
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_ONHAND
P_PRICE
V_CODE
ตะไบ
46
41
v001
V_CODE
TOTAL_PRICE
ค้ อน
23
90
v001
v002
4560
สว่านไร้ สาย
12
380
v002
v001
3956
ตะปู
10
50
94
การแสดงผลจากหลายตารางโดยการ 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 ตารางมาเป็ นเงื่อนไข
95
การแสดงผลจากหลายตารางโดยการ 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)
96
แบบฝึ กหัด
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
Subject_id
I004
S003
Name
การวิเคราะห์และออกแบบระบบ
โปรแกรมชันสู
้ ง
credit
3
2
3.จงเขียนสคริปต์คาสัง่ SQL เพื่อขอดูข้อมูลดังต่อไปนี ้
3.1 นักศึกษาที่มีงานอดิเรก(Hobby) คือ ‘อ่านหนังสือ’ โดยให้ แสดงรหัสนักศึกษา(St_Code)และชื่องานอดิเรก (Hobby)
จากตารางนักศึกษา(Student)
3.2 รหัสวิชา ‘I003’ ใช้ หนังสือเล่มใดสอนบ้ าง โดยให้ แสดงรหัสวิชา(Subject_id) และชื่อหนังสือ(BookName) จากตาราง
รายวิชา(Subject)
3.3 แสดงรายชื่อนักศึกษาที่ขึ ้นต้ นด้ วย ‘ม’ และเรี ยนอยู่ใน class ‘B’ โดยให้ แสดงชื่อนักศึกษา (St_Name) และ class
จากตารางนักศึกษา(Student)
3.4 ให้ แสดงรหัสนักศึกษา (St_Code)ที่มีงานอดิเรก (Hobby) คือ ฟั งเพลง และทาเว็บไซต์ จากตารางนักศึกษา(Student)
3.5 ให้ แสดงรหัสนักศึกษา (St_Code) ที่ได้ คะแนน(Point)ระหว่าง 70-80 ของวิชา(Subject_id) ‘I001’
จากตารางคะแนนสอบ(ExamPoint)