ch7: sql- structure · sql –structure query language ภาษาเอสคิวแอล...

31
CH7: SQL- STRUCTURE QUERY LANGUAGE SAYAN UNANKARD 2/2557 www.itsci.mju.ac.th/sayan

Upload: others

Post on 19-Jan-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

CH7: SQL- STRUCTURE QUERY LANGUAGE

S A Y A N U N A N K A R D2 / 2 5 5 7

www. i t sc i .m ju .ac . th /sayan

Page 2: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

SQL – STRUCTURE QUERY LANGUAGE

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

(SQL – Structure Query Language) ซงเปนภาษาทางสถาบนก าหนดมาตรฐานแหงชาตของ

อเมรกา (ANSI - American National Standards Institute)

มาตรฐานของภาษาเอสควแอลในปจจบน ถกพฒนามาจนถงรน SQL: 2006 ซงสนบสนน

การท างานในรปแบบ เอกเอมแอล (XML) และการประมวลผลขอมลแบบของ XML

2

Page 3: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

SQL – STRUCTURE QUERY LANGUAGE

ภาษาเอสควแอล ใชส าหรบท าหนาทในการก าหนดโครงสรางขอมล การบนทก ปรบปรง ลบ

และการเรยกขอมลอยางงาย รวมทงการเรยกคนขอมลทซบซอนข น

เปนภาษาทสามารถสรางและปฏบตการกบฐานขอมลเชงสมพนธโดยเฉพาะ

ถกพฒนาข นมาจากแนวคดของแคลคลสเชงสมพนธ (Relational calculus) และ พชคณตเชง

สมพนธ (Relational algebra)

3

Page 4: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

แคลคลสเชงสมพนธ

ใชกบการอธบายขอมลทตองการคออะไร ซงเปนตวก าหนดคณสมบตของขอมลทตองการ ม

การใชค าขยายค านามในภาษาองกฤษ ซงมสองแบบน าหนา คอ Universal Qualifier ( หรอ

"For all") และ Existential Qualifier ( หรอ "There exists" หรอ "For some") ซงเปน

ตวก าหนดวาในขอบเขตของขอมลตวหนง วามกคาขอมลทท าให เปนจรงตามเงอนไข

x y x < 10 AND x > y

บางคาของ x และ y ซง x มคานอยกวา 10 และ x มคามากกวา y

x y y < x

ส าหรบ x ทกคา ม y อยางนอยหนงคา ซง y มคานอยกวา x

4

Page 5: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

พชคณตเชงสมพนธ

ใชกบการบรรยายขนตอนตาง ๆ เพอใหไดขอมลทตองการ ซงสวนใหญแลวจะเปนพ นฐานของ

ค าสง เอสควแอล ในการเลอกขอมลข นมาจากฐานขอมลเพอแสดงผล หรอ ประมวลผลตาง ๆ

การเลอกคอลมนขอมล (Projection)

เปนค าสงทใชส าหรบเลอกคอลมนของขอมลในตาราง แทนดวยสญลกษณ พาย () โดยม

รปแบบ

<ชอคอลมนทตองการแสดงผล>

(ชอตาราง)

เชน หากตองการแสดงเฉพาะคอลมน รหสนกศกษา และ ชอ – นามสกล จะตองเขยน

สญลกษณดงน

<รหสนกศกษา, ชอ – นามสกล >

(ตารางนกศกษา)

5

Page 6: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

พชคณตเชงสมพนธ

การเลอกแถวขอมล (Selection)

เปนค าสงส าหรบการเลอกแถวขอมลทเฉพาะเจาะจงจากตาราง แทนดวยสญลกษณ ซกมา

() โดยมรปแบบคอ

<เงอนไขการเลอกขอมล>

(ชอตาราง)

หากตองการแสดงเฉพาะนกศกษาทไดเกรดมากกวา 3.00 จะตองเขยนสญลกษณดงน

เกรด >= 3.00

(ตารางนกศกษา)

หากตองการแสดงเฉพาะนกศกษาทไดเกรดมากกวา 3.00 และ รหสสาขาเปน 405 จะตอง

เขยนสญลกษณดงน

เกรด >= 3.00 and รหสสาขาวชา=‘405’

(ตารางนกศกษา)

6

Page 7: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

พชคณตเชงสมพนธ

หากตองการแสดงเฉพาะรหสนกศกษา และ ชอนกศกษาทไดเกรดมากกวา 3.00 และ รหส

สาขาเปน 405 จะตองเขยนสญลกษณดงน

<รหสนกศกษา, ชอ – นามสกล >

(เกรด >= 3.00 and รหสสาขาวชา=‘405’

(ตารางนกศกษา))

