sql ebook codingthailand

47
การจัดการฐาน กรณีศึกษา ฐานขอมูล MySQL CodingThailand.com Programming Coach by โค้ชเอก facebook.com/codingthailan นขอมูลเบื้องตนดวย SQ m nd QL

Upload: charumpphol-tose-foongkhajorn

Post on 15-Dec-2015

17 views

Category:

Documents


1 download

DESCRIPTION

SQL eBook

TRANSCRIPT

Page 1: SQL eBook Codingthailand

การจดการฐานขอมลเบองตนดวย กรณศกษา ฐานขอมล MySQL

CodingThailand.comProgramming Coach by โคชเอก

facebook.com/codingthailand

การจดการฐานขอมลเบองตนดวย SQL

.com

โคชเอก

facebook.com/codingthailand

SQL

Page 2: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 3: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com

เกร�นนา

สวสดครบ E-Book เลมน �ผมต �งใจทาเพ�อเปนของขวญปใหม 2558 ใหกบทกคนท�สนใจ

และตองการเรยนรและทบทวนคาส�ง SQL ซ�งเปนภาษาท�คอนขางจาเปนและสาคญในการเขยน

โปรแกรมตดตอกบฐานขอมลตางๆ

โดยสวนตวแลว ผมเช�อเสมอวา การใหอะไรทกอยางออกไปน �น ส�งหน�งท�ผมไดแนๆ คอ

การท�ผมไดพฒนาตวเอง ชวตคอการเรยนรตลอดเวลา ความรถอเปนทรพยสนอยางหน�งท�มคณคา

มาก ในป 2558 น � ถาใครยงไมไดวางเปาหมายในการพฒนาตวเองไว มาลองต �งเปาหมายและ

เรยนรและพฒนาตวเองไปพรอมกนครบ

ในปใหมน � กขอใหคณพระศรรตนตรย และส�งศกด�สทธ�ท �งหลาย ขอใหคมครองและขอให

ทกคนมความสขมากๆ ครบ

ดวยความปรารถนาด

โคชเอก

30/12/57

Page 4: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com

หากตองการลงมอปฏบตจรงและพมพไปดวย สามารถดวดโอไดท�

http://www.codingthailand.com/site/index.php?r=site/courses&id=10

Page 5: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 6: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 7: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 น�นๆ

Page 8: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 ได

Page 9: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

)

Page 10: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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)

Page 11: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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)

)

Page 12: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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)

)

Page 13: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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)

Page 14: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 ใชสาหรบลบฐานขอมล และตารางฐานขอมล

Page 15: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 16: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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’)

Page 17: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 18: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 19: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 20: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com

16

สรป

Data Manipulation Language คอ ภาษาท�ใชในการจดการขอมลภายในตารางประกอบดวย

คาส�งในการเรยกดขอมล การเพ�มขอมล การแกไขขอมล และการลบขอมล คาส�ง INSERT เปน

คาส�งสาหรบเพ�มขอมลเขาไปในตาราง คาส�ง UPDATE เปนคาส�งสาหรบแกไขคาขอมลท�อยใน

ตาราง คาส�ง DELETE เปนคาส�งสาหรบลบขอมลท�อยในตาราง

Page 21: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 22: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 23: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 24: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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’

Page 25: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 และยงสามารถทาใหเราเรยกด

ขอมลท�มความซบซอนมากข�นดวย ตวดาเนนการบางประเภทเราไดเรยนรไปแลว เชน เคร�องหมาย

เทากบ (=), เคร�องหมายมากกวา (>), เคร�องหมายนอยกวา (<) เปนตน ในหวขอน� เราจะมาเรยนรตว

ดาเนนการเพ�มเตม ดงน�

Page 26: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 27: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 28: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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’

Page 29: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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) ขอมลจากตารางฐานขอมล โดย

เราสามารถใสเง�อนไขเพ�อเปนการกรองขอมล วาเราตองการขอมลฟลดใด แถวใดบาง ทาใหเราได

ขอมลตรงความตองการ นอกจากน�นยงมตวดาเนนการตางๆ ท�เพ�มเขามา ทาใหสามารถเรยกด

ขอมลท�ซบซอน และมประสทธภาพมากข�นดวย

Page 30: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com

26

ตอนท� 4

การเรยกดขอมลข�นสง

คาส�ง SELECT ท�เราไดเรยนรในตอนท�แลว ทาใหเราสามารถแสดงหรอเรยกดขอมลจาก

ตารางฐานขอมลไดในเบ�องตน ในบทน� เราจะเรยนรการเรยกดขอมลข�นสงไมวาจะเปนการเรยกด

ขอมลท�มากกวา 1 ตาราง (Joins) การเรยกดขอมลดวยคาส�ง SELECT แบบซอนหลายระดบ

(Subqueries) เพ�อใหไดขอมลท�มความซบซอน และตรงกบความตองการมากข�น

เน�อหาสาระ

1. การเรยกดขอมลจากตารางมากกวา 1 ตาราง โดยการ Join

2. การใชงานคาส�ง SELECT แบบซอนหลายระดบ (Subqueries)

Page 31: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 32: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 เทาน�น

Page 33: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 34: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 35: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 36: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 แบบหลายระดบเพ�อการเรยกดขอมลท�ซบซอนย�งข�น

ได

Page 37: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 38: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 39: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 ช�อตาราง

Page 40: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 41: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 42: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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

Page 43: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 หาคามากท�สดของ

ขอมล เม�อเราไดเรยนรฟงกชนเหลาน� แลวเราสามารถนาผลลพธท�ไดมาจดกลมขอมล และเพ�ม

เง�อนไขในการเรยกดขอมลไดอกดวย

Page 44: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� www.codingthailand.com

40

ตอนท� 6

Data Control Language

ในแตละระบบจดการฐานขอมลน�นจะมจานวนผใชงานฐานขอมลมากนอยแตกตางกน แต

อยางไรกตามผใชงานแตละคนจะไดรบสทธในการเขาใชงานฐานขอมลแตกตางกนดวย ท�งน� เพ�อ

ความปลอดภยของขอมล และควบคมขอมลใหเปนไปดวยความถกตอง เราจะตองเรยนรคาส�ง

ประเภท Data Control Language หรอ DCL ซ� งเปนคาส�งประเภทจดการและควบคมการเขาถง

ขอมลในฐานขอมล ประกอบดวย 2 คาส�งคอ คาส�ง GRANT และ คาส�ง REVOKE

เน�อหา

1. รจกกบสทธ (Privileges) ตางๆในการเขาถงขอมลของระบบจดการฐานขอมล

2. การใหสทธผใชคนอ�นเขาถงขอมลดวยคาส�ง GRANT

3. การยกเลกสทธผใชคนอ�นดวยคาส�ง REVOKE

Page 45: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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, …

Page 46: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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, …

Page 47: SQL eBook Codingthailand

เรยนเขยนโปรแกรมฟร กบโคชเอก ไดท� 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 มหนาท�ยกเลกสทธการกระทา

ตางๆกบตารางฐานขอมล และควรใชงานคาส�งเหลาน�ดวยความระมดระวงและรอบคอบ