Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
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’, ‘[email protected]’);
หมายเหต แบบท 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 = ‘[email protected]’
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