220 likes | 482 Views
SQL SERVER. Truy vấn nâng cao. Nội dung. Truy vấn lồng nhau Sử dụng lượng từ trong truy vấn Truy vấn hợp Truy vấn sử dụng cube, rollup trong mệnh đề Group by. Truy vấn lồng. Ví dụ 1 : Đưa ra danh sách họ tên các nhân viên làm việc ở phòng kinh doanh hoặc phòng kỹ thuật?. Select hoten
E N D
SQL SERVER Truy vấn nâng cao
Nội dung • Truy vấn lồng nhau • Sử dụng lượng từ trong truy vấn • Truy vấn hợp • Truy vấn sử dụng cube, rollup trong mệnh đề Group by
Truy vấn lồng Ví dụ 1: Đưa ra danh sách họ tên các nhân viên làm việc ở phòng kinh doanh hoặc phòng kỹ thuật? • Select hoten • From NHANVIEN NV • Inner join PHONG P • On NV.MAPHONG = P.MAPHONG • Where Tenphong in ( “Kinh doanh”, “Kỹ thuật”)
… … … Truy vấn lồng … …
Truy vấn lồng nhau Vídụ 1: Đưaradanhsáchcácnhânviênlàmviệc ở phòngkinhdoanhhoặckỹthuật? • Select hoten • From NHANVIEN • Where Maphong in (Select Maphong • From PHONG • Where tenphong in (‘Kinh doanh’, ‘Kỹ thuật’))
IN … (KDA, KTA) … … Truy vấn lồng
3000000 Truy vấn lồng Ví dụ 2: Cho biết danh sách các nhân viên có lương lớn nhất?
Truy vấn lồng Ví dụ 2: Cho biết họ tên các nhân viên có lương lớn nhất? • Select hoten • From NHANVIEN • Where luong = • (Select max(luong)From NHANVIEN )
Truy vấn lồng Ví dụ 3: Đưa ra danh sách các nhân viên có lương lớn hơn lương mọi nhân viên làm ở phòng Kinh doanh? • Select * • From NHANVIEN Where luong >(Select max(luong) • From NHANVIEN WhereMaphong in (SelectMaphong • FromPhong • WhereTenphong = ‘Kinhdoanh’))
Sử dụng lượng từ trong truy vấn • Lượng từ Exists (tồn tại) Where Exists (<Tập hợp| truy vấn con>) True: nếu tập hợp khác rỗng False: ngược lại
Sử dụng lượng từ trong truy vấn Ví dụ 4: Cho biết danh sách các nhân viên đã học ít nhất một ngoại ngữ? • Select * From NHANVIEN nv • WhereExists(Select * From TDNN td • Wherenv.Manv=td.Manv)
Sử dụng lượng từ trong truy vấn • Lượng từ All Where <Tên thuộc tính> <Phép so sánh> All (<Tập hợp giá trị | truy vấn con> ) TRUE:khi một giá trị của thuộc tính thỏa mãn phép so sánh với mọi phần tử trong tập hợp giá trị (hoặc tập giá trị do truy vấn con trả ra). FALSE: Ngược lại
Sử dụng các lượng từ trong truy vấn Ví dụ 5: Cho biết danh sách họ tên các nhân viên có lương lớn nhất? • Select * • From NHANVIEN • Where luong >= • ALL (Select luong • From NHANVIEN )
Sử dụng lượng từ trong truy vấn Ví dụ 6: Đưa ra danh sách các nhân viên có lương lớn hơn lương mọi nhân viên làm ở phòng Kinh doanh? • Select * • From NHANVIEN Where luong >= ALL (Select luong • From NHANVIEN Where Maphong in (Select Maphong • From Phong • Where Tenphong = ‘Kinh doanh’)) (2500000,2600000,27000000,16000000, 2000000) (‘KDA’)
Sử dụng lượng từ trong truy vấn Vídụ 6: Đưaratênphòngcónhiềunhânviênnhất? (‘Ky Thuat’) • Select Tenphong • From PHONG WhereMaphongin (SelectMaphong • From NHANVIEN • Group byMaphong • Having count (*) >= ALL (Select count(*) • From NHANVIEN Group byMaphong)) (‘KTA’) (4,6,9) 4, 6, 9
Sử dụng lượng từ trong truy vấn • Lượngtừany | some WHERE <Tênthuộctính> <Phép so sánh> Any | Some (<Tậpgiátrị| Truyvấn con>) TRUE: khimộtgiátrịcủathuộctínhthỏamãnphép so sánhvớiítnhấtmộtphầntửtrongtậphợpgiátrị (hoặctậpgiátrị do truyvấn con trảra). FALSE: Ngượclại
Sử dụng lượng từ trong truy vấn Ví dụ 7: Cho biết các nhân viên có lương lớn hơn ít nhất một nhân viên phòng kinh doanh? • Select * • From NHANVIEN Where luong > ANY (Select luong • From NHANVIEN Where Maphong in (Select Maphong • From Phong • Where Tenphong = ‘Kinh doanh’)) (2500000,2600000,27000000,16000000, 2000000)
Truy vấn hợp Cú pháp: { < query specification > | ( < query expression > ) } UNION[ALL] < query specification | ( < query expression > ) [ UNION [ ALL ] < query specification | ( < query expression > ) [ ...n ] ]
Truy vấn hợp Ví dụ 8: Cho biết danh sách mã nhân viên, họ tên các nhân viên học ngoại ngữ mã ‘01’ hoặc mã ‘03’ ? • Select Manv, Hoten From NHANVIEN nv, TDNN td • Where nv.Manv = td.Manv and Mann =‘01’ • Union all • Select Manv, Hoten From NHANVIEN nv, TDNN td • Where nv.Manv = td.Manv and Mann =‘03’
Truy vấn hợp Chú ý: • Số lượng, thứ tự các cột phải giống nhau trong mọi truy vấn. • Kiểu dữ liệu của các cột tương ứng trong các truy vấn phải tương thích.
Truy vấn sử dụng rollup trong mệnh đề group by Selecttenphong, gioitinh, count(*) tongnv fromphong, nhanvien wherephong.maphong = nhanvien.maphong group bytenphong, gioitinhwith rollup
Truy vấn sử dụng cube trong mệnh đề group by Select tenphong, gioitinh, count(*) tongnv from phong, nhanvien where phong.maphong = nhanvien.maphong group by tenphong, gioitinh with CUBE