
9/3/2018
1
SQL NÂNG CAO
CƠ SỞ DỮ LIỆU
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
GIÁ TRỊ NULL
•Null là giá trị đặc biệt, không phải là hằng số, mà là giá trị không
biết
Định nghĩa
•Các phép toán số học liên quan tới Null cho giá trị là Null
•Các phép toán so sánh liên quan tới Null cho giá trị là Unknown
•Phép toán so sánh IS NULL và IS NOT NULL
Đặc trưng
• Liệt kê danh sách nhân viên không có lãnh đạo trực tiếp
Ví dụ
SELECT
FROM
WHERE
EMPLOYEE
supervisorSSN IS NULL
*
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
TOÁN TỬ AS
• Được sử dụng để đổi tên cột hiển thị trong phần kết
quả của câu truy vấn mà không ảnh hưởng đến bản
thân các quan hệ trong mệnh đề WHERE của câu
truy vấn đó
Toán tử AS trong SQL
• Liệt kê danh sách nhân viên và tên lãnh đạo trực tiếp
Ví dụ
SELECT E.EName AS ‘Tên nhân viên’,
S.EName AS ‘Tên lãnh đạo trực tiếp’
FROM EMPLOYEE E, EMPLOYEE S
WHERE E.supervisorSSN=S.ESSN

9/3/2018
2
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
TRUY VẤN LỒNG
•Câu lệnh truy vấn chứa câu lệnh truy vấn khác bên
trong các thành phần của nó
Định nghĩa
• Kết quả trả về của câu truy vấn này được sử dụng
trong một mệnh đề của câu truy vấn khác
• Kết quả trả về của một câu truy vấn có thể là một giá
trị đơn hoặc một quan hệ với nhiều bộ, nhiều thuộc
tính
• Một số toán tử so sánh: IN, NOT IN, ANY, SOME, ALL
Đặc trưng
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
TRUY VẤN LỒNG
•Cho biết danh sách các dự án có sự tham gia của
nhân viên tên là ‘Lê Duy Anh’
Ví dụ
SELECT
FROM
WHERE
PROJECT p, EMPLOYEE e, WORKSON w
p.ProNum = w.PNum AND w.ESSN = e.ESSN
AND e.EName = N’Lê Duy Anh’
p.*
?
Độ phức tạp của truy vấn
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
TRUY VẤN LỒNG
•Cho biết danh sách các dự án có sự tham gia của
nhân viên tên là ‘Lê Duy Anh’
Ví dụ
?
Độ phức tạp của truy vấn
(SELECT w.PNum
FROM WORKSON w, EMPLOYEE e
WHERE w.ESSN=e. ESSN
AND e.EName = N’Lê Duy Anh’)
SELECT *
FROM PROJECT
WHERE PNumber IN

9/3/2018
3
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
TRUY VẤN LỒNG
•Cho biết danh sách các dự án có sự tham gia của
nhân viên tên là ‘Lê Duy Anh’
Ví dụ
?
Độ phức tạp của truy vấn
(SELECT w.PNum
FROM WORKSON w
WHERE w.ESSN IN
)
SELECT *
FROM PROJECT
WHERE PNumber IN
(SELECT e.ESSN
FROM EMPLOYEE e
WHERE e.EName = N’…’)
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
TRUY VẤN LỒNG
• Được sử dụng để kiểm tra kết quả của câu truy vấn lồng
xem có rỗng hay không
Hàm EXISTS trong SQL
• Cho biết tên các nhân viên chưa tham gia bất kỳ dự án nào
của công ty
Ví dụ
SELECTEName
FROM EMPLOYEE E
WHERE NOT EXISTS (SELECT *
FROM WOKRSON
WHERE E.ESSN=ESSN)
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
TRUY VẤN LỒNG
• Được sử dụng để kiểm tra kết quả của câu truy vấn lồng xem
có rỗng hay không
•Có thể được viết lại bằng cách sử dụng toán tử so sánh IN
Hàm EXISTS trong SQL
• Cho biết tên các nhân viên chưa tham gia bất kỳ dự án nào
của công ty
Ví dụ
SELECTEName
FROM EMPLOYEE
WHERE ESSN NOT IN (SELECT ESSN
FROM WOKRSON)

9/3/2018
4
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
BẢNG KẾT TRONG SQL
•Phép kết thể hiện thông qua việc sử dụng
nhiều quan hệ trong mệnh đề FROM và các
điều kiện kết tương ứng trong mệnh đề
WHERE
•Phép kết được thực hiện ngay trong mệnh
đề FROM thông qua việc sử dụng các toán
tử INNER JOIN, OUTER JOIN đi kèm điều
kiện kết tương ứng
Giới thiệu
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
BẢNG KẾT
• Hiển thị tên và mức lương của các nhân viên trong
phòng ‘Nghiên cứu’
•Sử dụng phép nhân chéo và phép chọn:
•Sử dụng bảng kết:
Ví dụ
SELECTEName, ESalary
FROM EMPLOYEE, DEPARTMENT
WHERE DNum = DNumber AND DName=N’Phòng Nghiên cứu’
SELECTEName, ESalary
FROM EMPLOYEE JOIN DEPARTMENT ON DNum =DNumber
WHERE DName=N’Phòng Nghiên cứu’
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
BẢNG KẾT
Ví dụ
SELECTEName, ESalary
FROM EMPLOYEE, DEPARTMENT
WHERE DNum = DNumber
AND DName=N’Phòng Nghiên cứu’
SELECTEName, ESalary
FROM EMPLOYEE JOIN DEPARTMENT
ON DNum =DNumber
WHERE DName=N’Phòng Nghiên cứu’

9/3/2018
5
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
BẢNG KẾT
• Với mỗi nhân viên hãy hiển thị tên của người đó và
tên của lãnh đạo trực tiếp của họ
•Sử dụng phép nhân chéo và phép chọn:
•Sử dụng bảng kết:
Ví dụ
SELECTe.EName as ‘Employee’, s.EName as ‘Supervisor’
FROM EMPLOYEE e, EMPLOYEE s
WHERE e.supervisorSSN = s.ESSN
SELECT e.EName as ‘Employee’, s.EName as ‘Supervisor’
FROM EMPLOYEE e JOIN EMPLOYEE s
ON e.supervisorSSN = s.ESSN
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
BẢNG KẾT
Ví dụ
SELECTe.EName as ‘Employee’,
s.EName as ‘Supervisor’
FROM EMPLOYEE e, EMPLOYEE s
WHERE e.supervisorSSN = s.ESSN
SELECT e.EName as ‘Employee’,
s.EName as ‘Supervisor’
FROM EMPLOYEE e JOIN EMPLOYEE s
ON e.supervisorSSN = s.ESSN
Ths. Trịnh Hoàng Nam, namth@buh.edu.vn
C ơ s ở d ữ l i ệ u – T ổ n g q u a n h ệ t h ố n g c ơ s ở d ữ l i ệ u
BẢNG KẾT
• Với mỗi nhân viên hãy hiển thị tên của người đó và
tên của lãnh đạo trực tiếp của họ
•Tuy nhiên, trong bảng EMPLOYEE có tất cả 21 bộ với
15 bộ có giá trị khác NULL tại thuộc tính supervisor
ứng với 15 bộ trả về bởi câu truy vấn
•Làm thế nào để hiển thị hết đầy đủ 21 bộ của quan hệ
EMPLOYEE theo yêu cầu đề bài?
Ví dụ
SELECT e.EName as ‘Employee’,
s.EName as ‘Supervisor’
FROM EMPLOYEE e JOIN EMPLOYEE s
ON e.supervisorSSN = s.ESSN