SQL Server - Truy vấn dữ liệu từ nhiều bảng

Các loại phép kết

Kết bằng (EquiJoin)

• Kết không bằng (Non EquiJoin)

• Kết với chính mình (Self Join)

• Kết bằng mệnh đề Join

pdf26 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 15259 | Lượt tải: 1download
Tóm tắt nội dung SQL Server - Truy vấn dữ liệu từ nhiều bảng, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
1TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Truy vấn dữ liệu từ nhiều bảng
2TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lấy dữ liệu từ nhiều bảng
NHANVIEN PHONG 
…
…
3TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
• Kết bằng (EquiJoin)
• Kết không bằng (Non EquiJoin)
• Kết với chính mình (Self Join)
Các loại phép kết
• Kết bằng mệnh đề Join 
4TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Phép kết bằng
• Sử dụng điều kiện kết bằng trong mệnh 
đề WHERE
• Nếu xuất hiện tên cột trùng nhau trong 
nhiều bảng thì bắt buộc phải sử dụng 
tên bảng hoặc bí danh bảng trước tên 
cột.
SELECT bang1.cot, bang2.cot
FROM bang1, bang2
WHERE bang1.cot1 = bang2.cot2
5TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Phép kết bằng thực hiện như thế nào?
NHANVIEN PHONG 
Khóa ngoại Khóa chính
… …
6TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
SELECT nhanvien.manhanvien, nhanvien.tennv, 
 nhanvien.maphong, phong.maphong,
 phong.makhuvuc
FROM qlns.nhanvien, qlns.phong
WHERE nhanvien.maphong = phong.maphong;
Kết quả nhận được từ phép kết bằng
…
7TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
SELECT nv.manhanvien, nv.tennv, nv.maphong,
 ph.maphong, ph.makhuvuc
FROM qlns.nhanvien nv , qlns.phong ph
WHERE nv.maphong = ph.maphong;
Sử dụng bí danh cho bảng
• Đơn giản hóa các câu truy vấn khi cần sử dụng 
tên bảng cho việc truy xuất các cột.
8TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Kết nhiều hơn hai bảng
NHANVIEN KHUVUC PHONG 
• Để kết n bảng, ta cần tối thiểu n-1 phép kết. Ví dụ để kết ba 
bảng, ta cần tối thiểu hai phép kết bảng. 
…
9TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Kết không bằng
NHANVIEN LOAICONGVIEC
Mức lương của nhân viện 
phải nằm trong khoản hai 
cận trong bảng 
LOAICONGVIEC
…
10
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Kết quả từ phép kết không bằng
SELECT nv.tennv, nv.mucluong, lcv.maloaicv
FROM qlns.nhanvien nv, qlns.loaicongviec lcv
WHERE nv.mucluong 
 BETWEEN lcv.mucluong_min AND lcv.mucluong_max;
