bài 4.2 - sql (structured query language) - sql server

26
1 1 TRƯỜ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

Upload: hoc-lap-trinh-web

Post on 20-Jun-2015

3.468 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

11

TRƯỜ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

Page 2: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

22

TRƯỜ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ảngNHANVIEN PHONG

Page 3: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

33

TRƯỜ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

Page 4: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

44

TRƯỜ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.cotFROM bang1, bang2WHERE bang1.cot1 = bang2.cot2

Page 5: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

55

TRƯỜ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

… …

Page 6: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

66

TRƯỜ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.makhuvucFROM qlns.nhanvien, qlns.phongWHERE nhanvien.maphong = phong.maphong;

Kết quả nhận được từ phép kết bằng

Page 7: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

77

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.makhuvucFROM qlns.nhanvien nv , qlns.phong phWHERE 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.

Page 8: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

88

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ảngNHANVIEN 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.

Page 9: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

99

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Kết không bằngNHANVIEN 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

Page 10: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1010

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ằngSELECT nv.tennv, nv.mucluong, lcv.maloaicvFROM qlns.nhanvien nv, qlns.loaicongviec lcvWHERE nv.mucluong BETWEEN lcv.mucluong_min AND lcv.mucluong_max;

Page 11: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1111

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ìnhNHANVIEN (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

…`

Page 12: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1212

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ìnhSELECT 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 nguoiqlyWHERE nvien.manguoiquanly = nguoiqly.manhanvien ;

Page 13: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1313

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.cotFROM 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) ]

Page 14: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1414

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)

Page 15: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1515

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.

Page 16: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1616

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.makhuvucFROM qlns.nhanvien nv JOIN qlns.phong phON (nv.maphong = ph.maphong)

Sử dụng mệnh đề JOIN …ON…

Page 17: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1717

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ảngSELECT manhanvien, tenphong, tenkhuvuc, thanhphoFROM qlns.nhanvien nv JOIN qlns.phong phON ph.maphong = nv.maphong JOIN qlns.khuvuc kvON ph.makhuvuc = kv.makhuvuc

Page 18: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1818

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.tenphongFROM qlns.nhanvien nvLEFT OUTER JOIN qlns.phong phON (nv.maphong = ph.maphong)

Phép kết trái (LEFT [OUTER] JOIN)

Page 19: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

1919

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.tenphongFROM qlns.nhanvien nvRIGHT OUTER JOIN qlns.phong phON (nv.maphong = ph.maphong)

Phép kết phải (RIGHT [OUTER] JOIN)

Page 20: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

2020

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.tenphongFROM qlns.nhanvien nvFULL OUTER JOIN qlns.phong phON (nv.maphong = ph.maphong)

Phép kết đầy đủ (FULL [OUTER] JOIN)

Page 21: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

2121

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

Page 22: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

2222

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

Page 23: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

2323

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 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

Page 24: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

2424

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Ví dụ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, DVTINHFROM VATTUORDER BY LEFT(MAVTU, 2)

Page 25: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

2525

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ếmBiểu thức CASE dạng tìm kiếmCASE

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.

Page 26: Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server

2626

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Ví dụ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 VATTUORDER BY PHANTRAM