Ví dụ Xét truy vấn sau đây: hãy cho biết tên khoa ứng với từng sinh viên.
Truy vấn trên có thể thực hiện được dùng phép tích Descartes, sau đó áp dụng thêm một một phép chọn dựa vào điều kiện MaKH = MaKhoa.
MaSV HoSV TenSV NgaySinh GioiTinh HocBong MaKH
5202 Lê Cường 21/5/1 1 Nam 200 KT 5207 Nguyễn Sơn 17/7/1 0 Nữ 800 KT 520 Ngô Hòa 16/8/1 0 Nam 200 CN 5306 Huỳnh Nga 22/3/1 2 Nữ 400 CN 5308 Phạm Trang 12/7/1 0 Nữ 800 CN
MaKhoa TenKhoa
CN Công nghệ Thông tin KT Kinh tế
MaSV HoSV TenSV NgaySinh GioiTinh HocBong MaKH MaKhoa TenKhoa
5202 Lê Cường 21/5/1 1 Nam 200 KT CN Công nghệ Thông tin 5202 Lê Cường 21/5/1 1 Nam 200 KT KT Kinh tế
5207 Nguyễn Sơn 17/7/1 0 Nữ 800 KT CN Công nghệ Thông tin 5207 Nguyễn Sơn 17/7/1 0 Nữ 800 KT KT Kinh tế
520 Ngô Hòa 16/8/1 0 Nam 200 CN CN Công nghệ Thông tin 520 Ngô Hòa 16/8/1 0 Nam 200 CN KT Kinh tế
5306 Huỳnh Nga 22/3/1 2 Nữ 400 CN CN Công nghệ Thông tin 5306 Huỳnh Nga 22/3/1 2 Nữ 400 CN KT Kinh tế
5308 Phạm Trang 12/7/1 0 Nữ 800 CN CN Công nghệ Thông tin 5308 Phạm Trang 12/7/1 0 Nữ 800 CN KT Kinh tế
2
Cách thực hiện một tích Descartes và sau đó là một phép chọn có điều kiện bằng như vậy được gọi là phép kết nối bằng.
Cú pháp:
QuanHe1 ⋈điều-kiện-bằng QuanHe2 Ví dụ trên được viết lại là:
SinhVien ⋈MaKH = MaKhoa Khoa
Trong trường hợp các thuộc tính để kết nối bằng ở cả hai quan hệ giống tên nhau thì phép kết nối bằng được gọi là phép kết nối tự nhiên. Lúc này chỉ cần viết phép toán kết nối mà không cần viết danh sách điều-kiện-bằng đi kèm.
Ví dụ Hãy cho biết tên môn học ứng với các lớp học LopHoc ⋈ MonHoc
(ngầm hiểu điều kiện bằng là thuộc tính MaMH ở cả hai quan hệ) Kết quả:
Trong quan hệ kết quả, do có 2 thuộc tính MaMH nên có hai cách xử lý:
Chỉ giữ lại một thuộc tính MaMH
Dùng tên quan hệ để phân biệt: LopHoc.MaMH và MonHoc.MaMH
MaSV HoSV TenSV NgaySinh GioiTinh HocBong MaKH MaKhoa TenKhoa
5202 Lê Cường 21/5/1 1 Nam 200 KT CN Công nghệ Thông tin 5202 Lê Cường 21/5/1 1 Nam 200 KT KT Kinh tế
5207 Nguyễn Sơn 17/7/1 0 Nữ 800 KT CN Công nghệ Thông tin 5207 Nguyễn Sơn 17/7/1 0 Nữ 800 KT KT Kinh tế
520 Ngô Hòa 16/8/1 0 Nam 200 CN CN Công nghệ Thông tin 520 Ngô Hòa 16/8/1 0 Nam 200 CN KT Kinh tế
5306 Huỳnh Nga 22/3/1 2 Nữ 400 CN CN Công nghệ Thông tin 5306 Huỳnh Nga 22/3/1 2 Nữ 400 CN KT Kinh tế
5308 Phạm Trang 12/7/1 0 Nữ 800 CN CN Công nghệ Thông tin 5308 Phạm Trang 12/7/1 0 Nữ 800 CN KT Kinh tế
MaSV HoSV TenSV NgaySinh GioiTinh HocBong MaKH MaKhoa TenKhoa
5202 Lê Cường 21/5/1 1 Nam 200 KT KT Kinh tế 5207 Nguyễn Sơn 17/7/1 0 Nữ 800 KT KT Kinh tế
520 Ngô Hòa 16/8/1 0 Nam 200 CN CN Công nghệ Thông tin 5306 Huỳnh Nga 22/3/1 2 Nữ 400 CN CN Công nghệ Thông tin 5308 Phạm Trang 12/7/1 0 Nữ 800 CN CN Công nghệ Thông tin
MaLop MaMH HocKy NamHoc GiaoVien MaMH TenMH SoTinChi
01 306 1 2010 Tuấn 306 Tin học cơ sở 2 02 403 1 2010 Nga 403 Kế toán tài chính 3 03 306 2 2011 Sơn 306 Tin học cơ sở 2 04 207 1 2010 Nam 207 Cấu trúc dữ liệu 3
2
Ví dụ Hãy cho biết MaSV, HoSV, TenSV các sinh viên có theo học những lớp do giáo viên ‘Tuấn’ giảng dạy:
MaSV, HoSV, TenSV (GiaoVien=’Tuấn’[(LopHoc ⋈ KetQua) ⋈ SinhVien])
Hoặc:
MaSV, HoSV, TenSV (GiaoVien=’Tuấn’[LopHoc ⋈ (KetQua ⋈ SinhVien)])
Hoặc:
MaSV, HoSV, TenSV ([ GiaoVien=’Tuấn’(LopHoc)] ⋈ KetQua ⋈ SinhVien)
Tuy nhiên, viết như bên dưới là không hợp lệ:
MaSV, HoSV, TenSV (GiaoVien=’Tuấn’ [LopHoc ⋈ SinhVien⋈ KetQua])
vì giữa LopHoc và SinhVien không có thuộc tính kết nối.
Ví dụ Hãy cho biết TenMH, SoTinChi, Diem của các môn học mà sinh viên có MaSV = ‘ 2 2’ đã học:
TenMH, SoTinChi, Diem ([MaSV=’5202’ (KetQua ⋈ LopHoc ⋈ MonHoc))