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

Post on 19-Jan-2020

9 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

SQL – STRUCTURE QUERY LANGUAGE

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

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

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

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

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

2

SQL – STRUCTURE QUERY LANGUAGE

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

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

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

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

สมพนธ (Relational algebra)

3

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

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

การใชค าขยายค านามในภาษาองกฤษ ซงมสองแบบน าหนา คอ 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

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

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

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

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

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

รปแบบ

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

(ชอตาราง)

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

สญลกษณดงน

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

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

5

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

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

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

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

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

(ชอตาราง)

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

เกรด >= 3.00

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

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

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

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

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

6

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

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

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

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

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

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

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

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

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

ออกมา เชน

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8

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

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

ประกอบดวยค าสงในการสราง (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

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

กรณทมคยนอก

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

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

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

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

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

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

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

11

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

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

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

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

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

12

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

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

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

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

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

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

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

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

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

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

14

ภาษาส าหรบการจดการขอมล : 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

ภาษาส าหรบการจดการขอมล : 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

ภาษาส าหรบการจดการขอมล : 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

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

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

แลวได

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

DELETE FROM Employee WHERE emp_id = 10;

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

DELETE FROM Employee

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

TRUNCATE TABLE Employee

18

ภาษาควบคม

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

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

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

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

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

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

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

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

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

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

19

ภาษาควบคม : 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

ภาษาควบคม : REVOKE

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

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

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

REVOKE SELECT ON EMPLOYEE FROM SAYAN;

REVOKE SELECT,INSERT ON EMPLOYEE FROM SAYAN;

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

REVOKE ALL ON EMPLOYEE FROM SAYAN;

21

EXAMPLE

22

ตวอยางค าสงในการ 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

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

CREATE TABLE Products (

productID INTEGER NOT NULL,

productName VARCHAR(45) NOT NULL,

color VARCHAR(30),

PRIMARY KEY(productID)

);

24

ตวอยางค าสงในการ 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

ตวอยางค าสงในการ 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

ตวอยางค าสงในการ 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

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

แบบท 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’, ‘sayan@mju.ac.th’);

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

28

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

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

INSERT INTO Orders (orderID, customerID, orderDate)

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

29

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

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

UPDATE Customer

SET telephone = ‘053-873550’, email = ‘sayan@mju.ac.th’

WHERE customerID = 1;

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

UPDATE Orders

SET orderDate = ‘2015-03-15’

WHERE orderID = 10001;

30

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

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

DELETE FROM ORDERS;

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

DELETE FROM ORDERS

WHERE orderID = 10001;

31

top related