การเชอมโยงตาราง (Joins)

เปนค าสงทใชส าหรบการใชคอลมนของขอมล 2 ตารางรวมกน แทนดวยสญลกษณ เชน

R S หรอ R join S เปนลกษณการเชอมโยงตารางทมคาขอมลตรงกนจงจะแสดงผล

ออกมา เชน

หากตองการแสดงขอมลนกศกษาและชอสาขาวชา ดงนนตองเชอมโยงตารางระหวาง

นกศกษากบตารางสาขาวชา ดงสญลกษณตอไปน

<รหสนกศกษา, ชอ – นามสกล, ชอสาขาวชา >

(ตารางนกศกษา ตารางสาขาวชา )7

Page 8: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ประเภทของค าสงของภาษาเอสควแอล

ภาษาเอสควแอล ประกอบดวย 4 สวนคอ

ภาษาส าหรบการนยามขอมล (Data Definition Language: DDL)

ประกอบดวยชดค าสงการสราง แกไข และ ลบตาราง และวตถอน ๆ

ภาษาส าหรบการจดการขอมล (Data Manipulation Language: DML)

ประกอบดวยชดค าสงการเพม แกไข และลบขอมล

ภาษาควบคม (Control Language: CL) ประกอบดวยชดค าสงในการควบคมสทธและ

ยกเลกสทธการเขาใชงาน

ภาษาส าหรบการเลอกดขอมล (Query) ประกอบดวยค าสงในการเลอกคอลมน และแถว

ขอมลตามทผใชตองการ

8

Page 9: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการนยามขอมล

เปนภาษาส าหรบจดการโครงสรางฐานขอมล ทท างานเกยวกบ ตาราง ดชน และอน ๆ

ประกอบดวยค าสงในการสราง (CREATE) การแกไข (ALTER) และการลบ (DROP)

ค าสงส าหรบการสรางตาราง สงทตองระบ ชอตาราง ชอคอลมน ชนดของขอมล และ ขนาด

ของคอลมน

CREATE TABLE Employee (

emp_id INTEGER NOT NULL,

emp_name VARCHAR(45) NOT NULL,

address VARCHAR(255) NOT NULL,

hire_date DATE NOT NULL,

PRIMARY KEY(emp_id)

);

9

Page 10: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการนยามขอมล

กรณทมคยนอก

CREATE TABLE Employee (

emp_id INTEGER NOT NULL,

dept_id INTEGER NOT NULL,

emp_name VARCHAR(45) NOT NULL,

address VARCHAR(255) NOT NULL DEFAULT '-',

hire_date DATETIME NOT NULL,

PRIMARY KEY(emp_id),

FOREIGN KEY(dept_id) REFERENCES Department(dept_id)

ON DELETE CASCADE ON UPDATE CASCADE

); 10

Page 11: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการนยามขอมล

PRIMARY KEY (คอลมนทก าหนดเปนคยหลก) คอการก าหนดคยหลกของตาราง

FOREIGN KEY (คอลมนคยนอก) REFERENCES ชอตารางหลก (คอลมนคยหลก)

UNIQUE คอค าสงส าหรบก าหนดใหคอลมนนน ๆ หามซ า

DEFAULT คอค าสงส าหรบก าหนดคาเรมตนของคอลมน กรณทผใชไมปอนคาจะแทนทคา

เรมตนนน ๆ ในคอลมน

11

Page 12: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการนยามขอมล

ค าสงส าหรบเปลยนแปลงโครงสราง การใชค าสง ALTER TABLE ในกรณตอไปน

ส าหรบเพมคอลมนใหม (Add new column)

ส าหรบการแกไขคอลมนทมอย (Modified column)

ลบคอลมน (Drop a column)

12

Page 13: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการนยามขอมล

เพมคอลมนต าแหนงในตารางพนกงาน

ALTER TABLE EMPLOYEE ADD POSITION VARCHAR(20);

แกไขขนาดของต าแหนงจาก VARCHAR(20) เปน VARCHAR(40) ใชไดกบบาง DBMS

เทานน

ALTER TABLE EMPLOYEE MODIFY POSITION VARCHAR(40) NOT NULL;

ลบคอลมนต าแหนงในตารางพนกงาน

ALTER TABLE EMPLOYEE DROP COLUMN POSITION;

ค าสงในการลบตาราง การใชค าสง DROP ในการลบโครงสรางตาราง

DROP TABLE EMPLOYEE;

13

Page 14: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการจดการขอมล

ค าสงในการจดการขอมลจะถกใชเมอตองการ

เพมขอมลแถวใหมลงในตาราง

แกไขขอมลในตาราง

ลบขอมลทไมตองการออกจากตาราง

