sql ebook codingthailand
DESCRIPTION
SQL eBookTRANSCRIPT
การจดการฐานขอมลเบองตนดวย กรณศกษา ฐานขอมล MySQL
CodingThailand.comProgramming Coach by โคชเอก
facebook.com/codingthailand
การจดการฐานขอมลเบองตนดวย SQL
.com
โคชเอก
facebook.com/codingthailand
SQL
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
สารบญ
หนา
ตอนท� 1 Data Definition Language 1
ความหมายของ Data Definition Language
การใชงานคาส�ง CREATE
การใชงานคาส�ง ALTER
การใชงานคาส�ง DROP
ตอนท� 2 Data Manipulation Language 11
ความหมายของ Data Manipulation Language
การใชงานคาส�ง INSERT
การใชงานคาส�ง UPDATE
การใชงานคาส�ง DELETE
ตอนท� 3 Data Retrieval Command 17
การใชงานคาส�ง SELECT เบ �องตน
การใชงานคาส�ง SELECT แบบมเง�อนไข
การใชงานตวดาเนนการรวมกบคาส�ง SELECT
ตอนท� 4 การเรยกดขอมลข �นสง 26
การเรยกดขอมลจากตารางมากกวา 1 ตาราง โดยการ Join
การใชงานคาส�ง SELECT แบบซอนหลายระดบ (Subqueries)
ตอนท� 5 การใช SQL Function 33
ฟงกชนเก�ยวกบการคานวณ และสรปคาของขอมล (Aggregate Function)
การจดกลมขอมลดวย GROUP BY
การกรองกลมขอมลท�มเง�อนไข ดวย HAVING
ตอนท� 6 Data Control Language 40
รจกกบสทธ (Privileges) ตางๆในการเขาถงขอมลของระบบจดการฐานขอมล
การใหสทธผใชคนอ�นเขาถงขอมลดวยคาส�ง GRANT
การยกเลกสทธผใชคนอ�นดวยคาส�ง REVOKE
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
เกร�นนา
สวสดครบ E-Book เลมน �ผมต �งใจทาเพ�อเปนของขวญปใหม 2558 ใหกบทกคนท�สนใจ
และตองการเรยนรและทบทวนคาส�ง SQL ซ�งเปนภาษาท�คอนขางจาเปนและสาคญในการเขยน
โปรแกรมตดตอกบฐานขอมลตางๆ
โดยสวนตวแลว ผมเช�อเสมอวา การใหอะไรทกอยางออกไปน �น ส�งหน�งท�ผมไดแนๆ คอ
การท�ผมไดพฒนาตวเอง ชวตคอการเรยนรตลอดเวลา ความรถอเปนทรพยสนอยางหน�งท�มคณคา
มาก ในป 2558 น � ถาใครยงไมไดวางเปาหมายในการพฒนาตวเองไว มาลองต �งเปาหมายและ
เรยนรและพฒนาตวเองไปพรอมกนครบ
ในปใหมน � กขอใหคณพระศรรตนตรย และส�งศกด�สทธ�ท �งหลาย ขอใหคมครองและขอให
ทกคนมความสขมากๆ ครบ
ดวยความปรารถนาด
โคชเอก
30/12/57
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
หากตองการลงมอปฏบตจรงและพมพไปดวย สามารถดวดโอไดท�
http://www.codingthailand.com/site/index.php?r=site/courses&id=10
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
1
ตอนท� 1
Data Definition Language
มาเรยนรกบภาษา SQL (Structure Query Language) ซ� งเปนภาษาในการจดการฐานขอมล
เชงสมพนธ และภาษา SQL น�กไดแบงออกเปนหลายประเภท เน�อหาตอนน�จะกลาวถงประเภทของ
ภาษา SQL ในการนยามโครงสรางของขอมล น�นกคอ Data Definition Language หรอเรยกส�นๆวา
DDL
เน�อหา
1. ความหมายของ Data Definition Language
2. การใชงานคาส�ง CREATE
3. การใชงานคาส�ง ALTER
4. การใชงานคาส�ง DROP
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
2
1.1 ความหมายของ Data Definition Language
Data Definition Language คอ ภาษาท�ใชนยามโครงสรางขอมล ประกอบไปดวยคาส�งใน
การสรางฐานขอมล การแกไขฐานขอมล การลบฐานขอมล การสรางตารางฐานขอมล การแกไข
ตารางฐานขอมล การลบตารางฐานขอมล โดยมคาส�ง ดงตอไปน�
คาส�ง CREATE ใชสาหรบสรางฐานขอมล และตารางฐานขอมล
คาส�ง ALTER ใชสาหรบแกไขโครงสรางของตารางฐานขอมล
คาส�ง DROP ใชสาหรบลบฐานขอมล และตารางฐานขอมล
กอนท�เราจะเรยนรคาส�งตางๆ จะขอยกตวอยางการออกแบบจานวน 5 ตาราง และจะใช
ตารางเหลาน� เปนตวอยางในการอธบายคาส�งตางๆของ SQL ตารางท�ง 5 ตารางมรายละเอยด ดงน�
ตารางท� 1 ช�อ Department เกบขอมลรายละเอยดของแผนกงานในบรษท
ช�อฟลด ชนดขอมล (ความยาว) ความหมาย
departmentID INT รหสแผนก กาหนดเปน PRIMARY KEY
Name VARCHAR(80) ช�อแผนก
ตารางท� 2 ช�อ Employee เกบขอมลรายละเอยดของพนกงานแตละคน
ช�อฟลด ชนดขอมล (ความยาว) ความหมาย
employeeID INT รหสพนกงาน กาหนดเปน PRIMARY KEY
Name VARCHAR(80) ช�อพนกงาน
Job VARCHAR(30) ตาแหนงงานของพนกงาน
Salary INT เงนเดอนของพนกงาน
deparmentID INT รหสแผนก กาหนดเปน FOREIGN KEY
เช�อมไปยงฟลด departmentID ของตาราง
Department
ตารางท� 3 ช�อ EmployeeSkills เกบขอมลความชานาญของพนกงาน
ช�อฟลด ชนดขอมล (ความยาว) ความหมาย
employeeID INT รหสพนกงาน กาหนดเปน PRIMARY KEY
Skill VARCHAR(15) ความชานาญของพนกงาน กาหนดเปน
PRIMARY KEY รวมกบฟลด employeeID
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
3
ตารางท� 4 ช�อ Client เกบขอมลรายละเอยดบรษทของลกคา
ช�อฟลด ชนดขอมล (ความยาว) ความหมาย
clientID INT รหสลกคา กาหนดเปน PRIMARY KEY
Name VARCHAR(40) ช�อบรษทของลกคา
Address VARCHAR(100) ท�อยบรษทของลกคา
contactPerson VARCHAR(80) ช�อของลกคาท�เปนตวแทนบรษท
contactNumber CHAR(12) หมายเลขโทรศพทของลกคาตวแทน
ตารางท� 5 ช�อ Assignment เกบขอมลรายละเอยดการตดตอ
ช�อฟลด ชนดขอมล (ความยาว) ความหมาย
clientID INT รหสลกคา กาหนดเปน PRIMARY KEY
EmployeeID INT รหสพนกงาน กาหนดเปน PRIMARY KEY รวม
Workdate DATE วนเดอนปท�ตดตอ กาหนดเปน PRIMARY KEY รวม
Hours FLOAT จานวนช�วโมงในการตดตอ
และในการสรางตารางฐานขอมลส�งท�จะตองเขาใจ คอ เร�องของชนดขอมล (Data Types)
ซ� งเปนการกาหนดคาชนดขอมลท�จะจดเกบลงในฟลดตางๆท�เราสรางข�น โดยชนดขอมลท�ใชบอยๆ
มดงตอไปน�
ชนดขอมล รายละเอยด
CHAR(size) เกบขอมลในรปแบบขอความโดยมความยาวคงท�เทากบขนาด (size) ในวงเลบ
เชน CHAR(10) เปนตน
VARCHAR(size) เกบขอมลในรปแบบขอความโดยมความยาวตามขนาด (size) ในวงเลบ เชน
VARCHAR(20) เปนตน
INT(size) เกบขอมลตวเลขจานวนเตม เชน INT(6) เปนตน
FLOAT(size,d) เกบขอมลตวเลขทศนยม โดย size คอขนาดจานวนหลกท�งหมด
d คอจานวนหลกทศนยม เชน FLOAT(10,2) เปนตน
DATE เกบขอมลวนท�
หมายเหต ชนดขอมล (Data Types) แตละประเภทน�น หากไมกาหนดขนาด (size) กได DBMS จะ
กาหนดคาปรยาย (Default) ให หากตองการศกษาชนดขอมล (Data Types) เพ�มเตมใหศกษาตาม
DBMS น�นๆ
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
4
1.2 การใชคาส�ง CREATE
คาส�ง CREATE เปนคาส�งท�ใชในการสรางฐานขอมลและตารางฐานขอมล
1.2.1 การใชคาส�ง CREATE DATABASE สาหรบสรางฐานขอมล
รปแบบคาส�ง CREATE DATABASE
CREATE DATABASE ช�อฐานขอมล;
ตวอยางท� 1 คาส�งสรางฐานขอมลช�อ emp_db
CREATE DATABASE emp_db;
1.2.2 การใชคาส�ง CREATE TABLE สาหรบสรางตารางฐานขอมล
รปแบบคาส�ง CREATE TABLE
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล,
ช�อฟลดท�2 ชนดขอมล,
ช�อฟลดท�3 ชนดขอมล,
...
)
1) การกาหนด Constraints เบ�องตนใหกบตาราง
1.1) การกาหนดฟลดใหเปน PRIMARY KEY
รปแบบคาส�ง
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล,
ช�อฟลดท�2 ชนดขอมล,
ช�อฟลดท�3 ชนดขอมล,
...
PRIMARY KEY (ช�อฟลดท�เปน PRIMARY KEY)
)
หากตารางท�เราออกแบบไวม PRIMARY KEY รวมหรอม PRIMARY KEY
หลายตว เราสามารถใชเคร�องหมายคอมมา (,) ค�นระหวางฟลดท�เปน PRIMARY KEY ได
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
5
รปแบบคาส�ง
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล,
ช�อฟลดท�2 ชนดขอมล,
ช�อฟลดท�3 ชนดขอมล,
...
PRIMARY KEY (ช�อฟลดท�1,ช�อฟลดท�2,ช�อฟลดท�3,…)
)
1.2) การกาหนดฟลดใหเปน FOREIGN KEY
รปแบบคาส�ง
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล,
ช�อฟลดท�2 ชนดขอมล,
ช�อฟลดท�3 ชนดขอมล,
...
FOREIGN KEY (ช�อฟลดท�ตองการใหเปน FOREIGN KEY) REFERENCES ช�อตารางท�
ตองการเช�อมความสมพนธ (ช�อฟลดของตารางท�ตองการเช�อมความสมพนธ)
)
หากเราตองการใหเม�อลบขอมลฟลดท�เปน PRIMARY KEY ของตารางท�ตองการเช�อม
ความสมพนธ แลวใหขอมลท�อยในฟลดท�เปน FOREIGN KEY น� ถกลบไปโดยอตโนมตดวย ก
สามารถเพ�มคาส�ง ON DELETE CASCADE ไดดงน�
รปแบบคาส�ง
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล,
ช�อฟลดท�2 ชนดขอมล,
ช�อฟลดท�3 ชนดขอมล,
FOREIGN KEY (ช�อฟลดท�ตองการใหเปน FOREIGN KEY) REFERENCES ช�อตารางท�ตองการ
เช�อมความสมพนธ (ช�อฟลดของตารางท�ตองการเช�อมความสมพนธ) ON DELETE CASCADE
)
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
6
และหากเราตองการใหเม�อแกไขขอมลฟลดท�เปน PRIMARY KEY ของตารางท�ตองการ
เช�อมความสมพนธ แลวใหขอมลท�อยในฟลดท�เปน FOREIGN KEY น� ถกแกไขไปโดยอตโนมต
ดวย กสามารถเพ�มคาส�ง ON UPDATE CASCADE ไดดงน�
รปแบบคาส�ง
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล,
ช�อฟลดท�2 ชนดขอมล,
ช�อฟลดท�3 ชนดขอมล,
...
FOREIGN KEY (ช�อฟลดท�ตองการใหเปน FOREIGN KEY) REFERENCES ช�อตารางท�ตองการ
เช�อมความสมพนธ (ช�อฟลดของตารางท�ตองการเช�อมความสมพนธ) ON UPDATE CASCADE
)
หรอหากตองการเขยนคาส�งท�ง ON DELETE CASCADE และ ON UPDATE CASCADE
พรอมกนในบรรทดเดยวกนกได ดงน�
รปแบบคาส�ง
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล,
ช�อฟลดท�2 ชนดขอมล,
ช�อฟลดท�3 ชนดขอมล,
...
FOREIGN KEY (ช�อฟลดท�ตองการใหเปน FOREIGN KEY) REFERENCES ช�อตารางท�ตองการ
เช�อมความสมพนธ (ช�อฟลดของตารางท�ตองการเช�อมความสมพนธ) ON DELETE CASCADE
ON UPDATE CASCADE
)
1.3) NOT NULL
การใช NOT NULL น�นใชในกรณท�เราไมตองการใหคาของฟลดท�เราสราง
ข�นเปนคาวาง (Null)
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
7
รปแบบคาส�ง
CREATE TABLE ช�อตาราง
(
ช�อฟลดท�1 ชนดขอมล NOT NULL,
ช�อฟลดท�2 ชนดขอมล NOT NULL,
ช�อฟลดท�3 ชนดขอมล NOT NULL,
...
)
ตวอยางท� 2 คาส�งสรางตารางช�อ Department
CREATE TABLE Department
(
departmentID INT,
name VARCHAR(30) NOT NULL,
PRIMARY KEY (departmentID)
)
ตวอยางท� 3 คาส�งสรางตารางช�อ Employee
CREATE TABLE Employee
(
employeeID INT,
name VARCHAR(80),
job VARCHAR(30),
salary INT,
departmentID INT,
PRIMARY KEY (employeeID),
FOREIGN KEY (departmentID) REFERENCES Department (departmentID)
)
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
8
ตวอยางท� 4 คาส�งสรางตารางช�อ EmployeeSkills
CREATE TABLE EmployeeSkills
(
employeeID INT,
skill VARCHAR(15),
PRIMARY KEY (employeeID,skill)
)
ตวอยางท� 5 คาส�งสรางตารางช�อ Client
CREATE TABLE Client
(
clientID INT,
name VARCHAR(40),
address VARCHAR(100),
contactperson VARCHAR(80),
contactnumber CHAR(12),
PRIMARY KEY (clientID)
)
ตวอยางท� 6 คาส�งสรางตารางช�อ Assignment
CREATE TABLE Assignment
(
clientID INT,
employeeID INT,
workdate DATE,
hours FLOAT,
PRIMARY KEY (clientID, employeeID, workdate)
)
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
9
1.3 การใชคาส�ง ALTER
1.3.1 คาส�ง ALTER TABLE เปนคาส�งเพ�อแกไขโครงสรางของตาราง
1) คาส�ง ALTER TABLE เพ�อเพ�มฟลดใหกบตาราง
รปแบบคาส�ง
ALTER TABLE ช�อตาราง
ADD ช�อฟลด ชนดขอมล
ตวอยางท� 5 คาส�งแกไขโครงสรางตาราง Department โดยเพ�มฟลดช�อ datestart ชนดขอมลเปน
DATE
ALTER TABLE Department
ADD datestart DATE
2) คาส�ง ALTER TABLE เพ�อลบฟลดในตาราง
รปแบบคาส�ง
ALTER TABLE ช�อตาราง
DROP COLUMN ช�อฟลด
ตวอยางท� 6 ลบฟลดช�อ datestart ของตาราง Department
ALTER TABLE Department
DROP COLUMN datestart
3) คาส�ง ALTER TABLE เพ�อเพ�ม PRIMARY KEY ใหกบฟลดในตาราง
เหมาะสาหรบกรณท�เราลมสราง PRIMARY KEY ใหฟลดใดฟลดหน�งในตาราง
รปแบบคาส�ง
ALTER TABLE ช�อตาราง
ADD PRIMARY KEY(ช�อฟลด)
ตวอยางท� 7 เพ�ม PRIMARY KEY ใหกบฟลดช�อ departmentID ของตารางช�อ Department
ALTER TABLE Department
ADD PRIMARY KEY(departmentID)
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
10
4) คาส�ง ALTER TABLE เพ�อเพ�ม FOREIGN KEY ใหกบฟลดในตาราง
เหมาะสาหรบกรณท�เราลมสราง FOREIGN KEY ใหฟลดใดฟลดหน�งในตาราง
รปแบบคาส�ง
ALTER TABLE ช�อตาราง
ADD FOREIGN KEY (ช�อฟลด FOREIGN KEY) REFERENCES ช�อตารางท�เช�อมความสมพนธ
(ฟลดตารางท�เช�อมความสมพนธ)
ตวอยางท� 8 เพ�ม FOREIGN KEY ใหกบฟลดช�อ departmentID ของตาราง Employee โดยเช�อม
ความสมพนธไปยงฟลด departmentID ของตาราง Department
ALTER TABLE Employee
ADD FOREIGN KEY (departmentID) REFERENCES Department (departmentID)
1.4 การใชคาส�ง DROP เปนคาส�งสาหรบการจดการลบฐานขอมล และตารางฐานขอมล
1.4.1 คาส�ง DROP DATABASE ใชสาหรบลบฐานขอมล
รปแบบคาส�ง
DROP DATABASE ช�อฐานขอมล
ตวอยางท� 9 ลบฐานขอมลช�อ emp_db
DROP DATABASE emp_db
1.4.2 คาส�ง DROP TABLE ใชสาหรบลบตาราง
รปแบบคาส�ง
DROP TABLE ช�อตาราง
ตวอยางท� 10 ลบตารางช�อ Department
DROP TABLE Department
สรป
Data Definition Language คอ ภาษาท�ใชนยามโครงสรางขอมล ประกอบไปดวย
คาส�ง CREATE ใชสาหรบสรางฐานขอมล และตารางฐานขอมล คาส�ง ALTER ใชสาหรบแกไข
โครงสรางของตารางฐานขอมล และคาส�ง DROP ใชสาหรบลบฐานขอมล และตารางฐานขอมล
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
11
ตอนท� 2
Data Manipulation Language
เม�อเราไดเรยนรคาส�งประเภท Data Definition Language จะเหนวาเราสามารถท�จะสราง
ฐานขอมล และสรางตารางไดแลว แตตารางท�เราสรางข�นเปนเพยงโครงสรางหรอตารางเปลาๆ
เทาน�น ยงไมไดมขอมลอยภายในตาราง เพราะฉะน�นในตอนน� เราจะตองเรยนรเก�ยวกบภาษา SQL
อกประเภทหน�งคอ Data Manipulation Language หรอ DML ซ� งประกอบไปดวยคาส�ง SELECT,
INSERT, UPDATE และ DELETE เน�องจากคาส�ง SELECT มรายละเอยดคอนขางมากจงขอยกไป
เขยนในตอนถดไป
เน�อหา
1. ความหมายของ Data Manipulation Language
2. การใชงานคาส�ง INSERT
3. การใชงานคาส�ง UPDATE
4. การใชงานคาส�ง DELETE
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
12
2.1 ความหมายของ Data Manipulation Language
Data Manipulation Language คอ ภาษาท�ใชในการจดการขอมลภายในตารางประกอบดวย
คาส�งในการเรยกดขอมล การเพ�มขอมล การแกไขขอมล และการลบขอมล โดยในบทน� เราจะเรยนร
กน 3 คาส�ง ดงตอไปน�
คาส�ง INSERT เปนคาส�งสาหรบเพ�มขอมลเขาไปในตาราง
คาส�ง UPDATE เปนคาส�งสาหรบแกไขคาขอมลท�อยในตาราง
คาส�ง DELETE เปนคาส�งสาหรบลบขอมลท�อยในตาราง
2.2 การใชคาส�ง INSERT
คาส�ง INSERT เปนคาส�งสาหรบเพ�มขอมลเขาไปในตาราง
2.2.1 คาส�ง INSERT แบบท� 1 ไมตองระบช�อฟลดในตารางเพ�มเฉพาะคาขอมลเขาไปโดย
เรยงจากลาดบฟลดจากซายไปขวา
รปแบบคาส�ง INSERT แบบท� 1
INSERT INTO ช�อตาราง
VALUES (คาขอมลท�1, คาขอมลท�2, คาขอมลท�3,..)
ตวอยางท� 1 คาส�ง INSERT เพ�มขอมล 1 แถว (record) เขาไปในตาราง Department
INSERT INTO Department
VALUES (1,’Finance’)
2.2.2 คาส�ง INSERT แบบท� 2 ระบช�อฟลดท�ตองการและคาขอมลท�ตองการเพ�มเขาไป
รปแบบคาส�ง INSERT แบบท� 2
INSERT INTO ช�อตาราง (ช�อฟลด1, ช�อฟลด2, ช�อฟลด3,…)
VALUES (คาขอมลท�1, คาขอมลท�2, คาขอมลท�3,…)
ตวอยางท� 2 คาส�ง INSERT เพ�มขอมล 1 แถว (record) เขาไปในตาราง Department โดยระบช�อ
ฟลด
INSERT INTO Department (departmentID,name)
VALUES (1,’Finance’)
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
13
ตวอยางท� 3 คาส�ง INSERT เพ�มขอมลเขาไปยงตาราง Employee
INSERT INTO Employee (employeeID,name,job,salary,departmentID)
VALUES (1111,’Somchai’,’Programmer’,15000,1)
จากตวอยางท� 3 คาขอมลของฟลด departmentID ของตาราง Employee จะตองเปนคาท�ม
อยในฟลด departmentID ของตาราง Department (ในตวอยางน� คอคา 1) เพราะ departmentID ของ
ตาราง Employee เปน FOREIGN KEY น�นเอง
ตวอยางท� 4 คาส�ง INSERT เพ�มขอมลเขาไปยงตาราง EmployeeSkills
INSERT INTO EmployeeSkills (employeeID,skill)
VALUES (1111,’PHP’)
ตวอยางท� 5 คาส�ง INSERT เพ�มขอมลเขาไปยงตาราง Client
INSERT INTO Client (clientID,name,address,contactperson,contactnumber)
VALUES (1,’ABC Company Limited’,’1 Silom Rd.’,’Vera’,’02-9555123’)
ตวอยางท� 6 คาส�ง INSERT เพ�มขอมลเขาไปยงตาราง Assignment
INSERT INTO Assignment (clientID,employeeID,workdate,hours)
VALUES (1,1111,’2010-04-27’,8.5)
2.3 การใชคาส�ง UPDATE
คาส�ง UPDATE เปนคาส�งสาหรบแกไขคาขอมลท�อยในตาราง
รปแบบคาส�ง
UPDATE ช�อตาราง
SET ช�อฟลดท�1=คาขอมลท�1, ช�อฟลดท�2=คาขอมลท�2,...
WHERE เง�อนไข
ตวอยางท� 7 คาส�ง UPDATE ตาราง Department เพ�อแกไขคาขอมลของฟลดท�ช�อ name โดยแกไข
คาขอมลเปน Marketing และมเง�อนไข (WHERE) วาแกไขเฉพาะฟลด departmentID เทากบคา 1
UPDATE Department
SET name = ‘Marketing’
WHERE departmentID = 1
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
14
ตวอยางท� 8 คาส�ง UPDATE ตาราง Employee เพ�อแกไขคาขอมลของฟลดช�อ salary โดยแกไขคา
ขอมลเปน 24000 และมเง�อนไข (WHERE) วาแกไขฟลด job ท�มคาเทากบ Programmer
UPDATE Employee
SET salary = 24000
WHERE job = ‘Programmer’
ตวอยางท� 9 คาส�ง UPDATE ตาราง Client กรณท�ตองการ UPDATE ทละหลายๆฟลดพรอมกนโดย
ค�นดวยเคร�องหมายคอมมา (,)
UPDATE Client
SET contactperson = ‘Sunee’,contactnumber = ’02-123456’
WHERE clientID = 1
จะสงเกตวาเง�อนไขท�นามาใชน�นจะเปรยบเทยบโดยใชเคร�องหมายเทากบ เพ�อระบวา
ตองการแกไขคาขอมลในแถวใดบาง เคร�องหมายเทากบน� เราเรยกวาตวดาเนนการ (Operators)
ตวดาเนนการ(Operators) มอยหลายประเภท ขอยกตวอยางตวดาเนนประเภทเปรยบเทยบ
(Comparison Operators) ดงน�
ตวดาเนนการ ความหมาย
= เทากบ
< นอยกวา
<= นอยกวาหรอเทากบ
> มากกวา
>= มากกวาหรอเทากบ
<> ไมเทากบ
ตวอยางท� 10 คาส�ง UPDATE แกไขขอมลเงนเดอนของพนกงานท�มเงนเดอนนอยกวา 10000 เปน
15000 ทกคน
UPDATE Employee
SET salary = 15000
WHERE salary < 10000
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
15
ขอควรระวงในการใชคาส�ง UPDATE คอ เม�อเราใชคาส�ง UPDATE จะตองใสเง�อนไข
(WHERE) ดวยทกคร� ง เพ�อเปนการระบวาเราจะ UPDATE แถว (record) ใดบาง เพราะหากไมใส
เง�อนไข (WHERE) อาจทาใหคาขอมลของทกแถว (record) ในตาราง ไดรบการแกไขคาขอมล
ท�งหมด ยกตวอยางเชน
UPDATE Employee
SET salary = 24000
หากเราไมใสเง�อนไข (WHERE) จะทาใหพนกงานทกคนมเงนเดอน 24000 เทากนหมด
2.4 การใชคาส�ง DELETE
คาส�ง DELETE เปนคาส�งสาหรบลบขอมลท�อยในตาราง
รปแบบคาส�ง
DELETE FROM ช�อตาราง
WHERE เง�อนไข
ตวอยางท� 11 คาส�ง DELETE เพ�อลบขอมลพนกงานโดยมเง�อนไขวาลบเฉพาะรหสพนกงานเทากบ
1111
DELETE FROM Employee
WHERE employeeID = 1111
ตวอยางท� 12 คาส�ง DELETE เพ�อลบขอมลพนกงานโดยมเง�อนไขวาลบเฉพาะพนกงานท�มอาชพ
Programmer
DELETE FROM Employee
WHERE job = ‘Programmer’
นอกจากคาส�ง DELETE สาหรบลบขอมลในตารางแบบมเง�อนไขแลว เรายงสามารถลบ
ขอมลท�งหมดในตารางได ดงน�
รปแบบคาส�ง
DELETE FROM ช�อตาราง
ตวอยางท� 13 คาส�ง DELETE เพ�อลบขอมลท�งหมดของตาราง Assignment
DELETE FROM Assignment
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
16
สรป
Data Manipulation Language คอ ภาษาท�ใชในการจดการขอมลภายในตารางประกอบดวย
คาส�งในการเรยกดขอมล การเพ�มขอมล การแกไขขอมล และการลบขอมล คาส�ง INSERT เปน
คาส�งสาหรบเพ�มขอมลเขาไปในตาราง คาส�ง UPDATE เปนคาส�งสาหรบแกไขคาขอมลท�อยใน
ตาราง คาส�ง DELETE เปนคาส�งสาหรบลบขอมลท�อยในตาราง
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
17
ตอนท� 3
Data Retrieval Command
Data Retrieval Command เปนประเภทคาส�งท�ใชในการเรยกดขอมลโดยอยภายใตกลมของ
Data Manipulation Language หรอ DML คาส�งท�อยในประเภท Data Retrieval Command น�นกคอ
คาส�ง SELECT ซ� งมหนาท�ในการแสดงหรอเรยกด (Query) ขอมลจากตารางฐานขอมลในตอนน� เรา
จะมาเรยนรคาส�ง SELECT ในเบ�องตนกอน และเรยนรการใชงานตวดาเนนการ (Operators)
เพ�มเตมเพ�อใหการใชงานคาส�ง SELECT มประสทธภาพและเกดประโยชนมากท�สด
เน�อหา
1. การใชงานคาส�ง SELECT เบ�องตน
2. การใชงานคาส�ง SELECT แบบมเง�อนไข
3. การใชงานตวดาเนนการรวมกบคาส�ง SELECT
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
18
3.1 การใชงานคาส�ง SELECT เบ�องตน
กอนใชงานคาส�ง SELECT ขอยกตวอยางตาราง 5 ตารางท�เราไดออกแบบไวในบทท� 5
โดยใหเพ�มขอมลเขาไปในแตละตาราง ดงน�
ตาราง Department (แผนก):
departmentID Name
42 Finance
128 Research and Development
130 Marketing
ตาราง Employee (พนกงาน):
employeeID Name Job Salary departmentID
1111 Somchai Programmer 15000 128
2222 Wichit DBA 13500 42
3333 Somjai Programmer 16500 128
4444 Yongyut Programmer 20000 130
ตาราง EmployeeSkills: (ความชานาญดานคอมพวเตอรของพนกงาน)
employeeID skill
1111 JAVA
1111 PHP
2222 Linux
3333 JSP
4444 VB
4444 MySQL
ตาราง Client: (บรษทของลกคา)
clientID Name Address contactPerson contactNumber
1 ABC Company Limited 1 Silom Rd. Vera 02-1234567
2 Imperial Industry 100 Samutprakarn Mongkol 02-3456789
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
19
ตาราง Assignment: (รายละเอยดการตดตอ)
clientID employeeID Workdate hours
1 1111 2010-04-10 8.5
2 2222 2010-04-20 7
1 1111 2010-04-25 5
การท�เราจะนาขอมลจากตารางมาใชประโยชน ไมวาจะเปนการนามาทารายงาน วเคราะห
ขอมลตางๆ จะตองอาศยการเรยนรการใชงานคาส�ง SELECT ดงน�
รปแบบคาส�ง
SELECT ช�อฟลดท�1, ช�อฟลดท�2, ช�อฟลดท�3,…
FROM ช�อตาราง
ตวอยางท� 1 ใชคาส�ง SELECT เรยกดขอมลท�งหมดจากตาราง Department
SELECT departmentID,Name
FROM Department
ผลลพธตวอยางท� 1
departmentID Name
42 Finance
128 Research and Development
130 Marketing
เราสามารถใชเคร�องหมายดอกจน (*) แทนช�อฟลดท�งหมดได ดงน�
ตวอยางท� 2 เรยกดขอมลท�งหมดจากตาราง Department โดยใชเคร�องหมายดอกจน แทนช�อฟลด
ท�งหมด
SELECT *
FROM Department
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
20
ผลลพธตวอยางท� 2
departmentID Name
42 Finance
128 Research and Development
130 Marketing
หากเราตองการเรยกดขอมลเฉพาะบางฟลดสามารถเขยนคาส�งได ดงน�
ตวอยางท� 3 เรยกดขอมลเฉพาะฟลด employeeID ฟลด Name ฟลด Salary จากตาราง Employee
SELECT employeeID,Name,Salary
FROM Employee
ผลลพธตวอยางท� 3
employeeID Name Salary
1111 Somchai 15000
2222 Wichit 13500
3333 Somjai 16500
4444 Yongyut 20000
3.2 การใชงานคาส�ง SELECT แบบมเง�อนไข
การใชงานคาส�ง SELECT แบบมเง�อนไข ทาใหเราสามารถระบเง�อนไขเพ�อกรองขอมล
เฉพาะบางแถวท�เราตองการ ทาใหการ SELECT ขอมลมความยดหยนและไดขอมลท�ตรงกบความ
ตองการ
รปแบบคาส�ง
SELECT ช�อฟลดท�1, ช�อฟลดท�2, ช�อฟลดท�3,…
FROM ช�อตาราง
WHERE เง�อนไข
ตวอยางท� 4 คาส�ง SELECT แสดงขอมลท�งหมด โดยมเง�อนไขวาตองการเฉพาะพนกงานท�มอาชพ
Programmer เทาน�น
SELECT *
FROM Employee
WHERE job=’Programmer’
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
21
ผลลพธตวอยางท� 4
employeeID Name Job Salary departmentID
1111 Somchai Programmer 15000 128
3333 Somjai Programmer 16500 128
4444 Yongyut Programmer 20000 130
ตวอยางท� 5 แสดงขอมล ช�อ และเงนเดอนพนกงาน โดยมเง�อนไขวาตองการพนกงานท�เงนเดอน
มากกวา 16000 ข�นไป
SELECT Name,Salary
FROM Employee
WHERE Salary > 16000
ผลลพธตวอยางท� 5
Name Salary
Somjai 16500
Yongyut 20000
ตวอยางท� 6 แสดงขอมลช�อลกคาท�เปนตวแทนบรษท (contactPerson) และเบอรโทรศพทตดตอ
(contactNumber) ท�มช�อวา Mongkol
SELECT contactPerson,contactNumber
FROM Client
WHERE contactPerson = ‘Mongkol’
ผลลพธตวอยางท� 6
contactPerson contactNumber
Mongkol 02-3456789
3.3 การใชงานตวดาเนนการรวมกบคาส�ง SELECT
ตวดาเนนการ (Operators) มหลายประเภทเราสามารถใชตวดาเนนการประเภทตางๆ
รวมกบคาส�ง SELECT เพ�อเพ�มความสามารถใหกบคาส�ง SELECT และยงสามารถทาใหเราเรยกด
ขอมลท�มความซบซอนมากข�นดวย ตวดาเนนการบางประเภทเราไดเรยนรไปแลว เชน เคร�องหมาย
เทากบ (=), เคร�องหมายมากกวา (>), เคร�องหมายนอยกวา (<) เปนตน ในหวขอน� เราจะมาเรยนรตว
ดาเนนการเพ�มเตม ดงน�
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
22
ตวดาเนนการ ความหมาย
AND ผลลพธจากการ AND จะไดขอมลกตอเม�อเง�อนไขเปนจรงท�งหมด
OR ผลลพธจากการ OR จะไดขอมลกตอเม�อเง�อนไขใดเง�อนไขหน�งเปน
จรง
NOT ผลลพธจากการ NOT จะไดขอมลท�อยในรปปฏเสธ
LIKE เปรยบเทยบขอมลวาตรงกบรปแบบท�กาหนดไวหรอไม
BETWEEN ใชหาขอมลท�มลกษณะเปนชวง
3.3.1 การใชงานตวดาเนนการ AND
ตวอยางท� 7 แสดงช�อ เงนเดอนของพนกงานท�มตาแหนง Programmer และเงนเดอนนอยกวา 16000
SELECT name,salary
FROM Employee
WHERE job = ‘Programmer’ AND salary < 16000
ผลลพธตวอยางท� 7
employeeID Name Job Salary departmentID
1111 Somchai Programmer 15000 128
3.3.2 การใชงานตวดาเนนการ OR
ตวอยางท� 8 แสดงรหส และทกษะ (skill) ของพนกงานท�ถนด JAVA หรอ PHP
SELECT *
FROM EmployeeSkills
WHERE skill = ‘JAVA’ OR skill = ‘MySQL’
ผลลพธตวอยางท� 8
employeeID skill
1111 JAVA
4444 MySQL
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
23
3.3.3 การใชงานตวดาเนนการ NOT
ตวอยางท� 9 แสดงรหส ช�อ เงนเดอน ของพนกงานท�ไมไดมเงนเดอนเทากบ 20000
SELECT employeeID,Name,Salary
FROM Employee
WHERE NOT Salary = 20000
ผลลพธตวอยางท� 9
employeeID Name Job
1111 Somchai Programmer
2222 Wichit DBA
3333 Somjai Programmer
3.3.4 การใชงานตวดาเนนการ LIKE
ตวอยางท� 10 แสดงช�อพนกงานท�มช�อข�นตนดวยตวอกษร S
SELECT name
FROM employee
WHERE name LIKE ‘S%’
ผลลพธตวอยางท� 10
Name
Somchai
Somjai
การใชเคร�องหมาย % (percent sign) หมายถง จะเปนตวอกษรหรอตวเลขใดๆก�ตวกได จาก
ตวอยางท� 10 หมายถง หลงตว S จะเปนตวอกษรหรอตวเลขใดๆ ก�ตวกได
ตวอยางท� 11 แสดงช�อพนกงาน ท�มตวอกษร i อยในช�อดวย
SELECT name
FROM employee
WHERE name LIKE ‘%i%’
ผลลพธตวอยางท� 11
Name
Somchai
Wichit
Somjai
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
24
และหากเราใชเคร�องหมาย _ (underscore) หมายถง จะแทนตวอกษรหรอตวเลขใดๆกได 1
ตวเทาน�น
ตวอยางท� 12 แสดงความชานาญ (skill) ของพนกงาน ท�มตวอกษรข�นตนดวยตวอกษรใดกได 1
ตวอกษร และลงทายดวย SP
SELECT skill
FROM Employeeskills
WHERE skill LIKE ‘_SP’
ผลลพธตวอยางท� 12
Name
JSP
3.3.5 การใชงานตวดาเนนการ BETWEEN
ตวดาเนนการ BETWEEN ใชเม�อตองการขอมลลกษณะเปนชวง และตวดาเนนการน�มกจะ
ใชรวมกบตวดาเนนการ AND เสมอ
ตวอยางท� 13 แสดงรายช�อ เงนเดอน ของพนกงานท�มเงนเดอนระหวาง 15000 ถง 20000
SELECT name,salary
FROM employee
WHERE salary BETWEEN 15000 AND 20000
ผลลพธตวอยางท� 13
Name Salary
Somchai 15000
Somjai 16500
Yongyut 20000
ตวอยางท� 14 แสดงจานวนช�วโมงท�ตดตอ (hours) และวนท�ตดตอ (workdate) ของรายละเอยดการ
ตดตอลกคาท�มวนท�ตดตอ (workdate) ระหวางวนท� 20 เม.ย. 53 ถงวนท� 25 เม.ย. 53
SELECT hours,workdate
FROM Assignment
WHERE workdate BETWEEN ‘2010-04-20’ AND ‘2010-04-25’
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
25
ผลลพธตวอยางท� 14
hours Workdate
7 2010-04-20
5 2010-04-25
หมายเหต รปแบบวนท�ท�ใชในคาส�ง BETWEEN อาจเปล�ยนแปลงไดตามแตละ DBMS น�นๆในท�น�
เราอางองจาก MySQL
ในการเรยกดขอมลน�นบางคร� งหากเราตองการท�จะเรยงลาดบขอมลท�เปนตวอกษรหรอ
ตวเลข เราสามารถใชคาส�ง ORDER BY เพ�อเรยงลาดบขอมลได โดยแบงเปน 2 ลกษณะดงน�
1. ORDER BY ASC เปนการเรยงลาดบขอมลจากนอยไปมาก
2. ORDER BY DESC เปนการเรยงลาดบขอมลจากมากไปนอย
ตวอยางท� 15 แสดงช�อบรษท และเบอรโทรตดตอตวแทนลกคา โดยเรยงลาดบช�อบรษทจากมากไป
นอย
SELECT *
FROM client
ORDER BY name DESC
ผลลพธตวอยางท� 15
Name contactNumber
Imperial Industry 02-3456789
ABC Company Limited 02-1234567
หมายเหต หากตองการเรยงลาดบจากนอยไปมากใหเปล�ยนจาก DESC เปน ASC แตโดยปกตเรา
อาจไมจาเปนตองใชคาส�ง ORDER BY ASC กไดเพราะเม�อเรารนคาส�ง ขอมลกจะเรยงจากนอยไป
มากโดยอตโนมตอยแลว
สรปทายบท
คาส�ง SELECT เปนคาส�งในการแสดงหรอเรยกด (Query) ขอมลจากตารางฐานขอมล โดย
เราสามารถใสเง�อนไขเพ�อเปนการกรองขอมล วาเราตองการขอมลฟลดใด แถวใดบาง ทาใหเราได
ขอมลตรงความตองการ นอกจากน�นยงมตวดาเนนการตางๆ ท�เพ�มเขามา ทาใหสามารถเรยกด
ขอมลท�ซบซอน และมประสทธภาพมากข�นดวย
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
26
ตอนท� 4
การเรยกดขอมลข�นสง
คาส�ง SELECT ท�เราไดเรยนรในตอนท�แลว ทาใหเราสามารถแสดงหรอเรยกดขอมลจาก
ตารางฐานขอมลไดในเบ�องตน ในบทน� เราจะเรยนรการเรยกดขอมลข�นสงไมวาจะเปนการเรยกด
ขอมลท�มากกวา 1 ตาราง (Joins) การเรยกดขอมลดวยคาส�ง SELECT แบบซอนหลายระดบ
(Subqueries) เพ�อใหไดขอมลท�มความซบซอน และตรงกบความตองการมากข�น
เน�อหาสาระ
1. การเรยกดขอมลจากตารางมากกวา 1 ตาราง โดยการ Join
2. การใชงานคาส�ง SELECT แบบซอนหลายระดบ (Subqueries)
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
27
4.1 การเรยกดขอมลจากตารางมากกวา 1 ตาราง โดยการ Join
การท�เราออกแบบตารางในการจดเกบขอมล ขอมลท�เก�ยวของหรอมความสมพนธกนอาจ
อยกนคนละตารางได เราจงตองเรยนรการเรยกดขอมลจากตารางท�มความสมพนธกนมากกวา 1
ตาราง
การเรยกดขอมลมากกวา 1 ตาราง หมายถงการเรยกดขอมลจากตารางหลายๆ ตารางผาน
ฟลดท�มความสมพนธกน นยมเรยกอกอยางหน�งวา การ Join ตาราง น�นเอง
ขอยกตวอยางตารางท�เราจะใชเปนตวอยางในการเรยกดขอมลในบทน� ดงน�
ตาราง Department (แผนก):
departmentID Name
42 Finance
128 Research and Development
130 Marketing
ตาราง Employee (พนกงาน):
employeeID Name Job Salary departmentID
1111 Somchai Programmer 15000 128
2222 Wichit DBA 13500 42
3333 Somjai Programmer 16500 128
4444 Yongyut Programmer 20000 Null
ตาราง EmployeeSkills: (ความชานาญดานคอมพวเตอรของพนกงาน)
employeeID skill
1111 JAVA
1111 PHP
2222 Linux
3333 JSP
4444 VB
4444 MySQL
ตาราง Client: (บรษทของลกคา)
clientID Name Address contactPerson contactNumber
1 ABC Company Limited 1 Silom Rd. Vera 02-1234567
2 Imperial Industry 100 Samutprakarn Mongkol 02-3456789
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
28
ตาราง Assignment: (รายละเอยดการตดตอ)
clientID employeeID Workdate hours
1 1111 2010-04-10 8.5
2 2222 2010-04-20 7
1 1111 2010-04-25 5
การ Join ตารางมอยหลายรปแบบ ดงน�
1. INNER JOIN
รปแบบคาส�ง
SELECT ช�อตารางท�ตองการ.ช�อฟลดของตารางท�ตองการ , …
FROM ช�อตารางท�1
INNER JOIN ช�อตารางท�2
ON ช�อตารางท�1.ช�อฟลดตารางท�1=ช�อตารางท�2.ช�อฟลดตารางท�2
หมายเหต ช�อฟลดตารางท�1 และ ช�อฟลดตารางท� 2 เปนฟลดท�มความสมพนธกน
ตวอยางท� 1 แสดงช�อพนกงาน และช�อแผนก ของพนกงานทกคน
SELECT employee.Name,department.Name
FROM Employee
INNER JOIN Department
ON Employee.departmentID = Department.departmentID
ผลลพธตวอยางท� 1
Name Name
Somchai Research and Development
Wichit Finance
Somjai Research and Development
การใช INNER JOIN จะแสดงเฉพาะแถวขอมลท�ตรงกนเทาน�น เชน ในตวอยางท�
1 จะแสดงเฉพาะแถวขอมลของฟลด departmentID จากตาราง Employee ท�ตรงกนกบ
แถวขอมลของฟลด departmentID จากตาราง Department เทาน�น
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
29
ภาพท� 4.1 แสดงผลลพธท�เกดจากทางานของ INNER JOIN
2. LEFT JOIN
รปแบบคาส�ง
SELECT ช�อตารางท�ตองการ.ช�อฟลดของตารางท�ตองการ , …
FROM ช�อตารางท�1
LEFT JOIN ช�อตารางท�2
ON ช�อตารางท�1.ช�อฟลดตารางท�1=ช�อตารางท�2.ช�อฟลดตารางท�2
หมายเหต ช�อฟลดตารางท�1 และ ช�อฟลดตารางท� 2 เปนฟลดท�มความสมพนธกน
ตวอยางท� 2 แสดงช�อพนกงาน และช�อแผนก ของพนกงานทกคนรวมท�งพนกงานท�ไมได
สงกดแผนกดวย
SELECT employee.Name,department.Name
FROM Employee
LEFT JOIN Department
ON Employee.departmentID = Department.departmentID
ผลลพธตวอยางท� 2
employeeName departmentName
Somchai Research and Development
Wichit Finance
Somjai Research and Development
Yongyut Null
ผลลพธ
ตาราง Employee ตาราง Department
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
30
การใช LEFT JOIN จะแสดงขอมลของตารางดานซาย (ตาราง employee) ท�งหมด
และแสดงขอมลตารางดานขวา (ตาราง Department) เฉพาะขอมลของฟลด departmentID
ตาราง employee และฟลด departmentID ของตาราง Department ท�มขอมลตรงกนเทาน�น
ภาพท� 4.2 แสดงผลลพธท�เกดจากทางานของ LEFT JOIN
3. RIGHT JOIN
รปแบบคาส�ง
SELECT ช�อตารางท�ตองการ.ช�อฟลดของตารางท�ตองการ , …
FROM ช�อตารางท�1
RIGHT JOIN ช�อตารางท�2
ON ช�อตารางท�1.ช�อฟลดตารางท�1=ช�อตารางท�2.ช�อฟลดตารางท�2
หมายเหต ช�อฟลดตารางท�1 และ ช�อฟลดตารางท� 2 เปนฟลดท�มความสมพนธกน
ตวอยางท� 3 แสดงช�อพนกงาน และช�อแผนก ของพนกงานทกคนรวมท�งพนกงานท�ไมได
สงกดแผนกดวย
SELECT employee.Name,department.Name
FROM Employee
RIGHT JOIN Department
ON Employee.departmentID = Department.departmentID
ผลลพธ
ตาราง Employee ตาราง Department
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
31
ผลลพธตวอยางท� 3
employeeName departmentName
Somchai Research and Development
Somjai Research and Development
Wichit Finance
การใช RIGHT JOIN จะแสดงขอมลของตารางดานขวา (ตาราง Department)
ท�งหมดและแสดงขอมลตารางดานซาย (ตาราง Employee) เฉพาะขอมลของฟลด
departmentID ของตาราง employee และฟลด departmentID ของตาราง Department ท�ม
ขอมลท�ตรงกนเทาน�น
ภาพท� 4.3 แสดงผลลพธท�เกดจากทางานของ RIGHT JOIN
ผลลพธจากการ join ตารางท�กลาวมาน�นเราจะไดขอมลท�งหมดตามเง�อนไขการ join แตละ
ประเภทแตหากเราตองการขอมลเฉพาะบางแถว เราสามารถใชตวดาเนนการ AND เช�อมกบการ
join ตารางได
ตวอยางท� 4 แสดงช�อพนกงาน และช�อแผนก โดยมเง�อนไขวาแสดงเฉพาะแผนก Research
and Development เทาน�น
SELECT employee.Name,department.Name
FROM Employee
INNER JOIN Department
ON Employee.departmentID = Department.departmentID
AND Department.Name = ‘Research and Development’
ผลลพธ
ตาราง Employee ตาราง Department
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
32
ผลลพธตวอยางท� 4
Name Name
Somchai Research and Development
Somjai Research and Development
4.2 การใชงานคาส�ง SELECT แบบซอนหลายระดบ (Subqueries)
เราสามารถใชงานคาส�ง SELECT แบบซอนหลายระดบไดหากเราตองการขอมลท�มความ
ซบซอนมากย�งข�น
ตวอยางท� 5 แสดงรายละเอยดการตดตอท�งหมด (Assignment) ของพนกงานท�ช�อ Somchai
SELECT *
FROM Assignment
WHERE employeeID =
(SELECT employeeID
FROM employee
WHERE name=’Somchai’)
ผลลพธจากตวอยางท� 5
clientID employeeID Workdate hours
1 1111 2010-04-10 8.5
1 1111 2010-04-25 5
การใชงาน SELECT แบบซอนหลายระดบน� ขอควรระวงคอ คาส�ง SELECT ท�อยหลงเง�อนไข
WHERE จะตองไดผลลพธเปน 1 แถวเทาน�น จากตวอยางท� 5 หลงเง�อนไข WHERE ถาเรารวารหส
พนกงาน (employeeID) อยแลวกไมจาเปนตองใช Subquery แตถาเรารช�อพนกงานอยางเดยวก
สามารถใช Subquery เขามาชวยทางานได
สรปทายบท
การ join ตารางมากกวา 1 ตารางเราสามารถใชรปแบบการ join แบบตางๆ ไดแก INNER
JOIN เปนการ join โดยนาฟลดท�มความสมพนธกนมาเปรยบเทยบกนโดยผลลพธจะไดขอมล
เฉพาะแถวขอมลท�ตรงกนเทาน�น สวน LEFT JOIN จะเปนการเปรยบเทยบฟลดเหมอนกน INNER
JOIN แตขอมลท�เกดจากเปรยบเทยบจะแสดงขอมลท�งหมดจากตาราง (รวมท�งฟลดท�เปนคา Null
ดวย) ดานซาย สวน RIGHT JOIN จะแสดงขอมลท�งหมดจากตารางดานขวา (รวมท�งฟลดท�เปนคา
Null ดวย) และเรายงสามารถใชการ SELECT แบบหลายระดบเพ�อการเรยกดขอมลท�ซบซอนย�งข�น
ได
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
33
ตอนท� 5
การใช SQL Function
ในระบบการจดการฐานขอมล (DBMS) แตละตว จะม SQL Function มาตรฐานมาใหเรา
ใชงาน ประโยชนของการใช SQL Function กคอชวยอานวยความสะดวกในการเรยกดขอมลตางๆ
ในรปแบบของการคานวณ ท�งตวเลขและตวอกษร ตวอยางประเภทของฟงกชน อาทเชน ฟงกชน
การจดการขอความ ฟงกชนทางดานคณตศาสตร ฟงกชนการคานวณดานวนท�และเวลา เปนตน แต
SQL Function แตละ DBMS อาจมรปแบบท�แตกตางกนได ในบทน� เราจะเรยนรและใชประโยชน
จาก SQL Function มาตรฐานท�ใชไดกบทก DBMS พรอมกบวธการการจดกลมขอมล และการ
กรองกลมขอมลดวยเง�อนไขตางๆดวย
เน�อหา
1. ฟงกชนเก�ยวกบการคานวณ และสรปคาของขอมล (Aggregate Function)
2. การจดกลมขอมลดวย GROUP BY
3. การกรองกลมขอมลท�มเง�อนไข ดวย HAVING
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
34
5.1 ฟงกชนเก�ยวกบการคานวณ และสรปคาของขอมล (Aggregate Function)
ฟงกชนท�เก�ยวของกบการคานวณ และสรปคาของขอมล มดงตอไปน�
ช�อฟงกชน ความหมายและการใชงาน
AVG ใชหาคาเฉล�ยขอมล
COUNT ใชนบจานวนแถวท�งหมดท�ไดจากการเรยกดขอมล (query)
MAX หาคามากท�สดของขอมลในฟลดน�นๆ โดยใชไดท�งตวเลขและ
ตวอกษร
MIN หาคานอยท�สดของขอมลในฟลดน�นๆ โดยใชไดท�งตวเลขและ
ตวอกษร
SUM หาผลรวมของขอมลในฟลดน�นๆ โดยใชไดเฉพาะขอมลท�เปน
ตวเลขเทาน�น
กอนยกตวอยางการใชงานฟงกชนประเภทตางๆ ในบทน�ของใชโครงสรางตาราง และ
ขอมล ดงน�
ตาราง Department (แผนก):
departmentID Name
42 Finance
128 Research and Development
130 Marketing
ตาราง Employee (พนกงาน):
employeeID Name Job Salary departmentID
1111 Somchai Programmer 15000 128
2222 Wichit DBA 13500 42
3333 Somjai Programmer 16500 128
4444 Yongyut Programmer 20000 Null
ตาราง EmployeeSkills: (ความชานาญดานคอมพวเตอรของพนกงาน)
employeeID skill
1111 JAVA
1111 PHP
2222 Linux
3333 JSP
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
35
4444 VB
4444 MySQL
ตาราง Client: (บรษทของลกคา)
clientID Name Address contactPerson contactNumber
1 ABC Company Limited 1 Silom Rd. Vera 02-1234567
2 Imperial Industry 100 Samutprakarn Mongkol 02-3456789
ตาราง Assignment: (รายละเอยดการตดตอ)
clientID employeeID Workdate hours
1 1111 2010-04-10 8.5
2 2222 2010-04-20 7
1 1111 2010-04-25 5
5.1.1 การหาคาเฉล�ยดวยฟงกชน AVG
รปแบบคาส�ง
SELECT AVG(ช�อฟลด)
FROM ช�อตาราง
ตวอยางท� 1 หาคาเฉล�ยเงนเดอนพนกงานท�งหมด
SELECT AVG(salary)
FROM Employee
ผลลพธตวอยางท� 1
AVG(salary)
16250.0000
5.1.2 การนบจานวนแถวท�ไดจากการเรยกดขอมล (query) ดวยฟงกชน COUNT
รปแบบคาส�ง
SELECT COUNT(ช�อฟลด)
FROM ช�อตาราง
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
36
ตวอยางท� 2 นบจานวนแผนกท�งหมดในบรษท
SELECT COUNT(*)
FROM Department
ผลลพธตวอยางท� 2
COUNT(*)
3
5.1.3 การหาคามากท�สดของฟลดน�นๆ ดวยฟงกชน MAX
รปแบบคาส�ง
SELECT MAX(ช�อฟลด)
FROM ช�อตาราง
ตวอยางท� 3 แสดงเงนเดอนพนกงานท�มากท�สดในบรษท
SELECT MAX(salary)
FROM Employee
ผลลพธตวอยางท� 3
MAX(salary)
20000
5.1.4 การหาคานอยท�สดของฟลดน�นๆ ดวยฟงกชน MIN
รปแบบคาส�ง
SELECT MIN(ช�อฟลด)
FROM ช�อตาราง
ตวอยางท� 4 แสดงเงนเดอนพนกงานท�นอยท�สดในบรษท
SELECT MIN(salary)
FROM Employee
ผลลพธตวอยางท� 4
MIN(salary)
13500
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
37
5.1.5 การหาผลรวมของฟลดน�นๆ ดวยฟงกชน SUM
รปแบบคาส�ง
SELECT SUM(ช�อฟลด)
FROM ช�อตาราง
ตวอยางท� 5 แสดงผลรวมเงนเดอนของพนกงานท�งหมด
SELECT SUM(salary)
FROM Employee
ผลลพธตวอยางท� 5
SUM(salary)
65000
จากตวอยางท�กลาวมาท�งหมดแลวเรายงเพ�มเง�อนไข WHERE เพ�อกรองขอมลไดอกดวย
ยกตวอยาง เชน
ตวอยางท� 6 หาคาเฉล�ยของพนกงานท�เงนเดอนนอยกวาหรอเทากบ 15000
SELECT AVG(salary)
FROM Employee
WHERE salary <= 15000
ผลลพธตวอยางท� 6
AVG(salary)
14250.0000
5.2 การจดกลมขอมลดวย GROUP BY
ในบางคร� งการเรยกดขอมลแบบการคานวณ และการสรปคาของขอมลดวย Aggregate
Function อาจไดผลลพธของแถวขอมลท�เปนเซต (set) หรอมมากกวา 1 แถว ดงน�นหากเรา
ตองการจดกลมขอมลตางๆ น� เพ�อใหไดผลลพธท�ถกตอง เราจาเปนตองนาขอมลในฟลดตางๆ
มาเหลาน�จดกลมเสยกอนดวยการใช GROUP BY
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
38
รปแบบคาส�ง
SELECT ช�อฟลด, ช�อฟงกชน(ช�อฟลด)
FROM ช�อตาราง
WHERE ช�อฟลด ตวดาเนนการ คาขอมล
GROUP BY ช�อฟลด
หมายเหต เง�อนไข WHERE จะใสเฉพาะเม�อเราตองการกรองขอมลของตาราง
ตวอยางท� 7 แสดงรหสพนกงาน และนบจานวนความชานาญดานคอมพวเตอร (skill) ของแตละคน
SELECT employeeID, COUNT(skill)
FROM EmployeeSkills
GROUP BY employeeID
ผลลพธตวอยางท� 7
employeeID COUNT(skill)
1111 2
2222 1
3333 1
4444 2
จากตวอยางท� 7 จะเหนวาเราจดกลมโดยใชฟลด employeeID เพราะจะทาใหไดขอมลในการ
นบความชานาญดานคอมพวเตอรของพนกงานแตละคน
ตวอยางท� 8 แสดงรหสพนกงาน ท�มรหสมากกวาหรอเทากบ 3333 ข�นไป และนบจานวนความ
ชานาญดานคอมพวเตอร (skill) ของแตละคน
SELECT employeeID, COUNT(skill)
FROM EmployeeSkills
WHERE employeeID >= 3333
GROUP BY employeeID
ผลลพธตวอยางท� 8
employeeID COUNT(skill)
3333 1
4444 2
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
39
5.3 การกรองกลมขอมลท�มเง�อนไข ดวย HAVING
เม�อเราไดผลลพธในรปแบบของการจดกลมและการสรปคามาแลวหากเราตองการกรอง
ขอมลหรอใสเง�อนไขเพ�มเตมใหกบฟงกชนตางๆ กสามารถใช HAVING ได โดยมรปแบบดงน�
รปแบบคาส�ง
SELECT ช�อฟลด, ช�อฟงกชน(ช�อฟลด)
FROM ตาราง
WHERE ช�อฟลด ตวดาเนนการ คาขอมล
GROUP BY ช�อฟลด
HAVING ช�อฟงกชน(ช�อฟลด) ตวดาเนนการ คาขอมล
หมายเหต เง�อนไข WHERE จะใสเฉพาะเม�อเราตองการกรองขอมลของตาราง
ตวอยางท� 9 แสดงรหสพนกงาน ท�มจานวนความชานาญดานคอมพวเตอรมากกวา 1 ดาน
SELECT employeeID, COUNT(skill)
FROM EmployeeSkills
GROUP BY employeeID
HAVING COUNT(skill) > 1
ผลลพธตวอยางท� 9
employeeID COUNT(skill)
1111 2
4444 2
จากตวอยางท� 9 เรานาเอาผลลพธจากฟงกชน COUNT มาเปนเง�อนไขเพ�อกรองขอมล โดย
ใช HAVING น�นเอง
สรปทายบท
ในระบบการจดการฐานขอมล (DBMS) แตละตว จะม SQL Function มาตรฐานประเภท
ตางๆใหเราใชงาน และฟงกช�นท�มไวคานวณ และสรปคาขอมล เราเรยกวา Aggregate Function
ไดแก ฟงกชน SUM มหนาท�หาผลรวมขอมล ฟงกชน AVG หาคาเฉล�ยขอมล ฟงกชน COUNT นบ
จานวนแถวของผลลพธ ฟงกชน MIN หาคานอยท�สดของขอมล ฟงกชน MAX หาคามากท�สดของ
ขอมล เม�อเราไดเรยนรฟงกชนเหลาน� แลวเราสามารถนาผลลพธท�ไดมาจดกลมขอมล และเพ�ม
เง�อนไขในการเรยกดขอมลไดอกดวย
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
40
ตอนท� 6
Data Control Language
ในแตละระบบจดการฐานขอมลน�นจะมจานวนผใชงานฐานขอมลมากนอยแตกตางกน แต
อยางไรกตามผใชงานแตละคนจะไดรบสทธในการเขาใชงานฐานขอมลแตกตางกนดวย ท�งน� เพ�อ
ความปลอดภยของขอมล และควบคมขอมลใหเปนไปดวยความถกตอง เราจะตองเรยนรคาส�ง
ประเภท Data Control Language หรอ DCL ซ� งเปนคาส�งประเภทจดการและควบคมการเขาถง
ขอมลในฐานขอมล ประกอบดวย 2 คาส�งคอ คาส�ง GRANT และ คาส�ง REVOKE
เน�อหา
1. รจกกบสทธ (Privileges) ตางๆในการเขาถงขอมลของระบบจดการฐานขอมล
2. การใหสทธผใชคนอ�นเขาถงขอมลดวยคาส�ง GRANT
3. การยกเลกสทธผใชคนอ�นดวยคาส�ง REVOKE
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
41
6.1 รจกกบสทธ (Privileges) ตางๆ ในการเขาถงขอมล ของระบบจดการฐานขอมล
ระบบจดการฐานขอมล (DBMS) จะมระบบความปลอดภยและการควบคมการเขาถงของ
ขอมลตางๆ ในฐานขอมล การควบคมน�กหมายถงสทธท�จะอนญาตใหผใชแตละคนทาอะไรไดบาง
สทธ (Privilege) สรปไดดงน�
สทธ (Privileges) ความหมาย
SELECT อนญาตใหเรยกดขอมลในตารางท�กาหนด
INSERT อนญาตใหเพ�มแถวขอมลในตารางท�กาหนด
UPDATE อนญาตใหแกไขขอมลของแถวในตารางท�กาหนด
DELETE อนญาตใหลบขอมลของแถวในตารางท�กาหนด
ALTER อนญาตใหแกไข หรอเปล�ยนโครงสรางตารางท�กาหนด
ALL อนญาตใหสทธท�งหมดในการกระทากบตารางท�กาหนด
สทธ (Privileges) น�นคอนขางสาคญเพราะหมายถงความปลอดภย ความถกตองของขอมล
การใหสทธตางๆ แกผใชคนอ�นๆ น�นควรพจารณา และใชอยางระมดระวง
6.2 การใหสทธ (Privileges) ผใชคนอ�นเขาถงขอมลดวยคาส�ง GRANT
คาส�ง GRANT เปนคาส�งท�มหนาท�ใหสทธ (Privileges) อนญาตใหผใชคนอ�นสามารถใช
งานในรปแบบสทธตางๆกบตารางของเราได
รปแบบคาส�ง
GRANT สทธท�1, สทธท�2, …
ON ช�อตาราง
TO ช�อผใช1, ช�อผใช2, …
หรอหากเราตองการใหสทธท�งหมดสามารถเขยนคาส�งได ดงน�
รปแบบคาส�ง
GRANT ALL PRIVILEGES
ON ช�อตาราง
TO ช�อผใช1, ช�อผใช2, …
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
42
ตวอยางท� 1 ใหสทธในการเรยกดขอมลตาราง Employee แกผใชช�อ user1
GRANT SELECT
ON Employee
TO user1
ตวอยางท� 2 ใหสทธท�งหมดในการกระทากบตาราง Employee แกผใชช�อ user1
GRANT ALL PRIVILEGES
ON Employee
TO user1
ตวอยางท� 3 ใหสทธในการเรยกด แกไข และลบขอมลตาราง Employee แกผใชช�อ user1
GRANT SELECT,UPDATE,DELETE
ON Employee
TO user1
6.3 การยกเลกสทธ (Privileges) ผใชคนอ�นดวยคาส�ง REVOKE
คาส�ง REVOKE เปนคาส�งท�มหนาท�ยกเลกสทธ (Privileges) โดยไมอนญาตใหผใชคนอ�น
เขามาใชตารางของเราได
รปแบบคาส�ง
REVOKE สทธท�1, สทธท�2, …
ON ช�อตาราง
FROM ช�อผใช1, ช�อผใช2, …
หรอหากเราตองการใหยกเลกสทธท�งหมดสามารถเขยนคาส�งได ดงน�
รปแบบคาส�ง
REVOKE ALL PRIVILEGES
ON ช�อตาราง
FROM ช�อผใช1, ช�อผใช2, …
เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com
43
ตวอยางท� 4 ยกเลกสทธในการเรยกดขอมลตาราง Employee แกผใชช�อ user1
REVOKE SELECT
ON Employee
FROM user1
ตวอยางท� 5 ยกเลกสทธในการเรยกด แกไข และลบขอมลตาราง Employee แกผใชช�อ user1
GRANT SELECT,UPDATE,DELETE
ON Employee
FROM user1
ตวอยางท� 6 ยกเลกสทธท�งหมดในการกระทากบตาราง Employee แกผใชช�อ user1
REVOKE ALL PRIVILEGES
ON Employee
FROM user1
สรปทายบท
เพ�อความปลอดภยของขอมล และการควบคมขอมลใหเปนไปดวยความถกตอง คาส�ง
ประเภท Data Control Language หรอ DCL จงเปนคาส�งมไวเพ�อการจดการและควบคมการเขาถง
ฐานขอมล โดยมการใหสทธตางๆ แตละผใชงานแตกตางกน คาส�ง GRANT มหนาท�อนญาต และ
ใหสทธการกระทาตางๆกบตารางในฐานขอมล และคาส�ง REVOKE มหนาท�ยกเลกสทธการกระทา
ตางๆกบตารางฐานขอมล และควรใชงานคาส�งเหลาน�ดวยความระมดระวงและรอบคอบ