You are on page 1of 18

WELCOME MESSAGES

Insert your subtitle here


Chương 4: Ngôn ngữ truy vấn SQL

Phần 2- Truy vấn trên nhiều quan hệ

page 2
Nội dung
1- Các phép kết
+ Phép kết nội
+ Phép kết ngoài
2. Câu truy vấn con
3. Truy vấn con tương quan
4. Các toán tử so sánh sử dụng với truy vấn con

page 3
1. Các truy vấn trên nhiều quan hệ (tt.):
Phép kết nội:
Select <tên cột 1>, <tên cột 2>, …
From < quan hệ1>, <quan hệ 2>
Where <điều kiện kết>
Ví dụ. NHANVIEN(maNV char(5), Hoten nvarchar(20), MaPB int, Luong real)
PHONGBAN(MaPB int, TenPB nvarchar(20))
Tìm MaNV, Họ tên và tên phòng ban của những nhân viên làm việc
cho phòng có mã số 5

SELECT MaNV, HoTen, TenPB


FROM NHANVIEN, PHONGBAN
WHERE NHANVIEN.MaPB=PHONGBAN.MaPB
AND NHANVIEN.MaPB = 5;
page 4
1. Các Truy vấn trên nhiều quan hệ (tt.):
Phép kết nội:

Select <tên cột 1>, <tên cột 2>, …


From < quan hệ1> inner join <quan hệ 2> on <điều kiện kết>
Ví dụ. NHANVIEN(maNV char(5), Hoten nvarchar(20), MaPB int, Luong real)
PHONGBAN(MaPB int, TenPB nvarchar(20))

Tìm MaNV, Họ tên và tên phòng ban của những nhân viên làm việc
cho phòng có mã số 5

Select MaNV, HoTen, TenPB


From NHANVIEN inner join PHONGBAN
on NHANVIEN.MaPB=PHONGBAN.MaPB
Where NHANVIEN.MaPB = 5;
page 5
1. Các truy vấn trên nhiều quan hệ (tt.):
Phép kết ngoài:

Select <tên cột 1>, <tên cột 2>, …


From < quan hệ1> Left/Right/Full Outer join <quan hệ 2>
on <điều kiện kết>
Ví dụ. NHANVIEN(maNV char(5), Hoten nvarchar(20), MaPB int, Luong real)
PHONGBAN(MaPB int, TenPB nvarchar(20), MaTrphg char(5))
Tìm MaNV, Họ tên nhân viên không là Trưởng phòng ban

Select MaNV, HoTen, TenPB


From NHANVIEN Left outer join PHONGBAN
on NHANVIEN.MaNV=PHONGBAN.MaTrphg
Where MaTrphg is null;
page 6
1. Các truy vấn toán trên nhiều quan hệ (tt.):
Đặt bí danh cho thuộc tính/quan hệ:
Select <tên cột 1> as <Tên cột 1mới>, <tên cột 2> as <Tên cột 2 mới>, …
From <quan hệ1> <tên qhệ1 mới>, <quan hệ2> as < tên qhệ2 mới >
Where <điều kiện kết>
Ví dụ. NHANVIEN(maNV char(5), Hoten nvarchar(20), MaPB int, Luong real)
PHONGBAN(MaPB int, TenPB nvarchar(20), MaTrphg char(5))
Tìm MaNV, Họ tên và tên phòng ban của những nhân viên thuộc
phòng có mã số là 5
SELECT MaNV as [Mã nhân viên], HoTen, TenPB as TenPhongban
FROM NHANVIEN nv, PHONGBAN as pb
WHERE nv.MaPB=pb.MaPB
AND nv.MaPB = 5;
page 7
2. Câu truy vấn con:
Câu truy vấn con là câu truy vấn được lồng trong một
câu truy vấn khác
Câu truy vấn con có thể xuất hiện trong mệnh đề FROM
(đóng vai trò của 1 bảng), WHERE hoặc HAVING
Truy vấn con có kết quả trả về là một giá trị
Truy vấn con có kết quả trả về là một bảng

page 8
2. Câu truy vấn con (tt.):
Truy vấn con trong mệnh đề Where
Vd. NHANVIEN(MaNV char(5), Hoten nvarchar(20), MaPB int, Luong real)
PHONGBAN(MaPB int, TenPB nvarchar(20), MaTrphg char(5))
1. Tìm MaNV, Họ tên của những người có lương cao nhất

SELECT MaNV, Hoten


FROM NHANVIEN
WHERE Luong = (SELECTSELECTMAX(Luong)
MAX(Luong)
2.Liệt kê Họ tên và lương của những người là Trưởng phòng
FROM
FROM NHANVIEN);
NHANVIEN

SELECT Hoten, luong