อกทงยงเปนสวนประกอบของทรานแซคชน (Transaction) ซงประกอบดวยชดค าสงของการ

จดการขอมลทเปนหนวยของการท างานนน ๆ

14

Page 15: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการจดการขอมล : INSERT

ค าสงในการเพมขอมล (INSERT)

การเพมขอมลแถวใหม ประกอบดวยค าสงทระบคอลมนทจะเพม

หากไมระบคอลมนทตองการเพม จะตองเรยงล าดบขอมลตามคอลมนในตารางนน ๆ

ขอมลทเปนตวอกษรจะตองอยภายในเครองหมายฝนทอง (single quotation mark) เชน

‘สายณห อนนนกาศ’

การเพมขอมลแบบระบคอลมน

INSERT INTO Employee (emp_id, dept_id, emp_name, address, hire_date) VALUES

(10, 2, ‘สายณห อนนนกาศ’, ‘92 ม.5 ต.สนทรายนอย อ.สนทราย จ.เชยงใหม 50210’,

‘15/03/2550’);

15

Page 16: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการจดการขอมล : INSERT

การเพมแบบใสคาวาง (จะท าไดเมอคอลมน ทอย (Address) ก าหนดใหใสคาวางได)

INSERT INTO Employee (emp_id, dept_id, emp_name, address, hire_date) VALUES

(12, 2, ‘นชนาถ เพงมาก’, NULL, ‘16/05/2549’);

การเพมแบบใสคาอตโนมตจากระบบ โดย NOW() เปนคาอตโนมตของฐานขอมล MySQL

หมายถงวนทปจจบนของเครองเซรฟเวอร

INSERT INTO Employee (emp_id, dept_id, emp_name, address, hire_date) VALUES

(13, 2, ‘อรรถพล ชตกณฑ’, ‘125 บานออนนช เขตออนนช กทม 10300’, NOW());

16

Page 17: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการจดการขอมล : UPDATE

ค าสงในการแกไขขอมล (UPDATE)

การแกไขขอมลโดยระบเฉพาะแถวทตองการ เชนแกไขเฉพาะแถวทรหสพนกงานเปน 10

UPDATE Employee SET dept_id = 3 WHERE emp_id = 10;

หากตองการก าหนดคาวาง สามารถท าไดดงน Column_name = NULL

UPDATE Employee SET address = NULL WHERE emp_id = 10;

การแกไขหลาย ๆ คอลมนพรอมกน คนแตละคอลมนดวยเครองหมายจลภาค “,”

UPDATE Employee SET dept_id = 3,

address = ‘35 เขตพระโขนง กทม 10300’

WHERE emp_id = 10;

17

Page 18: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาส าหรบการจดการขอมล : DELETE

ค าสงในการลบขอมล (DELETE) เปนค าสงในการลบขอมลแตสามารถทจะกคนขอมลทลบไป

แลวได

ลบขอมลเฉพาะแถวทตองการเทานน เชนตองการลบพนกงานรหส 10

DELETE FROM Employee WHERE emp_id = 10;

การลบขอมลทก ๆ แถวในตาราง

DELETE FROM Employee

ค าสงทใชลบขอมลอยางถาวรโดยไมสามารถกคนขอมลไดเหมอนกบค าสง DELETE

TRUNCATE TABLE Employee

18

Page 19: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาควบคม

เปนสวนของชดค าสงในการควบคมสทธในการเขาใชงานค าสงเอสควแอลสวนอนๆ ซง

ผใชงานระบบฐานขอมลมสทธในการเขาถงขอมลแตกตางกนไป ตวอยางเชน

สทธในการอานหรอเรยกดขอมล (Read หรอ Select)

สทธในการเพมขอมล (Insert)

สทธในการเปลยนแปลงขอมล (Update)

สทธในการลบขอมล (Delete)

สทธในการสรางดชน (Index)

สทธในการสรางตารางหรอวว (Create)

สทธในการเปลยนแปลงโครงสรางขอมล (Alteration)

สทธในการลบตารางหรอวว (Drop)

19

Page 20: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาควบคม : GRANT

ก าหนดสทธในการเลอกและเพมขอมลตารางพนกงานใหกบผใชทชอ SAYAN

GRANT SELECT ON STUDENT TO SAYAN;

GRANT SELECT,INSERT ON EMPLOYEE TO SAYAN;

ก าหนดสทธในการเลอกขอมลรหสพนกงานและชอพนกงานจากตารางพนกงาน ไดเพยงสอง

คอลมนเทานนใหกบผใชทชอ SAYAN

GRANT SELECT(emp_id,empName) ON EMPLOYEE TO SAYAN;

ก าหนดสทธทกอยาง กบตารางพนกงานใหกบผใชทชอ SAYAN

