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 giá trị đặc biệt, không phải hằng số, 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ị Null
Các phép toán so sánh liên quan tới Null cho giá trị Unknown
Phép toán so sánh IS NULL 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 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
Đị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 thể 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 sự tham gia của
nhân viên tên ‘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 sự tham gia của
nhân viên tên ‘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 sự tham gia của
nhân viên tên ‘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 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 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
rỗng hay không
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 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 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 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 đó
tên của lãnh đạo trực tiếp của họ
Sử dụng phép nhân chéo 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 đó
tên của lãnh đạo trực tiếp của họ
Tuy nhiên, trong bảng EMPLOYEE tất cả 21 bộ với
15 bộ 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