Professional Documents
Culture Documents
Chương 6: Thao tác dữ liệu với ngôn ngữ SQL
Chương 6: Thao tác dữ liệu với ngôn ngữ SQL
Chương 6: Thao tác dữ liệu với ngôn ngữ SQL
2
Nội dung chương 6: (tt)
3
Mục tiêu của ngôn ngữ SQL
4
Mục tiêu của ngôn ngữ SQL
Ngôn ngữ DDL cho việc định nghĩa cấu trúc CSDL
Ngôn ngữ DML cho việc truy xuất và cập nhật dữ liệu
§ Ngôn ngữ SQL có định dạng mềm dẻo
§ Ngôn ngữ SQL thuộc loại ngôn ngữ phi thủ
tục (chỉ cần miêu tả CÁI GÌ chúng ta muốn)
5
Mục tiêu của ngôn ngữ SQL
6
Mục tiêu của ngôn ngữ SQL
8
Viết lệnh SQL
nghĩa
– Từ khóa (Reserved words) là các từ qui định
sẳn của ngôn ngữ SQL
– Từ do user định nghĩa (User-defined words)
như tên quan hệ, tên cột, tên view, …
9
Viết lệnh SQL
12
Câu lệnh SELECT
13
Câu lệnh SELECT
Định nghĩa
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
SELECT *
Chọn từ quan hệ R các bộ dữ
liệu thỏa mãn điều kiện C FROM R
WHERE C
Ví dụ
Ví dụ
Định nghĩa
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
Ví dụ
Liệt kê tên và mức lương cơ bản của tất cả nhân viên trong công ty
SELECT Ename, Esalary
FROM EMPLOYEE
PHÉP CHIẾU
Ví dụ
Định nghĩa
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
• Sắp xếp các bộ trong quan hệ R theo trật tự tăng (giảm) đối
với một (số) thuộc tính
• Sử dụng mệnh đề ORDER BY
Ví dụ
EStartdate
DEPLOCATION
WORKSON DNum
DNum
ESSN supervisorSSN
DLocation
PNum
workHours
EStartdate
DEPLOCATION
WORKSON DNum
DNum
ESSN supervisorSSN
DLocation
PNum
workHours
5. Liệt kê danh sách các nhân viên không có người quản lý.
6. Liệt kê danh sách các thân nhân của nhân viên có mã nhân viên là
‘N01’, thông tin gồm: Mã nhân viên, Tên thân nhân, Mối quan hệ.
7. Liệt kê mã nhân viên làm việc cho dự án có mã: DA01, DA02, DA03
8. Liệt kê số giờ làm việc của các nhân viên, sắp xếp số giờ làm việc tăng
dần.
9. Cho biết những nhân viên nào đã từng tham gia làm việc cho ít nhất
một dự án (Mã nhân viên)
Các ví dụ xem thêm về câu truy vấn
24
Ví dụ 1
25
Ví dụ 6.1: lấy tất cả các cột, tất cả các hàng
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
26
Ví dụ 6.2: Lấy 1 số cột
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
27
Ví dụ 6.3 Không sử dụng DISTINCT
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
SELECT propertyNo
FROM Viewing;
28
Ví dụ 6.3 Có sử dụng DISTINCT
29
Ví dụ 6.4 Dùng các field tính toán
FROM Staff;
30
Ví dụ 6.4 Dùng các field tính toán
§ Dùng AS TênFieldMới:
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
31
Ví dụ 6.5
salary
FROM Staff
WHERE salary > 10000;
32
Ví dụ 6.6
SELECT *
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
FROM Branch
WHERE city = 'London' OR city = 'Glasgow';
33
Ví dụ 6.7
salary
FROM Staff
WHERE salary BETWEEN 20000 AND 30000;
34
Ví dụ 6.7
35
Ví dụ 6.8 Toán tử IN
FROM Staff
WHERE position IN ('Manager', ‘Supervisor');
36
Ví dụ 6.8 Toán tử IN
§Thay thế IN
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
37
Ví dụ 6.9 Toán tử LIKE
FROM PrivateOwner
WHERE address LIKE '%Glasgow%';
38
Ví dụ 6.9 Toán tử LIKE
39
Ví dụ 6.10 dùng giá trị NULL
40
Ví dụ 6.10 dùng giá trị NULL
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
41
Ví dụ 6.11 Sắp xếp dữ liệu của kết quả
FROM Staff
ORDER BY salary DESC;
42
Ví dụ 6.12 Sắp xếp dl kết quả trên nhiều cột
FROM PropertyForRent
ORDER BY type, rent DESC;
43
Các hàm thống kê trong lệnh SELECT
COUNT đếm
SUM tính tổng
AVG tính trung bình cộng
MIN lấy giá trị nhỏ nhất
MAX lấy giá trị lớn nhất
44
Các hàm thống kê trong lệnh SELECT
số và không phải số
§ SUM và AVG chỉ dùng cho cả các giá trị số
§ Trừ hàm COUNT(*), các hàm khác loại bỏ giá
trị NULL trước rồi mới tính kết quả
§ COUNT(*) đếm tất cả các hàng kể cả giá trị
NULL và trùng lắp
§ Muốn loại bỏ trùng lắp ta dùng DISTINCT
45
Các hàm thống kê trong lệnh SELECT
HAVING
46
Ví dụ 6.13 Dùng hàm COUNT(*)
FROM PropertyForRent
WHERE rent > 350;
47
Ví dụ 6.14 Dùng COUNT(DISTINCT)
48
Ví dụ 6.15 Dùng COUNT và SUM
49
Ví dụ 6.16 Dùng MIN, MAX, AVG
MAX(salary) AS max,
AVG(salary) AS avg
FROM Staff;
50
Lệnh SELECT có GROUP BY
hàng)
§ Nội dung sau SELECT và GROUP BY có liên
quan mật thiết với nhau: mỗi thành phần sau
SELECT phải là 1 giá trị đơn trên từng nhóm
dl, sau SELECT có thể là:
Tên các cột
Các hàm thống kê
Các hằng số
Biểu thức cấu thành từ các phần vừa kể trên
51
Lệnh SELECT có GROUP BY
53
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
54
Ví dụ 6.17 Dùng GROUP BY
Ví dụ 6.18 Dùng HAVING
56
Ví dụ 6.18 Dùng HAVING
Ví dụ 6.19 Dùng truy vấn con
57
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
58
Ví dụ 6.19 Dùng truy vấn con
Ví dụ 6.20 Dùng truy vấn con và hàm thống
kê
59
Ví dụ 6.20 Dùng truy vấn con và hàm thống
kê
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
60
Ví dụ 6.21 TRUY VẤN CON LỒNG NHAU,
sử dụng IN
Lập DS tài sản được quản lý bởi nhân viên chi nhánh tại '163
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
Main St'.
SELECT propertyNo, street, city, postcode, type, rooms, rent
FROM PropertyForRent
WHERE staffNo IN
(SELECT staffNo
FROM Staff
WHERE branchNo =
(SELECT branchNo
FROM Branch
WHERE street = '163 Main St'));
61
Ví dụ 6.21 TRUY VẤN CON LỒNG NHAU,
sử dụng IN
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
62
ANY và ALL
65
Ví dụ 6.23 Dùng ALL
67
Ví dụ 6.23 Dùng ALL
PHÉP TOÁN TẬP HỢP
Định nghĩa
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
• Quan hệ là một tập hợp, giữa hai quan hệ có các phép toán
tập hợp như phép hợp, phép giao, và phép trừ
• Hai quan hệ được gọi là khả hợp, nếu có cùng số thuộc tính,
và cùng miền giá trị cho từng cặp thuộc tính tương ứng
Chú ý
• Các bộ dữ liệu trùng nhau bị loại bỏ ra khỏi kết quả của các
phép toán tập hợp
• Lược đồ của quan hệ kết quả là lược đồ của quan hệ đứng
trước trong phép toán
PHÉP HỘI
Định nghĩa
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
Ví dụ
Định nghĩa
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
Ví dụ
Định nghĩa
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
Ví dụ
có tài sản.
(SELECT city
FROM Branch
WHERE city IS NOT NULL) UNION
(SELECT city
FROM PropertyForRent
WHERE city IS NOT NULL);
72
Ví dụ 6.25 Dùng phép hội UNION
Hay:
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
(SELECT *
FROM Branch
WHERE city IS NOT NULL)
UNION CORRESPONDING BY city
(SELECT *
FROM PropertyForRent
WHERE city IS NOT NULL);
73
Ví dụ 6.26 Dùng phép giao INTERSECT
74
Ví dụ 6.27 Dùng phép giao INTERSECT
§ Hay:
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
75
Ví dụ 6.27 Dùng phép giao INTERSECT
SELECT b.city
FROM Branch b PropertyForRent p
WHERE b.city = p.city;
§ Hay:
SELECT DISTINCT city FROM Branch b
WHERE EXISTS
(SELECT * FROM PropertyForRent p
WHERE p.city = b.city);
76
Ví dụ 6.28 Dùng phép trừ EXCEPT
77
Ví dụ 6.29 Dùng phép trừ EXCEPT
78
DEPENDENT PROJECT EMPLOYEE DEPARTMENT
DName
ESSN
PNumber
PName
ESSN
EName
DNumber
DName BÀI TẬP
DSex PLocation ESalary mgrSSN
DBirthdate DNum ESex mgrStartdate
DRelationship EBirthdate
EStartdate
DEPLOCATION
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
WORKSON DNum
DNum
ESSN supervisorSSN
DLocation
PNum
workHours
80
Truy vấn trên nhiều bảng
đề FROM.
81
Ví dụ 6.30 Phép kết đơn giản
82
Ví dụ 6.31 Phép kết đơn giản
83
Dùng phép kết với lệnh JOIN
84
Ví dụ 6.32 Kết 3 bảng
85
Ví dụ 6.33 Kết 3 bảng
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
86
Ví dụ 6.34 Nhóm nhiều cột
87
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
88
Ví dụ 6.34 Nhóm nhiều cột
Câu lệnh SQL thực hiện phép tích Đề-
các
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
89
Phép kết ngoài
90
Phép kết ngoài
91
Ví dụ 6.35 Phép kết ngoài
92
Ví dụ 6.36 Phép kết ngoài bên phải
với thông tin các tài sản (liệt kê tất cả các tài
sản)
SELECT b.*, p.*
FROM Branch1 b RIGHT JOIN
PropertyForRent1 p ON b.bCity = p.pCity;
93
Ví dụ 6.37 Phép kết ngoài đầy đủ
94
EXISTS và NOT EXISTS
London.
96
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
97
Ví dụ 6.38 Truy vấn dùng EXISTS
Ví dụ 6.38 Truy vấn dùng EXISTS
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
98
DEPENDENT PROJECT EMPLOYEE DEPARTMENT
BÀI TẬP
DName PNumber ESSN DNumber
ESSN PName EName DName
DSex PLocation ESalary mgrSSN
DBirthdate DNum ESex mgrStartdate
DRelationship EBirthdate
EStartdate
DEPLOCATION
WORKSON DNum
DNum
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
ESSN supervisorSSN
DLocation
PNum
workHours
1. Liệt kê danh sách nhân viên vào làm sau nhân viên có tên là
‘An’
2. Tìm những nhân viên không có thân nhân nào.
3. Liệt kê danh sách các nhân viên có mức lương lớn hơn lương
của người quản lý của họ.
4. Liệt kê danh sách nhân viên có mức lương cao hơn mức
lương trung bình của phòng ban mà nhân viên đó làm việc.
5. Liệt kê danh sách nhân viên có lương lớn hơn mức lương
trung bình của phòng IT hoặc Kế toán.
Ví dụ 6.39 Dùng lệnh INSERT INTO
… VALUES…
100
Ví dụ 6.39 Dùng lệnh INSERT
INTO… VALUES…
101
Dùng lệnh INSERT INTO… SELECT…
102
Ví dụ 6.39 Dùng lệnh INSERT
INTO… SELECT…
103
Ví dụ 6.39 Dùng lệnh INSERT
INTO… SELECT…
104
Ví dụ 6.39 Dùng lệnh INSERT
INTO… SELECT…
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
105
Lệnh sửa dữ liệu UPDATE …SET…
UPDATE TênBảng
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
106
Ví dụ 6.40 Lệnh sửa dữ liệu UPDATE…
SET…
UPDATE Staff
SET salary = salary*1.03;
107
Ví dụ 6.40 Lệnh sửa dữ liệu UPDATE…
SET…
UPDATE Staff
SET position = 'Manager', salary = 18000
WHERE staffNo = 'SG14';
108
Lệnh xóa các hàng dữ liệu DELETE
[WHERE ĐiềuKiệnLọcTìmDL]
109
Ví dụ 6.41/42 Lệnh xóa các hàng dữ
liệu DELETE
110
DEPENDENT PROJECT EMPLOYEE DEPARTMENT
DName
ESSN
PNumber
PName
ESSN
EName
DNumber
DName BÀI TẬP
DSex PLocation ESalary mgrSSN
DBirthdate DNum ESex mgrStartdate
DRelationship EBirthdate
EStartdate
DEPLOCATION
Cơ sở dữ liệu – Ngôn ngữ thao tác dữ liệu
WORKSON DNum
DNum
ESSN supervisorSSN
DLocation
PNum
workHours
1. Lập danh sách các nhân viên có tổng số giờ làm việc lớn hơn
100 giờ
2. Với các nhân viên có người quản lý tên An, tăng lương lên 10%
3. Tạo câu truy vấn tạo ra một table mới có tên Top5NV. Bảng này
liệt kê danh sách top 5 nhân viên tham gia nhiều dự án khác
nhau nhất.