FROM NHANVIEN
WHERE MaNV IN (SELECT
SELECTMaTrphg
MaTrphg
FROM
FROM PHONGBAN);
PHONGBAN
page 9
2. Câu truy vấn con (tt.):
Truy vấn con trong mệnh đề From
Vd. NHANVIEN(MaNV char(5), Hoten nvarchar(20), MaPB int, Luong real)
PHONGBAN(MaPB int, TenPB nvarchar(20), MaTrphg char(5))
Liệt kê Họ tên và lương của những người là Trưởng phòng

SELECT MaNV, Hoten


FROM NHANVIEN nv, (SELECT
SELECT MaTrphg
MaTrphg
FROM
FROM PHONGBAN)
PHONGBAN Q
WHERE nv.MaNV = Q.MaTrphg;

page 10
2. Câu truy vấn con (tt.):
Truy vấn con trong mệnh đề having
Vd. NHANVIEN(MaNV char(5), Hoten nvarchar(20), MaPB int, Luong real)
PHONGBAN(MaPB int, TenPB nvarchar(20), MaTrphg char(5))
Liệt kê các mã phòng ban có lương trung bình của nhân viên cao hơn lương của tất cả nhân viên
phòng có mã là 5.

SELECT MaPB
FROM NHANVIEN
Group by MaPB
Having Avg(luong) > ALL (SELECT
SELECT Luong
FROM NHANVIEN
WHERE MaPB = 5)
5
page 11
2. Câu truy vấn con (tt.):
Thứ tự thực hiện truy vấn lồng nhau

- Thực hiện truy vấn con (trả về một giá trị hoặc một tập giá
trị)
- Thực hiện truy vấn ngoài dựa vào kết quả trả về của truy
vấn con

page 12
3. Truy vấn con tương quan:
Cho phép so sánh giữa thuộc tính của quan hệ bên trong truy vấn con với thuộc tính của quan hệ
trong truy vấn bao bên ngoài
Vd. Tìm MaNV, Họ tên của người có lương cao nhất của mỗi phòng

SELECT MaNV, HoTen


FROM NHANVIEN AS NV1
WHERE Luong = (SELECT MAX(Luong)
FROM NHANVIEN AS NV2
WHERE NV2.MaPB = NV1.MaPB);
NV1 NV2
MaN HoTen MaPB Luong MaN HoTen MaPB Luong
V V
11110 Trọng 02 10000 11110 Trọng 02 10000
11111 Duy 01 8000 11111 Duy 01 8000
11112 Khang 01 9000 11112 Khang 01 9000
11113 Bình 02 7000 11113 Bình 02 7000 page 13
4. Các toán tử so sánh sử dụng với truy vấn con:
ALL/ANY được dùng để so sánh một thuộc tính trong truy vấn
ngoài với một tập giá trị được trả về bởi câu truy vấn con
ALL (subquery): sẽ là TRUE nếu nó thỏa mãn với tất cả giá trị được
trả về bởi câu truy vấn con
ANY (subquery): sẽ là TRUE nếu nó thỏa mãn với ít nhất một giá trị
trong tập giá trị được trả về bởi câu truy vấn con
Nếu truy vấn con trả về kết quả rỗng, điều kiện ALL sẽ là TRUE, ANY
sẽ là FALSE
Vd. Tìm những người có lương cao hơn lương của tất cả nhân viên phòng có maPB là 5

SELECT maNV, Hoten


FROM NHANVIEN
WHERE Luong > ALL (SELECT
SELECTLuong
LuongFROM
FROMNHANVIEN
NHANVIENWHERE
WHEREMaPB
MaPB=5);
=5
page 14
4. Các toán tử so sánh sử dụng với truy vấn con (tt.):
EXISTS được dùng để kiểm tra kết quả của câu truy vấn con
tương quan là rỗng hay không rỗng. Nếu kết quả của câu truy
vấn là rỗng thì EXISTS trả về False, ngược lại nó trả về True.
NOT EXISTS
Các thuộc tính trong mệnh đề SELECT của câu truy vấn con
không quan trọng (có thể dùng *)

page 15
4. Các toán tử so sánh sử dụng với truy vấn con (tt.):
Vd. NHANVIEN(MaNV, Hoten, MaPB, Luong)
THANNHAN(MaNV, HotenTN, Quanhe)

Tìm Mã và họ tên của những người có thân nhân


SELECT MaNV, Hoten
FROM NHANVIEN
WHERE EXISTS (SELECT *
FROM THANNHAN
WHERE NHANVIEN.MaNV = THANNHAN.MaNV);

page 16
Hết phần 2 chương 4

Số 1, Võ Văn Ngân, Thủ Đức, TPHCM

sonnt@hcmute.edu.vn

+84918648899
3. Truy vấn con tương quan (tt.):
Thứ tự thực hiện truy vấn con tương quan
- Lấy dòng được xét (từ truy vấn bên ngoài)
- Thực hiện truy vấn con bằng cách sử dụng giá trị của dòng được
chọn
- Sử dụng giá trị được trả về từ truy vấn con để xét điều kiện có thỏa
mãn hay không
- Lặp lại cho đến khi nào không còn dòng nào của truy vấn ngoài
cùng

page 18

You might also like