Ở phần trƣớc đã đề cập đến phƣơng pháp sử dụng phép nối trong và phép nối ngoài trong truy vấn SQL. Nhƣ đã trình bày, điều kiện của phép nối trong câu lệnh đƣợc chỉ định trong mệnh đề WHERE thông qua các biểu thức so sánh giữa các bảng tham gia truy vấn.
Chuẩn SQL2 (SQL-92) đƣa ra một cách khác để biểu diễn cho phép nối, trong cách biểu diễn này, điều kiện của phép nối không đƣợc chỉ định trong mệnh đề WHERE mà đƣợc chỉ định ngay trong mệnh đề FROM của câu lệnh. Cách sử dụng phép nối này cho phép ta biểu diễn phép nối cũng nhƣ điều kiện nối đƣợc rõ ràng, đặc biệt là trong trƣờng hợp phép nối đƣợc thực hiện trên ba bảng trở lên.
Phép nối trong
Điều kiện để thực hiện phép nối trong đƣợc chỉ định trong mệnh đề FROM theo cú pháp nhƣ sau:
tên_bảng_1 [INNER] JOIN tên_bảng_2 ON điều_kiện_nối
Ví dụ 2.31: Để hiển thị họ tên và ngày sinh của các sinh viên lớp Tin K24, thay vì sử
dụng câu lệnh:
SELECT hodem,ten,ngaysinh FROM sinhvien,lop
WHERE tenlop='Tin K24' AND sinhvien.malop=lop.malop ta có thể sử dụng câu lệnh nhƣ sau:
SELECT hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE tenlop='Tin K24'
Phép nối ngoài
SQL2 cung cấp các phép nối ngoài sau đây: Phép nối ngoài trái (LEFT OUTER JOIN) Phép nối ngoài phải (RIGHT OUTER JOIN) Phép nối ngoài đầy đủ (FULL OUTER JOIN)
Cũng tƣơng tự nhƣ phép nối trong, điều kiện của phép nối ngoài cũng đƣợc chỉ định ngay trong mệnh đề FROM theo cú pháp:
tên_bảng_1 LEFT|RIGHT|FULL [OUTER] JOIN tên_bảng_2 ON điều_kiện_nối
Ví dụ 2.32: Giả sử ta có hai bảng dữ liệu nhƣ sau:
Bảng DONVI Bảng NHANVIEN
Phép nối ngoài trái giữa hai bảng NHANVIEN và DONVI đƣợc biểu diễn bởi câu
lệnh:
SELECT *
FROM nhanvien LEFT OUTER JOIN donvi ON nhanvien.madv=donvi.madv
có kết quả là:
Câu lệnh: SELECT *
FROM nhanvien RIGHT OUTER JOIN donvi ON nhanvien.madv=donvi.madv
thực hiện phép nối ngoài phải giữa hai bảng NHANVIEN và DONVI, và có kết quả là:
Nếu phép nối ngoài trái (tƣơng ứng phải) hiển thị trong kết quả truy vấn cả những dòng
dữ liệu không thoả điều kiện nối của bảng bên trái (tƣơng ứng phải) trong phép nối thì phép nối ngoài đầy đủ hiển thị trong kết quả truy vấn cả những dòng dữ liệu không thoả điều kiện nối của cả hai bảng tham gia vào phép nối.
Ví dụ 2.33: Với hai bảng NHANVIEN và DONVI nhƣ ở trên, câu lệnh SELECT *
FROM nhanvien FULL OUTER JOIN donvi ON nhanvien.madv=donvi.madv
Thực hiện phép nối trên nhiều bảng
Một đặc điểm nổi bật của SQL2 là cho phép biểu diễn phép nối trên nhiều bảng dữ liệu một cách rõ ràng. Thứ tự thực hiện phép nối giữa các bảng đƣợc xác định theo nghĩa kết quả của phép nối này đƣợc sử dụng trong một phép nối khác.
Ví dụ 2.34: Câu lệnh dƣới đây hiển thị họ tên và ngày sinh của các sinh viên thuộc
Khoa Công nghệ Thông tin
SELECT hodem,ten,ngaysinh FROM (sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop) INNER JOIN khoa
ON lop.makhoa=khoa.makhoa
WHERE tenkhoa=N'Khoa công nghệ thông tin'
Trong câu lệnh trên, thứ tự thực hiện phép nối giữa các bảng đƣợc chỉ định rõ ràng:
phép nối giữa hai bảng sinhvien và lop đƣợc thực hiện trƣớc và kết quả của phép nối
này lại tiếp tục đƣợc nối với bảng khoa.