Truy vấn đơn giảnSELECT FROM WHERE Xét lược đồ quan hệ: SINHVIENMaSV, HoTen, Phai, MaLop Cho biết Mã và họ tên những sinh viên lớp ‘07DHTH’?. Truy vấn đơn giảnXét bảng dữ liệu MONH
Trang 1LOGO Ngôn ngữ truy vấn SQL
Trang 3Ngôn ngữ SQL là gì?
SQL (Structured Query Language) là ngôn ngữchuẩn của nhiều HQT CSDL, gồm các câu lệnhđịnh nghĩa dữ liệu, truy vấn dữ liệu và cập nhật
dữ liệu
Còn được gọi là SEQUEL (Structured EnglishQuery Language), được phát triển bởi IBM(1970)
Trang 5 Bảng là bag quan hệ là set.
Trang 6[HAVING <biểu_thức_điều_kiện_nhóm>]
[ORDER BY tên_cột_thứ_tự | số_thứ_tự_cột | biểu thức] [ASC | DESC]
Trang 7Truy vấn đơn giản
SELECT <các cột yêu cầu>
FROM <d/s bảng liên quan>
WHERE <điều kiện dòng>
Xét lược đồ quan hệ:
SINHVIEN(MaSV, HoTen, Phai, MaLop)
Cho biết Mã và họ tên những sinh viên lớp
‘07DHTH’ ?
• Yêu cầu: Mã, họ tên
• Bảng liên quan: SINHVIEN
• Điều kiện: lớp ’07DHTH’
SELECT MaSV, HoTen FROM SINHVIEN
WHERE MaLop= ’07DHTH ’
Trang 8Truy vấn đơn giản
Xét bảng dữ liệu MONHOC như sau:
Liệt kê danh sách mã và tên những môn học
có số tín chỉ >2.
SELECT MaMH, TenMH
From MONHOC
Where SoTC>2
Trang 9SINHVIEN(MaSV, HoTen, Tuoi, MaLop)
Biểu thức kết nối 2 quan hệ trên là:
SINHVIEN.MaLop=LOP.MaLop
Khoá ngoại Khoá chính
Trang 13Mệnh đề GROUP BY
GROUP BY được sử dụng để gom nhóm các bộ có cùng thuộc tính trong quan hệ, mỗi nhóm bao gồm tập hợp các bộ có cùng giá trị trên các thuộc tính gom nhóm.
Tập thuộc tính trong
mệnh đề SELECT
Tập thuộc tính trong mệnh đề GROUP BY
Trang 15Mệnh đề HAVING
Sử dụng cho điều kiện lọc trên các nhóm.
Cú pháp: HAVING BiểuThứcĐiềuKiện
Ví dụ: Liệt kê danh sách những lớp (MaLop)
có trên 2 sinh viên.
SELECT MaLopFROM SINHVIENGROUP BY MaLopHAVING Count(MaSV)>2
Lưu ý: Count(MaSV) Count(*)
Trang 16Truy vấn lồng
Là dạng thức mà một truy vấn này được nhúng vào trong một truy vấn khác.
Trang 17 Các câu truy vấn con trong cùng một mệnh
đề WHERE được kết hợp bằng phép nối logic.
Mệnh đề WHERE của câu truy vấn cha
<biểu thức> < so sánh tập hợp > <truy vấn con>
Trang 18Truy vấn lồng
Mệnh đề WHERE của câu truy vấn cha
<biểu thức> < so sánh tập hợp > <truy vấn con>
So sánh tập hợp thường đi cùng với một
số toán tử
• IN, NOT IN
• ALL
• ANY hoặc SOME
Kiểm tra sự tồn tại
• EXISTS
• NOT EXISTS
Trang 19đề FROM ở truy vấn cha.
Khi thực hiện, câu truy vấn con sẽ được thực hiện trước.
Lồng tương quan
Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một thuộc tính của các quan hệ trong mệnh
đề FROM ở truy vấn cha.
Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần, mỗi lần tương ứng với một bộ của
Trang 20Ví dụ truy vấn lồng phân cấp
Hiển thị các nhân viên ở phòng ‘Nghiên cứu’
SELECT MANV, TENNV
Trang 23FROM NHANVIEN NV1, NHANVIEN NV2
WHERE NV1.LUONG > NV2.LUONG AND
NV2.PHG=4
Trang 25WHERE SOTC>=ALL(SELECT SOTC
FROM MONHOC) >=ALL(2,3)
>=3
Trang 26Ví dụ truy vấn lồng tương quan
Cho biết mã và tên những môn học mà chưa
có sinh viên nào học?
SELECT MAMH, TENMH
FROM MONHOC
WHERE NOT EXISTS(SELECT * FROM KETQUA
WHERE MONHOC.MAMH=KETQUA.MAMH)
KETQUA
Trang 27Ví dụ truy vấn lồng tương quan
Tìm nhân viên có người thân cùng tên và cùnggiới tính
SELECT *
FROM NHANVIEN NV
WHERE EXISTS (
SELECT * FROM THANNHAN TN WHERE NV.MANV=TN.MA_NVIEN
AND NV.TENNV=TN.TENTN
AND NV.PHAI=TN.PHAI )
Trang 28Ví dụ truy vấn lồng tương quan
Tìm những nhân viên không có thân nhân nào
Trang 29Ví dụ truy vấn lồng tương quan
Tìm những nhân viên có lương lớn hơn lươngcủa ít nhất một nhân viên phòng 4
Trang 30Ví dụ truy vấn lồng tương quan
Tìm 3 nhân viên có lương cao nhất
Trang 31Nhận xét IN và EXISTS
IN
<tên cột> IN <câu truy vấn con>
Thuộc tính ở mệnh đề SELECT của truy vấncon phải có cùng kiểu dữ liệu với thuộc tính ởmệnh đề WHERE của truy vấn cha
EXISTS
Không cần có thuộc tính, hằng số hay biểuthức nào khác đứng trước
Không nhất thiết liệt kê tên thuộc tính ở mệnh
đề SELECT của truy vấn con
Những câu truy vấn có = ANY hay IN đều cóthể chuyển thành câu truy vấn có EXISTS
Trang 32Phép chia trong SQL
r s là tập các giá trị ai trong r sao cho không
có giá trị bi nào trong s làm cho bộ (ai, bi) không tồn tại trong r.
Trang 33WHERE R2.D=S.D AND R2.E=S.E
AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C ))
Trang 36Bài tập
Cho lược đồ cơ sở dữ liệu như sau:
KHOA(MaKhoa, TenKhoa) LOP(MaLop, TenLop, MaKhoa) SINHVIEN(MaSV, HoTen, NgaySinh, Phai, MaLop) MONHOC(MaMH, TenMH, SoTC)
KETQUA(MaSV, MaMH, Diem) Hãy viết các câu truy vấn sau bằng ngôn ngữ SQL:
1 Cho biết mã và tên những lớp thuộc khoa có tên CNTT
2 Cho biết mã và họ tên những sinh viên phái nam thuộc
lớp có mã lớp là ‘L001’
3 Cho biết mã và họ tên những sinh viên phái nam thuộc
lớp có mã lớp là ‘L001’ hoặc phái nữ học lớp có mã là
Trang 37Bài tập (tt)
4 Cho biết mã và họ tên những sinh viên phái nam thuộc
lớp có tên lớp là ‘08 Đại học tin học’.
5 Liệt kê danh sách những môn học (MaMH) do sinh viên
8 Liệt kê danh sách những sinh viên (MaSV, HoTen) có
học môn với mã môn là ‘mh001’.
9 Cho biết mã khoa, tên khoa và số lớp trong từng khoa.
10 Mã và tên những khoa nào có số lớp trên 5.
Trang 38Bài tập (tt)
11 Mã và tên những khoa có nhiều lớp nhất.
12 Cho biết mã sinh viên và số môn học của từng sinh viên.
13 Cho biết mã, họ tên và số môn học của từng sinh viên.
14 Cho biết mã và họ tên những sinh viên học trên 5 môn học.
15 Cho biết mã, họ tên những sinh viên học nhiều môn nhất.
16 Cho biết mã môn học và số sinh viên học của từng môn.
17 Cho biết mã môn học, tên môn học và số lượng sinh viên