Trịnh Hoàng Nam, namth@buh.edu.vn 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
Trang 1SQL NÂNG CAO
CƠ SỞ DỮ LIỆU
Ths Trịnh Hoàng Nam, namth@buh.edu.vn
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
*
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
truyvấ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ụ
SELECTE.ENameAS ‘Tên nhân viên’,
S.ENameAS ‘Tên lãnh đạo trực tiếp’
FROM EMPLOYEE E, EMPLOYEE S
WHEREE.supervisorSSN=S.ESSN
Trang 2Ths Trịnh Hoàng Nam, namth@buh.edu.vn
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ànhphầ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
trongmộ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
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 ANDw.ESSN = e.ESSN
ANDe.EName = N’Lê Duy Anh’
p.*
?
Độ phức tạp của truy vấn
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
(SELECTw.PNum
FROM WORKSON w, EMPLOYEE e
WHERE w.ESSN=e ESSN
ANDe.EName= N’Lê Duy Anh’)
SELECT*
FROM PROJECT
WHEREPNumberIN
Trang 3Ths Trịnh Hoàng Nam, namth@buh.edu.vn
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
(SELECTw.PNum
FROM WORKSON w
WHERE w.ESSN IN
)
SELECT*
FROM PROJECT
WHEREPNumberIN
(SELECTe.ESSN
FROM EMPLOYEE e
WHERE e.EName= N’…’)
Ths Trịnh Hoàng Nam, namth@buh.edu.vn
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
WHERENOT EXISTS (SELECT*
FROM WOKRSON
WHEREE.ESSN=ESSN)
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
WHEREESSN NOT IN (SELECTESSN
FROM WOKRSON)
Trang 4Ths Trịnh Hoàng Nam, namth@buh.edu.vn
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
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
WHEREDNum = DNumber ANDDName=N’Phòng Nghiên cứu’
SELECTEName, ESalary
FROM EMPLOYEEJOINDEPARTMENTONDNum = DNumber
WHEREDName=N’Phòng Nghiên cứu’
BẢNG KẾT
Ví dụ
SELECTEName, ESalary
FROM EMPLOYEE, DEPARTMENT
WHEREDNum = DNumber
ANDDName=N’Phòng Nghiên cứu’
SELECTEName, ESalary
FROM EMPLOYEEJOINDEPARTMENT
ONDNum = DNumber
WHEREDName=N’Phòng Nghiên cứu’
Trang 5Ths Trịnh Hoàng Nam, namth@buh.edu.vn
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êncủ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
WHEREe.supervisorSSN = s.ESSN
SELECTe.EName as ‘Employee’, s.EName as ‘Supervisor’
FROM EMPLOYEE e JOINEMPLOYEE s
ON e.supervisorSSN = s.ESSN
Ths Trịnh Hoàng Nam, namth@buh.edu.vn
BẢNG KẾT
Ví dụ
SELECTe.EName as ‘Employee’,
s.EName as ‘Supervisor’
FROM EMPLOYEE e, EMPLOYEE s
WHEREe.supervisorSSN = s.ESSN
SELECTe.EName as ‘Employee’,
s.EName as ‘Supervisor’
FROM EMPLOYEE e JOINEMPLOYEE s
ON e.supervisorSSN = s.ESSN
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êncủ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
15bộ 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êucầu đề bài?
Ví dụ
SELECTe.EName as ‘Employee’,
s.EName as ‘Supervisor’
FROM EMPLOYEE e JOINEMPLOYEE s
ON e.supervisorSSN = s.ESSN
Trang 6Ths Trịnh Hoàng Nam, namth@buh.edu.vn
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êncủa lãnh đạo trực tiếp của họ
• Sử dụng bảng kếttrong:
• Sử dụng bảng kếtngoài
Ví dụ
SELECTe.EName as ‘Employee’, s.EName as ‘Supervisor’
FROM EMPLOYEE e JOINEMPLOYEE s
ON e.supervisorSSN = s.ESSN
SELECTe.EName as ‘Employee’, s.EName as ‘Supervisor’
FROM EMPLOYEE e LEFT JOINEMPLOYEE s
ON e.supervisorSSN = s.ESSN
Ths Trịnh Hoàng Nam, namth@buh.edu.vn
BẢNG KẾT
Ví dụ
SELECTe.EName as ‘Employee’,
s.EName as ‘Supervisor’
FROM EMPLOYEE e LEFT JOINEMPLOYEE s
ON e.supervisorSSN = s.ESSN
BẢNG KẾT
• Với mỗi dự án tại ‘TP Hồ Chí Minh’, liệt kê số hiệu dự
án,số hiệu đơn vị quản lý dự án, và tên, ngày sinh
của trưởng đơn vị quản lý dự án
Ví dụ
SELECTPNumber, DNumber, EName, EBirthdate
FROM ((PROJECTJOINDEPARTMENTONdNum=DNumber)
JOINEMPLOYEEONmgrSSN=ESSN)
WHEREPLocation= N’TP Hồ Chí Minh’
Trang 7Ths Trịnh Hoàng Nam, namth@buh.edu.vn
CÁC HÀM THỐNG KÊ TRONG SQL
• Các hàm số học được thực hiện theo từng nhóm
• Các hàm MAX, MIN, AVG, SUM thực hiện trên một thuộc tính
số học
• Hàm COUNT thực hiện trên một hoặc nhiều thuộc tính
Các hàm thống kê (kết hợp)
• Cho biết tổng lương, lương trung bình của nhân viên trong
công ty
Ví dụ
SELECTSUM(ESalary) AS ‘Tổng lương’,
AVG(ESalary) AS ‘Lương trung bình’
FROM EMPLOYEE
Ths Trịnh Hoàng Nam, namth@buh.edu.vn
CÁC HÀM THỐNG KÊ TRONG SQL
• Cho biết tổng lương, mức lương cao nhất, mức lương
thấp nhất, và của các nhân viên tham gia dự án có
mãsố là 1
Ví dụ
SELECTSUM(E.ESalary), MAX(E.ESalary), MIN(E.ESalary)
FROM (EMPLOYEE E JOINWORKSON W ONE.ESSN=W.ESSN)
WHEREW.PNUM = 1
MỆNH ĐỀ GOM NHÓM
• Gom các bộ trong quan hệ thành từng nhóm theo một
(số) thuộc tính
• Các bộ có giá trị bằng nhau tại (các) thuộc tính gom
nhómsẽ được xếp ở gần nhau
• Điều kiện để chọn các nhóm được đặt trong mệnh đề
HAVING
• Các hàm kết hợp được áp dụng cho các nhóm sau
khiđã gom
GROUP BY và HAVING trong SQL
Trang 8Ths Trịnh Hoàng Nam, namth@buh.edu.vn
MỆNH ĐỀ GOM NHÓM
• Với mỗi phòng ban hãy cho biết mã số phòng ban, số
nhân viênthuộc quyền quản lý của phòng ban đó, và
mức lương trung bình của họ
Ví dụ
SELECT DNum, COUNT(*), AVG(ESalary)
FROM EMPLOYEE
GROUP BY DNum
Ths Trịnh Hoàng Nam, namth@buh.edu.vn
MỆNH ĐỀ GOM NHÓM
• Với mỗi dự án, cho biết mã số dự án, tên dự án, số
nhân viên tham giadự án đó
Ví dụ
SELECT p PNumber, p PName, COUNT(*)
FROM PROJECT p, WORKSON w
WHERE p.PNumber = w.PNum
GROUP BY p PNumber, p.PName
MỆNH ĐỀ GOM NHÓM
• Với mỗi dự án có nhiều hơn hai nhân viên tham gia,
chobiết mã số dự án, tên dự án, và số nhân viên
tham giadự án đó
Ví dụ
SELECT p.PNumber, p.PName, COUNT(*)
FROM PROJECT p, WORKSON w
WHERE p.PNumber = w.PNum
GROUP BY p.PNumber, p.PName
HAVING COUNT(*) > 2
Trang 9Ths Trịnh Hoàng Nam, namth@buh.edu.vn
CÂU TRUY VẤN SQL TỔNG QUÁT
Công thức chung của câu truy vấn SQL
SELECT <danh sách thuộc tính, hàm kết hợp>
FROM <danh sách quan hệ>
[ WHERE <điều kiện trên bộ>]
[ GROUP BY <các thuộc tính gom nhóm>]
[ HAVING <điều kiện trên nhóm>]
[ ORDER BY <các thuộc tính sắp xếp>]