I. Truy vấn con ?II. Cú pháp III. Các quy tắc trong truy vấn conIV. Thứ tự thực hiện truy vấn conV. Các dạng truy vấn conVI. Phân loại truy vấn conVII. Sử dụng chuỗi kí tự trong kết quảI. Truy vấn con ?II. Cú pháp III. Các quy tắc trong truy vấn conIV. Thứ tự thực hiện truy vấn conV. Các dạng truy vấn conVI. Phân loại truy vấn conVII. Sử dụng chuỗi kí tự trong kết quả
Trang 1BÀI BÁO CÁO
CHỦ ĐỀ: Truy Vấn Con Và Sử Dụng Chuỗi Kí Tự Trong Kết Quả
Môn: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Trang 2Danh sách nhóm 4
Trang 3Nội dung:
I Truy vấn con ?
II Cú pháp III Các quy tắc trong truy vấn con
IV Thứ tự thực hiện truy vấn con
V Các dạng truy vấn con
VI Phân loại truy vấn con
VII Sử dụng chuỗi kí tự trong kết quả
Trang 4I Truy vấn con ?
• Truy vấn con là một lệnh SELECT xuất hiện trong một lenh SELECT khác hoặc trong các lệnh UPDATE, DELETE và trả kết quả trung gian Truy vấn con còn được gọi là truy vấn lồng.
• Số mức lồng của các truy vấn con trong một truy vấn là 255.
• Khi thực hiện câu lệnh SQL có truy vấn con, câu truy vấn con sẽ được thực thi trước, sau đó mới đến câu truy vấn bên ngoài.
Trang 5II Cú pháp
Các truy vấn con thường xuyên được sử dụng với lệnh SELECT Cú pháp cơ bản của truy vấn con với lệnh SELECT là như sau:
• SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
Truy vấn cha
Truy vấn con
Trang 6III Các quy tắc trong truy vấn con
• Các truy vấn con phải được bao trong các dấu ngoặc đơn
• Truy vấn đơn trị nếu không có một hàng nào được trả về thì sẽ là giá trị NULL; nếu có nhiều hơn một hang được trả về thì sẽ gây ra lỗi
• Mệnh đề SELECT của truy vấn con phải chứa tên các cột, biểu thức trừ truy vấn con được sữ dụng từ khóa EXISTS Các cột trong mệnh đề SELECT truy vấn con phải tương ứng với các cột trong mệnh đề điều kiện của truy vấn ngoài
• Khi một truy vấn con là một trong hai toán hạng của phép toán so sánh, thì truy vấn con phải ở bên phải của phép toán so sánh
Trang 7• Đối với truy vấn con đơn hàng, các phép toán quan hệ ( =, <>.<=, >=,…) có thể được sử dụng trong điều kiện truy vấn ngoài.
• Đối với truy vấn con đa hàng, các phép toán quan hệ ( =, <>.<=, >=,…) không thể sử dụng trong điều kiện truy vấn ngoài, nhưng có thể sử dụng các phép toán IN, ALL, ANY/SOME
• Các truy vấn con luôn luôn được thực hiện từ truy vấn trong cùng đến các truy vấn ngoài cùng, ngoại trừ chúng là các truy vấn con tương quan.
Trang 8IV Thứ tự thực hiện truy vấn con
1 Trước tiên, truy vấn con được thực hiện Truy vấn con trả về một giá trị hoặc một tập các giá trị
cho truy vấn cha.
2 Sau đó, truy vấn cha được thực hiện dựa vào kết quả trả về của truy vấn con.
3 Cuối cùng, truy vấn cha được thực hiện Quá trình thực hiện bắt đầu từ truy vấn con trong cùng
dần đến truy cha.
Trang 9Tìm tên của những nhân viên có lương đạt trên mức lương trung bình của tất cả các nhân viên
SELECT ho_ten , luong FROM nhan_vien WHERE luong >
(SELECT AVG(luong) FROM nhan_vien);
Trước tiên truy vấn sẽ thực hiện “SELECT AVG(luong) FROM” nhan_vien để tìm tổng lương của tất cả nhân viên (giả sử là 500) Rồi sau đó thực hiện truy vấn cha, tức là liệt kê các nhân viên có lương lớn hơn 500
SELECT ho_ten , luong FROM nhan_vien WHERE luong > 500
Trang 10V Các dạng truy vấn con
• Truy vấn con đơn hàng: trả về một hoặc nhiều cột và một hàng Thường được sử dụng khi cần lấy về nhiều giá trị Trường hơp chỉ cho về một giá trị (một cột một hàng) được gọi là truy vấn con đơn trị.
• Truy vấn con đơn hàng –Trả về duy nhất 1 dòng –Sử dụng các toán tử so sánh một dòng
Vd:
SELECT manhanvien, tennv FROM qlns.nhanvien WHERE mucluong =
(SELECT MIN(mucluong) FROM qlns.nhanvien GROUP BY maphong)
Trang 11Truy vấn con đa hàng: trả kết quả về với nhiều cột và nhiều hàng.
Truy vấn con đa hàng
–Trả về nhiều dòng
–Sử dụng các toán tử so sánh nhiều dòng
Vd:
SELECT manhanvien, tennv, macongviec, mucluong FROM qlns.nhanvien
WHERE mucluong < ALL
( SELECT mucluong FROM qlns.nhanvien WHERE macongviec = ‘TPHONG')
AND macongviec <> ‘TPHONG';
Trang 12VI Phân loại truy vấn con
Có 2 loại truy vấn con
• Loại 1: Lồng phân cấp
Mệnh đề WHERE của truy vấn con không tham chiếu đến thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn cha Vd:
Trang 13• Loại 2: 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
VD:
Trang 14Giá trị IN, ALL, ANY, EXISTS, NOT EXISTS trong truy vấn con
Phép toán
• IN – kiểm tra sự tồn tại của một giá trị trong một tập hợp
• ALL – so sánh một giá trị với tất cả các giá trị của tập hợp.
• ANY – so sánh một giá trị với một giá trị nào đó của tập hợp.
• ALL, ANY được kết hợp với các phép toán so sánh ( = <, <=,>=, <> ).
• EXISTS - kiểm tra sự tồn tại của kết quả của một câu truy vấn.
Cú pháp:
• <tên thuộc tính> IN <truy vấn con>
• <tên thuộc tính> < phép toán so sánh> ALL <truy vấn con>
• <tên thuộc tính> <phép toán so sánh> ANY <truy vấn con>
• EXISTS <truy vấn con>
Trang 15• Tìm các nhân viên của phòng số 5 ?
SELECT * FROM nhanvien WHERE maphong IN (SELECT mapb FROM phongban WHERE mapb=5 )
• Cho biết tên nhân viên có mức lương lớn hơn lương của các nhân viên phòng số 5.
SELECT * FROM NHANVIEN WHERE Luong > ALL
( SELECT Luong FROM NHANVIEN WHERE MaPB = 5)
• Cho biết các nhân viên không tham gia các dự án mà phòng số 5 quản lý.
SELECT MaNV FROM THAMGIA WHERE MaDA NOT IN
( SELECT MaDA FROM DUAN WHERE Phg = 5)
• Tìm nhân viên không có thân nhân nào.
SELECT * FROM NHANVIEN as NV WHERE NOT EXISTS
( SELECT * FROM THANNHAN as TN WHERE TN.MaNV = NV.MaNV)
• Tìm tất cả các nhân viên làm việc ở phòng nghiên cứu.
SELECT * FROM NHANVIEN n WHERE EXISTS
( SELECT * FROM PHONGBAN p WHERE TENPHG = ‘Nghiên cứu’ and p.MAPHG = n.PHG)
Trang 16• Cú pháp:
SELECT tên cột AS tên gán FROM tên bảng;
Thông thường các cột được đặt tên không có dấu, không khoảng trống, chính vì vậy khi xuất dữ liệu người dùng sẽ khó biết được cột kết quả xuất
ra là cột gì Để dễ dàng hơn ta cần phải đặt một cái tên mới cho các cột kết quả AS có nhiệm vụ là gán cho cột một cái tên mới.
Vd:
VII Sử dụng chuỗi kí tự trong kết quả