…
11
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Kết với chính mình
NHANVIEN (NHAN_VIEN) NHANVIEN (NGUOI_QUAN_LY)
Mã người quản lý (MANGUOIQUANLY) trong 
bảng NHAN_VIEN phải bằng với mã nhân viên 
(MANHANVIEN) trong bảng NGUOI_QUAN_LY
…
`
…
12
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Kết với chính mình
SELECT nvien.honv+’ ‘+nvien.tennv + N' làm việc cho ' 
 + nguoiqly.tennv as [Nhân viên và người QLý]
FROM qlns.nhanvien nvien, qlns.nhanvien nguoiqly
WHERE nvien.manguoiquanly = nguoiqly.manhanvien ;
…
13
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sử dụng mệnh đề JOIN để kết
SELECT bang1.cot, bang2.cot
FROM bang1
[CROSS JOIN bang2] |
[JOIN bang2 
 ON(bang1.ten_cot = bang2.ten_cot)] |
[LEFT|RIGHT|FULL [OUTER] JOIN bang2 
 ON (bang1.ten_cot = bang2.ten_cot) ]
14
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Cross Joins
• Mệnh đề CROSS JOIN sẽ kết mỗi dòng của bảng 1 với tất cả 
các dòng của bảng 2
Kết quả 
CROSS JOIN: 
14x8=112 rows
NHANVIEN (14 dòng) PHONG (8 rows)
…
…
15
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Mệnh đề ON trong phép kết JOIN
• Tách biệt đều kiện kết với các điều kiện 
chọn lọc dữ liệu khác.
• Các câu truy vấn trở nên dễ đọc hơn.
16
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
SELECT nv.manhanvien, nv.tennv, nv.maphong, 
 ph.maphong, ph.makhuvuc
FROM qlns.nhanvien nv JOIN qlns.phong ph
ON (nv.maphong = ph.maphong)
Sử dụng mệnh đề JOIN …ON…
…
…
17
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Kết nhiều hơn hai bảng
SELECT manhanvien, tenphong, tenkhuvuc, thanhpho
FROM qlns.nhanvien nv 
JOIN qlns.phong ph
ON ph.maphong = nv.maphong 
JOIN qlns.khuvuc kv
ON ph.makhuvuc = kv.makhuvuc
…
18
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
SELECT nv.honv, nv.tennv, nv.maphong, ph.tenphong
FROM qlns.nhanvien nv
LEFT OUTER JOIN qlns.phong ph
ON (nv.maphong = ph.maphong) 
Phép kết trái (LEFT [OUTER] JOIN)
…
19
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
SELECT nv.honv, nv.tennv, nv.maphong, ph.tenphong
FROM qlns.nhanvien nv
RIGHT OUTER JOIN qlns.phong ph
ON (nv.maphong = ph.maphong) 
Phép kết phải (RIGHT [OUTER] JOIN)
…
20
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
SELECT nv.honv, nv.tennv, nv.maphong, ph.tenphong
FROM qlns.nhanvien nv
FULL OUTER JOIN qlns.phong ph
ON (nv.maphong = ph.maphong) 
Phép kết đầy đủ (FULL [OUTER] JOIN)
…
21
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Thực hành
• Viết các câu truy vấn kết các bảng bằng mệnh đề WHERE.
• Câu truy vấn kết với chính mình
• Kết hai bảng bằng Cross Join
• Kết các bảng sử dụng JOIN, LEFT|RIGHT|FULL JOINT
22
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sử dụng biểu thức CASE trong 
truy vấn
23
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Biểu thức CASE dạng đơn giản 
CASE Biểu_thức
WHEN Giá_trị_1 THEN Biểu_thức_kết_quả_1
[WHEN Giá_trị_2 THEN Biểu_thức_kết_quả_2
...]
[ ELSE Biểu_thức_kết_quả_N]
END
• Giá trị 1, giá trị 2
− Các giá trị cụ thể để so sánh bằng (=) với biểu thức
• Biểu thức kết quả 1, biểu thức kết quả 2
− Biểu thức sẽ được trả về khi việc so sánh của biểu thức 
bằng với các giá trị so sánh tương ứng
24
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ
SELECT LOAI=
 CASE LEFT(MAVTU, 2)
 WHEN 'DD' THEN 'Đầu DVD'
 WHEN 'VD' THEN 'Đầu VCD'
 WHEN 'TV' THEN 'Tivi'
 WHEN 'TL' THEN 'Tủ lạnh'
 WHEN 'BI' THEN 'Bia lon'
 WHEN 'LO' THEN 'Loa thùng'
 ELSE 'Chưa phân loại'
 END, 
 MAVTU, TENVTU, DVTINH
FROM VATTU
ORDER BY LEFT(MAVTU, 2)
25
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Biểu thức CASE dạng tìm kiếm
CASE 
WHEN Bt_logic_1 THEN Biểu_thức_kết_quả_1
[WHEN Bt_logic_2 THEN Biểu_thức_kết_quả_2
...]
[ ELSE Biểu_thức_kết_quả_N]
END
• Biểu thức logic1, biểu thức logic2
− Các biểu thức luận lý dùng để thực hiện các phép so sánh 
trong biểu thức CASE.
• Biểu thức kết quả 1, biểu thức kết quả 2
− Biểu thức sẽ được trả về khi một trong các biểu thức luận lý so 
sánh có kết quả là đúng.
26
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ
SELECT GHICHU=
 CASE 
 WHEN PHANTRAM <20 THEN 'Lời ít'
 WHEN PHANTRAM BETWEEN 20 AND 40 THEN 'Lời nhiều'
 ELSE 'Rất lời'
 END, 
 TENVTU, DVTINH, PHANTRAM 
FROM VATTU
ORDER BY PHANTRAM 

File đính kèm:

  • pdfSQL Server - Truy vấn dữ liệu từ nhiều bảng.pdf
Tài liệu liên quan