GRANT ALL PRIVILEGES ON EMPLOYEE TO SAYAN; หรอ

GRANT ALL ON EMPLOYEE TO SAYAN;

20

Page 21: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ภาษาควบคม : REVOKE

ในสวนของการยกเลกสทธเมอไมตองการใหผใชนน ๆ สามารถเขาใชงานฐานขอมลไดอก

เชนอาจจะระงบการใชสทธชวคราว สามารถใชค าสง REVOKE ในการยกเลกการใชสทธ เชน

ยกเลกสทธในการเลอกและเพมขอมลกบตารางพนกงานกบผใชทชอ SAYAN

REVOKE SELECT ON EMPLOYEE FROM SAYAN;

REVOKE SELECT,INSERT ON EMPLOYEE FROM SAYAN;

ยกเลกสทธทงหมดกบตารางพนกงานกบผใชทชอ SAYAN

REVOKE ALL ON EMPLOYEE FROM SAYAN;

21

Page 22: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

EXAMPLE

22

Page 23: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางค าสงในการ CREATE TABLE

CREATE TABLE Customer (

customerID INTEGER NOT NULL,

custName VARCHAR(45) NOT NULL UNIQUE,

company VARCHAR(45) NOT NULL,

address VARCHAR(255),

telephone VARCHAR(20) NOT NULL,

email VARCHAR(20) UNIQUE,

PRIMARY KEY(customerID)

);

23

Page 24: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางค าสงในการ CREATE TABLE

CREATE TABLE Products (

productID INTEGER NOT NULL,

productName VARCHAR(45) NOT NULL,

color VARCHAR(30),

PRIMARY KEY(productID)

);

24

Page 25: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางค าสงในการ CREATE TABLE (ตอ)

CREATE TABLE Product_Price (

startDate DATETIME NOT NULL,

productID INTEGER NOT NULL,

endDate DATETIME,

unitPrice MONEY DEFAULT 0,

PRIMARY KEY(startDate, productID),

FOREIGN KEY(productID) REFERENCES Products(productID)

);

25

Page 26: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางค าสงในการ CREATE TABLE (ตอ)

CREATE TABLE Orders (

orderID INTEGER NOT NULL,

customerID INTEGER NOT NULL,

orderDate DATETIME NOT NULL,

PRIMARY KEY(orderID),

FOREIGN KEY(customerID) REFERENCES Customer(customerID)

);

26

Page 27: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางค าสงในการ CREATE TABLE (ตอ)

CREATE TABLE Orders_Line (

orderID INTEGER NOT NULL,

productID INTEGER NOT NULL,

quantity INTEGER NOT NULL,

PRIMARY KEY(orderID, productID),

FOREIGN KEY(orderID) REFERENCES Orders(orderID),

FOREIGN KEY(productID) REFERENCES Products(productID)

);

27

Page 28: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางในการเพมขอมล

แบบท 1 เพมบางคอลมน

INSERT INTO Customer (customerID, custName, company, telephone)

VALUES (1, ‘สายณห อนนนกาศ’, ‘IT COMPANY’, ‘053-873530’);

แบบท 2 เพมทกคอลมน

INSERT INTO Customer

VALUES (1, ‘สายณห อนนนกาศ’, ‘IT COMPANY’, ‘92/69 ม.5 ต.สนทรายนอย อ.สนทราย

จ.เชยงใหม’, ‘053-873530’, ‘[email protected]’);

หมายเหต แบบท 2 จะตองเรยงล าดบคอลมนตามตารางทสราง

28

Page 29: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางในการเพมขอมล (ตอ)

แบบท 3 การเพมขอมลประเภทวนทใน MySQL

INSERT INTO Orders (orderID, customerID, orderDate)

VALUES (10001, 1, ‘2015-03-17’);

29

Page 30: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางการแกไขขอมล

แบบท 1 การแกไขขอมลมากกวา 1 คอลมน

UPDATE Customer

SET telephone = ‘053-873550’, email = ‘[email protected]

WHERE customerID = 1;

แบบท 2 การแกไขขอมลประเภทวนทใน MySQL

UPDATE Orders

SET orderDate = ‘2015-03-15’

WHERE orderID = 10001;

30

Page 31: CH7: SQL- STRUCTURE · sql –structure query language ภาษาเอสคิวแอล ใช้ส าหรับท าหน้าที่ในการก าหนดโครงสร้างข้อมูล

ตวอยางในการลบขอมล

แบบท 1 การลบขอมลทงหมด

DELETE FROM ORDERS;

แบบท 2 การลบขอมลเฉพาะบางแถว

DELETE FROM ORDERS

WHERE orderID = 10001;

31