Chuyển tới nội dung chính

Chương 3: Đại số quan hệ

Các phép toán thao tác và truy vấn dữ liệu trong mô hình dữ liệu quan hệ. Là nền tảng logic cho ngôn ngữ truy vấn trong các hệ quản trị cơ sở dữ liệu hiện đại.


1. Tổng quan về đại số quan hệ

1.1. Dữ liệu dạng quan hệ và truy vấn

Trong mô hình dữ liệu quan hệ, thông tin được tổ chức dưới dạng các bảng.
Mỗi bảng được xem là một quan hệ. Một quan hệ gồm nhiều bộ, mỗi bộ biểu diễn thông tin về một đối tượng cụ thể.
Các cột trong bảng là các thuộc tính, mỗi thuộc tính có tên và miền giá trị xác định.

Ví dụ, một hệ thống quản lý nhân viên có thể sử dụng các bảng sau:

  • PHONGBAN(MaPhong,TenPhong,TruongPhong,NgayNhanChuc)\text{PHONGBAN}(\underline{MaPhong}, TenPhong, TruongPhong, NgayNhanChuc)
  • NHANVIEN(MaNV,HoTen,GioiTinh,DiaChi,NgaySinh,MaPhong,MaNVQL)\text{NHANVIEN}(\underline{MaNV}, HoTen, GioiTinh, DiaChi, NgaySinh, MaPhong, MaNVQL)
  • DEAN(MaDA,TenDA,DiaDiem,MaPhong)\text{DEAN}(\underline{MaDA}, TenDA, DiaDiem, MaPhong)
  • THAMGIA(MaNV,MaDA,SoGioLamViec)\text{THAMGIA}(\underline{MaNV, MaDA}, SoGioLamViec)

Từ các bảng này, người dùng cần trả lời nhiều truy vấn, chẳng hạn:

  • Nhân viên đang làm việc ở phòng ban nào
  • Nhân viên nào tham gia đề án có địa điểm tại TP.HCM
  • Nhân viên nào không tham gia bất kỳ đề án nào

Mỗi câu hỏi như vậy là một truy vấn trên mô hình dữ liệu. Để mô tả và xử lý truy vấn một cách rõ ràng và nhất quán, ta cần một hệ thống phép toán có tính hình thức, không phụ thuộc vào cách cài đặt bên dưới. Đại số quan hệ được xây dựng để đáp ứng nhu cầu này.

1.2. Đại số quan hệ là gì

Đại số quan hệ là một hệ thống phép toán chính thức, được xây dựng dựa trên lý thuyết tập hợp, được sử dụng để thao tác và truy vấn dữ liệu trong mô hình dữ liệu quan hệ.

Hệ thống này cung cấp một khuôn khổ toán học để mô tả các bước xử lý dữ liệu của một truy vấn một cách chính xác và tường minh.
Nhờ đó, nó đóng vai trò là cơ sở lý thuyết cho các ngôn ngữ truy vấn có cấu trúc như SQL và là nền tảng tối ưu hóa truy vấn.

Đặc điểm cốt lõi:

  • Đầu vào: Một hoặc nhiều quan hệ (bảng) đã tồn tại.
  • Đầu ra: Một quan hệ mới (bảng) được tạo ra từ kết quả của phép toán.

Đặc tính này cho phép kết hợp các phép toán với nhau một cách tuần tự (xem kết quả của một phép toán là đầu vào cho phép toán tiếp theo), giúp xây dựng các biểu thức truy vẫn phức tạp một cách có hệ thống.

1.3. Phân loại các phép toán

Các phép toán trong đại số quan hệ được chia thành hai nhóm chính:

1.3.1. Các phép toán tập hợp

Các phép toán có nguồn gốc từ lý thuyết tập hợp, gồm:

  • Phép hợp (\cup)
  • Phép giao (\cap)
  • Phép hiệu (-)
  • Tích Descartes (×\times)

Để áp dụng các phép toán này, các quan hệ tham gia cần phải tương thích về mặc hợp (khả hợp), nghĩa là chúng phải có cùng số lượng thuộc tính và các miền giá trị tương ứng của các thuộc tính phải giống nhau.
Điều kiện áp dụng: Các quan hệ phải tương thích về lược đồ.

1.3.2. Các phép toán quan hệ

Các phép toán chuyên biệt cho mô hình quan hệ, gồm:

  • Phép chọn (σ\sigma)
  • Phép chiếu (π\pi)
  • Phép gán (\leftarrow)
  • Phép kết (\bowtie)
  • Phép chia (÷\div)

2. Các phép toán cơ sở

Trong quá trình xây dựng và diễn đạt truy vấn, ba thao tác xuất hiện với tần suất cao nhất gồm lựa chọn các bộ thỏa điều kiện, trích xuất một tập thuộc tính cụ thể và tạo lập các quan hệ trung gian phục vụ những bước xử lý tiếp theo. Đại số quan hệ mô hình hóa ba thao tác này thông qua ba phép toán cơ sở là Phép chọn, Phép chiếuPhép gán.

Phép chọn xác định tập bộ được giữ lại dựa trên một tiêu chí logic. Phép chiếu xác lập tập thuộc tính xuất hiện trong quan hệ đầu ra và loại bỏ các thuộc tính không cần thiết. Phép gán tạo tên cho những quan hệ trung gian, qua đó giúp tổ chức biểu thức truy vấn theo các giai đoạn rõ ràng và tăng mức độ mô tả của toàn bộ quá trình xử lý.

Ba phép toán cơ sở này đóng vai trò khởi tạo cho phần lớn biểu thức đại số quan hệ. Chúng xác định phạm vi dữ liệu được đưa vào xử lý và tạo nền tảng để xây dựng các phép toán phức tạp hơn.

2.1. Lược đồ ví dụ

Để bảo đảm tính thống nhất trong các ví dụ, ta sử dụng quan hệ minh họa:

HOCVIEN(MaHV, HoTen, GioiTinh, NamSinh, QueQuan, MaLop)HOCVIEN(\underline{MaHV},\ HoTen,\ GioiTinh,\ NamSinh,\ QueQuan,\ MaLop)

Ý nghĩa các thuộc tính:

  • MaHVMaHV: mã số sinh viên, phân biệt duy nhất từng sinh viên
  • HoTenHoTen: họ và tên đầy đủ
  • GioiTinhGioiTinh: nhận giá trị 'Nam' hoặc 'Nu'
  • NamSinhNamSinh: năm sinh, biểu diễn dưới dạng số nguyên
  • QueQuanQueQuan: địa phương nơi sinh
  • MaLopMaLop: mã lớp sinh hoạt

Một thể hiện minh họa của quan hệ:

MaHVHoTenGioiTinhNamSinhQueQuanMaLop
HV01Nguyen AnNam2005Ha NoiL01
HV02Le SangNam2003Gia LaiL02
HV03Ngo HienNu2007Ha NoiL01
HV04Mai NgocNu2005TPHCML02

2.2. Phép chọn

2.2.1. Định nghĩa

Phép chọn là phép toán nhằm xác định tập bộ thỏa mãn một điều kiện logic quy định trước. Đối với mỗi bộ trong quan hệ, điều kiện được đánh giá và bộ chỉ được giữ lại trong kết quả khi điều kiện đúng.

Trong ví dụ, nếu ta cần xác định các học viên có quê quán tại Hà Nội, thì phép chọn thực hiện việc đối chiếu giá trị của thuộc tính QueQuan trong từng bộ và chọn ra những bộ tương ứng.

Về lược đồ, phép chọn không làm thay đổi tập thuộc tính của quan hệ. Quan hệ kết quả giữ nguyên cấu trúc cột, chỉ thay đổi về số lượng bộ.

2.2.2. Ký hiệu và cú pháp

Ký hiệu: chữ cái Hy Lạp sigma σ\sigma.

Dạng tổng quát:

σp(R)\sigma_{p}(\text{R})

Trong đó:

  • R\text{R} là tên quan hệ đầu vào
  • pp là điều kiện lựa chọn, là một biểu thức logic nói về các thuộc tính của R\text{R}

Điều kiện đơn giản thường ở dạng so sánh, ví dụ:

  • GioiTinh=‘Nam’GioiTinh = \text{`Nam'}
  • QueQuan‘Ha Noi’QueQuan \ne \text{`Ha Noi'}
  • NamSinh>2005NamSinh > 2005

Điều kiện phức là điều kiện ghép nhiều điều kiện đơn, dùng phép nối logic:

  • p1p2p_1 \land p_2 nghĩa là p1p_1p2p_2 cùng đúng
  • p1p2p_1 \lor p_2 nghĩa là ít nhất một trong hai điều kiện đúng
  • ¬p\lnot p hoặc p\overline{p} là phủ định của pp

2.2.3. Ví dụ minh họa

Dựa trên quan hệ HOCVIEN\text{HOCVIEN} ở trên.

Ví dụ 1. Chọn theo một thuộc tính

Truy vấn: Lấy danh sách học viên quê ‘Ha Noi’\text{`Ha Noi'} .

Biểu thức:

σQueQuan=‘Ha Noi’(HOCVIEN)\sigma_{QueQuan = \text{`Ha Noi'}}(\text{HOCVIEN})

Kết quả gồm các bộ thỏa điều kiện QueQuan = 'Ha Noi':

MaHVHoTenGioiTinhNamSinhQueQuanMaLop
HV01Nguyen AnNam2005Ha NoiL01
HV03Ngo HienNu2007Ha NoiL01

Ví dụ 2. Chọn theo hai điều kiện đồng thời

Truy vấn: Lấy học viên nam, sinh từ năm 20052005 trở về sau.

Biểu thức:

σGioiTinh=‘Nam’NamSinh2005(HOCVIEN)\sigma_{GioiTinh= \text{`Nam'} \land NamSinh \ge 2005}(\text{HOCVIEN})

Kết quả:

MaHVHoTenGioiTinhNamSinhQueQuanMaLop
HV01Nguyen AnNam2005Ha NoiL01

Ví dụ 3. Chọn theo điều kiện rời rạc

Truy vấn: Lấy học viên quê ‘TPHCM’\text{`TPHCM'} hoặc ‘Gia Lai’\text{`Gia Lai'}.

Biểu thức:

σQueQuan=‘TPHCM’QueQuan=‘Gia Lai’(HOCVIEN)\sigma_{QueQuan = \text{`TPHCM'} \lor QueQuan = \text{`Gia Lai'}}(\text{HOCVIEN})

Kết quả bao gồm các bộ thỏa một trong hai điều kiện:

MaHVHoTenGioiTinhNamSinhQueQuanMaLop
HV02Le SangNam2003Gia LaiL02
HV04Mai NgocNu2005TPHCML02

2.3. Phép chiếu

2.3.1. Định nghĩa

Phép chiếu (π\pi) là phép toán nhằm xác định tập thuộc tính cần xuất hiện trong kết quả truy vấn.
Nói cách khác, phép chiếu loại bỏ các thuộc tính không cần thiết và chỉ giữ lại cấu trúc thông tin liên quan.

Nếu có nhiều bộ trùng nhau hoàn toàn trên tập thuộc tính được chiếu, đại số quan hệ giữ lại một bộ duy nhất, vì quan hệ được hiểu là tập hợp, không phải danh sách, nên không có hai bộ hoàn toàn giống nhau.

2.3.2. Ký hiệu và cú pháp

Ký hiệu: Chữ cái Hy Lạp pi (π\pi)

Dạng tổng quát:

πA1,A2,,Ak(R)\pi_{A_1, A_2, \ldots, A_k}(\text{R})

Trong đó:

  • A1,A2,,AkA_1, A_2,\ldots , A_k là các thuộc tính cần xuất hiện trong kết quả
  • Danh sách này phải là tập hợp con của lược đồ quan hệ R\text{R}
  • Thứ tự thuộc tính trong danh sách chiếu quyết định thứ tự cột trong quan hệ đầu ra

2.3.3. Ví dụ minh họa

Tiếp tục từ quan hệ HOCVIEN\text{HOCVIEN}:

Ví dụ 1. Lấy mã số và họ tên

Truy vấn: Lấy mã số và họ tên tất cả học viên.

Biểu thức:

πMaHV,HoTen(HOCVIEN)\pi_{MaHV, HoTen}(\text{HOCVIEN})
MaHVHoTen
HV01Nguyen An
HV02Le Sang
HV03Ngo Hien
HV04Mai Ngoc

Kết quả gồm hai cột MSSVMSSVHoTenHoTen, các cột khác không xuất hiện nữa.

Ví dụ 2. Lấy danh sách quê quán

Truy vấn: Liệt kê tất cả quê quán có học viên đang học.

Biểu thức:

πQueQuan(HOCVIEN)\pi_{QueQuan}(\text{HOCVIEN})
QueQuan
Ha Noi
Gia Lai
TPHCM

Ta thấy dữ liệu gốc có hai học viên quê ‘Ha Noi’\text{`Ha Noi'}, nhưng phép chiếu chỉ giữ lại một dòng.
Phép chiếu gộp những bộ trùng lặp trên tập thuộc tính đang giữ lại.

2.4. Kết hợp phép chọn và phép chiếu

Cấu trúc thường gặp:

πA(σp(R))\pi_A(\sigma_p(\text{R}))

Ví dụ: Liệt kê mã số và họ tên học viên nữ của lớp ‘L01’\text{`L01'}, sinh từ 20042004 trở về sau.

Biểu thức đầy đủ:

πMaHV,HoTen(σGioiTinh=‘Nu’MaLop=‘L01’NamSinh2004(HOCVIEN))\pi_{MaHV, HoTen}\big(\sigma_{GioiTinh = \text{`Nu'} \land MaLop = \text{`L01'} \land NamSinh \ge 2004}(\text{HOCVIEN})\big)

2.5. Phép gán

2.5.1. Định nghĩa

Phép gán (\gets) là phép toán dùng để định danh một quan hệ được tạo ra từ một biểu thức đại số quan hệ.

Trong truy vấn gồm nhiều bước xử lý, việc gán tên cho các quan hệ trung gian:

  • Tăng tính mạch lạc
  • Giảm độ phức tạp
  • Cho phép tái sử dụng kết quả trong các bước tiếp theo

Thông qua phép gán, một biểu thức phức tạp có thể được chia thành nhiều bước nhỏ, mỗi bước xử lý một phần truy vấn và sản sinh quan hệ trung gian có ý nghĩa rõ ràng.

2.5.2. Ký hiệu

Ký hiệu tổng quát:

TE\text{T} \gets \text{E}

Trong đó:

  • T\text{T} là tên quan hệ mới
  • E\text{E} là biểu thức đại số quan hệ
  • T\text{T} lưu kết quả của E\text{E} và được xem như một quan hệ độc lập trong các bước tiếp theo

Phép gán không thay đổi bản chất của biểu thức E\text{E} mà chỉ bổ sung một lớp mô tả để tổ chức truy vấn.

2.5.3. Ví dụ minh họa

Ví dụ. Gán kết quả lọc học viên vào quan hệ mới

Câu hỏi: Tạo quan hệ chứa danh sách học viên thuộc lớp ‘L01’\text{`L01'}.

Biểu thức:

HV_L01σMaLop=‘L01’(HOCVIEN)\text{HV\_L01} \gets \sigma_{MaLop = \text{`L01'}}(\text{HOCVIEN})

Quan hệ HV_L01\text{HV\_L01} trở thành một đơn vị dữ liệu độc lập và có thể được dùng trong các bước tiếp theo mà không cần lặp lại biểu thức lọc.


3. Các phép toán tập hợp

3.1. Khái quát

Trong đại số quan hệ, ngoài các phép chọn và chiếu, nhóm phép toán mang tính tập hợp đóng vai trò quan trọng khi cần kết hợp hoặc đối chiếu hai quan hệ có cùng cấu trúc.

Các phép toán trong nhóm này bao gồm hợp, giao, hiệutích Đề các.
Nhóm phép toán này dựa trực tiếp trên cơ sở lý thuyết tập hợp, nhưng áp dụng cho các quan hệ vốn là tập hợp các bộ có cấu trúc.

Một đặc điểm quan trọng là các phép hợp, giao và hiệu chỉ hợp lệ khi hai quan hệ tham gia có cùng lược đồ hoặc tương thích về lược đồ.
Tích Đề các không yêu cầu điều kiện này, nhưng tạo ra một quan hệ có số lượng thuộc tính bằng tổng số thuộc tính của hai quan hệ tham gia.

3.2. Điều kiện cần để áp dụng các phép hợp, giao và hiệu

Các phép hợp, giao và hiệu chỉ hợp lệ khi hai quan hệ tham gia phép toán có "lược đồ tương thích", hay khả hợp.

Điều này có nghĩa là:

  • Hai quan hệ phải có cùng số lượng thuộc tính
  • Tên và thứ tự của các thuộc tính tương ứng phải trùng khớp
  • Miền giá trị của từng thuộc tính tương ứng phải giống nhau

Nếu các điều kiện này không được thỏa mãn, phép toán không thể thực hiện.
Khi cần, ta có thể sử dụng phép đổi tên hoặc sắp xếp lại thuộc tính để đưa hai quan hệ về cùng lược đồ.

3.3. Phép hợp

3.3.1. Định nghĩa

Phép hợp (\cup) cho phép kết hợp hai quan hệ tương thích lược đồ để tạo ra một quan hệ mới, trong đó chứa toàn bộ các bộ xuất hiện trong ít nhất một trong hai quan hệ.

Ký hiệu:

RS\text{R} \cup \text{S}

Trong đó, R\text{R}S\text{S} có cùng lược đồ.

Kết quả là một quan hệ gồm các bộ của R\text{R}, các bộ của S\text{S} và mỗi bộ xuất hiện duy nhất một lần, vì quan hệ được hiểu là tập hợp.

Phép hợp hữu ích khi truy vấn yêu cầu tập dữ liệu phủ rộng hai hoặc nhiều nguồn cùng cấu trúc.
Ví dụ: kết hợp danh sách học viên đang học cùng danh sách học viên tham gia chương trình trao đổi để tạo tập học viên thuộc phạm vi quản lý chung.

3.3.2. Ví dụ

Giả sử hai quan hệ có cùng cấu trúc:

  • HOCVIEN_A(MaHV,HoTen)\text{HOCVIEN\_A}(MaHV, HoTen)
  • HOCVIEN_B(MaHV,HoTen)\text{HOCVIEN\_B}(MaHV, HoTen)

Trong đó, mỗi quan hệ chứa danh sách sinh viên của hai lớp khác nhau.

Biểu thức:

HOCVIEN_AHOCVIEN_B\text{HOCVIEN\_A} \cup \text{HOCVIEN\_B}

Kết quả là tập sinh viên của cả hai lớp, không trùng lặp.

3.4. Phép giao

3.4.1. Định nghĩa

Phép giao (\cap) tạo ra quan hệ bao gồm những bộ xuất hiện đồng thời trong cả hai quan hệ.

Ký hiệu:

RS\text{R} \cap \text{S}

Phép giao hữu ích khi cần xác định đối tượng đáp ứng đồng thời hai điều kiện đến từ hai nguồn dữ liệu.
Ví dụ: học viên vừa nằm trong danh sách học lực giỏi vừa nằm trong danh sách xét học bổng.

3.4.2. Ví dụ

Xét hai quan hệ chứa danh sách học viên tham gia hai câu lạc bộ:

  • CLB_DOANTHANHNIEN(MaHV,HoTen)\text{CLB\_DOANTHANHNIEN}(MaHV, HoTen)
  • CLB_HOISINHVIEN(MaHV,HoTen)\text{CLB\_HOISINHVIEN}(MaHV, HoTen)

Biểu thức:

CLB_DOANTHANHNIENCLB_HOISINHVIEN\text{CLB\_DOANTHANHNIEN} \cap \text{CLB\_HOISINHVIEN}

Kết quả là danh sách học viên cùng tham gia cả hai câu lạc bộ.

3.5. Phép hiệu

3.5.1. Định nghĩa

Phép hiệu (-) xác định những bộ thuộc quan hệ thứ nhất nhưng không xuất hiện trong quan hệ thứ hai.

Ký hiệu:

RS\text{R} - \text{S}

Phép hiệu hỗ trợ nhận diện các phần tử không thuộc một tập dữ liệu khác.
Ví dụ: sinh viên chưa nộp học phí, sinh viên không đăng ký môn học.

Kết quả phụ thuộc vào thứ tự quan hệ, vì RS\text{R} - \text{S}SR\text{S} - \text{R} tạo ra hai tập dữ liệu hoàn toàn khác nhau.

3.5.2. Ví dụ

Lấy tập học viên thuộc lớp A nhưng không tham gia câu lạc bộ.

  • HOCVIEN_A(MaHV,HoTen)\text{HOCVIEN\_A}(MaHV, HoTen)
  • HOCVIEN_CLB(MaHV,HoTen)\text{HOCVIEN\_CLB}(MaHV, HoTen)

Biểu thức:

HOCVIEN_AHOCVIEN_CLB\text{HOCVIEN\_A} - \text{HOCVIEN\_CLB}

3.6. Phép tích

3.6.1. Định nghĩa

Phép tích (×\times) là phép toán kết hợp mọi bộ của R\text{R} với mọi bộ của S\text{S}, tạo ra một quan hệ mới có số lượng thuộc tính bằng tổng số thuộc tính của hai quan hệ.

Khác với ba phép toán trên, phép tích không yêu cầu hai quan hệ phải tương thích lược đồ.

Ký hiệu:

R×S\text{R} \times \text{S}

Phép tích tạo ra số lượng bộ rất lớn.
Nếu R\text{R}mm bộ và S\text{S}nn bộ thì R×S\text{R} \times \text{S}mnmn bộ

3.6.2. Ví dụ minh họa

Xét hai quan hệ:

  • LOP(MaLop,CVHT)\text{LOP}(MaLop, CVHT)
  • HOCVIEN(MaHV,HoTen,MaLop)\text{HOCVIEN}(MaHV, HoTen, MaLop)

Phép tích:

LOP×HOCVIEN\text{LOP} \times \text{HOCVIEN}

Phép tích kết hợp mọi dòng của LOP\text{LOP} với mọi dòng của HOCVIEN\text{HOCVIEN}, tạo ra các bộ phản ánh quan hệ thực giữa hai bảng.

Phép toán này chỉ có ý nghĩa khi được kết hợp với phép chọn để tạo thành các phép kết.


4. Phép kết

4.1. Giới thiệu

Trong mô hình dữ liệu quan hệ, thông tin thường được lưu trong nhiều bảng khác nhau.
Mỗi bảng mô tả một phần của dữ liệu, chẳng hạn sinh viên, lớp học hoặc môn học.
Khi trả lời các truy vấn phức tạp, người dùng phải kết hợp dữ liệu từ nhiều quan hệ.

Phép kết là phép toán quan trọng nhất cho mục đích này.
Phép kết cho phép ghép các bộ từ hai quan hệ dựa trên một điều kiện liên quan giữa chúng.
Không giống phép tích tạo ra tất cả các cặp bộ có thể, phép kết chỉ giữ lại những cặp bộ đáp ứng điều kiện kết.

Nhờ đó, phép kết mô tả chính xác cách các bảng liên hệ với nhau trong cơ sở dữ liệu.

4.2. Cấu trúc và ý nghĩa

Phép kết giữa hai quan hệ R\text{R}S\text{S} có dạng:

RpS\text{R} \mathop{\bowtie}\limits_{p} \text{S}

Trong đó pp là điều kiện kết, xác định cặp thuộc tính giữa hai quan hệ cần so sánh.

Kết quả của phép kết bao gồm:

  • Tập thuộc tính của R\text{R} ghép với tập thuộc tính của S\text{S}
  • Tập bộ được tạo thành từ các cặp bộ của R\text{R}S\text{S} thỏa mãn điều kiện kết

4.3. Các dạng phép kết thường dùng

Đại số quan hệ sử dụng nhiều dạng kết khác nhau, mỗi dạng phù hợp với một tình huống truy vấn riêng.

Bốn loại kết thường gặp gồm:

  • Kết theta
  • Kết bằng
  • Kết tự nhiên
  • Kết ngoài

Ví dụ:

Quan hệ HOCVIEN\text{HOCVIEN}

MAHVHOTENMALOP
HV01Nguyen AnL01
HV02Le SangL02
HV03Ngo HienL01
HV04Pham HuyL03
HV05Mai Ngocnull

Quan hệ LOP\text{LOP}

MALOPTENLOPCVHTSISO
L01CNTT1GV0135
L02CNTT2GV0340
L03CNTT3GV0250
L04CNTT4GV0545

Quan hệ KETQUATHI\text{KETQUATHI}

MAHVMAMHDIEM
HV01IT0047.0
HV01MA0048.5
HV02IT0048.5
HV03MA0049.0
HV06IT0046.0

4.3.1. Kết theta (Theta Join)

Kết theta là dạng tổng quát nhất.
Điều kiện kết có thể sử dụng bất kỳ phép so sánh nào:
==, \ne, <<, >>, \le, \ge.

Ký hiệu:

RθS\text{R} \mathop{\bowtie}\limits_{\theta} \text{S}

Kết theta cho phép ghép hai quan hệ dựa trên nhiều kiểu điều kiện khác nhau.

Ví dụ

Điều kiện: Lấy học viên thuộc lớp có sĩ số lớn hơn 38

Biểu thức:

HOCVIENHOCVIEN.MaLop=LOP.MaLopLOP.SiSo>38LOP\text{HOCVIEN} \mathop{\bowtie}\limits_{\substack{\text{HOCVIEN.}MaLop = \text{LOP.}MaLop \\ \land \text{LOP.}SiSo > 38}} \text{LOP}

Kết quả:

MAHVHOTENMALOPTENLOPCVHTSISO
HV02Le SangL02CNTT2GV0340
HV04Pham HuyL03CNTT3GV0250

4.3.2. Kết bằng (Equi-Join)

Kết bằng là trường hợp đặc biệt của kết theta, khi chỉ dùng phép so sánh bằng.

Ký hiệu:

RA=BS\text{R} \mathop{\bowtie}\limits_{A = B} \text{S}

Dạng kết này giữ lại cả hai thuộc tính AABB trong kết quả.

Ví dụ

Điều kiện: HOCVIEN.MaLop=LOP.MaLop\text{HOCVIEN}.MaLop = \text{LOP}.MaLop

Biểu thức:

HOCVIENHOCVIEN.MaLop=LOP.MaLopLOP\text{HOCVIEN} \mathop{\bowtie}\limits_{\text{HOCVIEN}.MaLop = \text{LOP}.MaLop} \text{LOP}

Kết quả:

MAHVHOTENMALOP(H)MALOP(L)TENLOPCVHTSISO
HV01Nguyen AnL01L01CNTT1GV0135
HV02Le SangL02L02CNTT2GV0340
HV03Ngo HienL01L01CNTT1GV0135
HV04Pham HuyL03L03CNTT3GV0250

4.3.3. Kết tự nhiên (Natural Join)

Kết tự nhiên là trường hợp đặc biệt của kết bằng.
Các thuộc tính trùng tên được tự động dùng làm điều kiện kết.

Ký hiệu:

RAS\text{R} \mathop{\bowtie}\limits_{A} \text{S}

Ví dụ

Điều kiện: MaLopMaLop

Biểu thức:

HOCVIENMaLopLOP\text{HOCVIEN} \mathop{\bowtie}\limits_{MaLop} \text{LOP}

Kết quả:

MAHVHOTENMALOPTENLOPCVHTSISO
HV01Nguyen AnL01CNTT1GV0135
HV02Le SangL02CNTT2GV0340
HV03Ngo HienL01CNTT1GV0135
HV04Pham HuyL03CNTT3GV0250

4.3.4. Kết ngoài (Outer Join)

Kết ngoài mở rộng kết bằng hoặc kết tự nhiên, trong đó các bộ không có bản ghi tương ứng vẫn được giữ lại.

Ba loại:

  • Kết ngoài trái (Left Outer Join)
  • Kết ngoài phải (Right Outer Join)
  • Kết ngoài đầy đủ (Full Outer Join)

Ví dụ kết ngoài trái

Điều kiện: Liệt kê danh sách học viên kèm theo kết quả thi (nếu có)

Biểu thức:

HOCVIENHOCVIEN.MaHV=KETQUATHI.MaHVKETQUATHI\text{HOCVIEN} \mathop{⟕}\limits_{\text{HOCVIEN.}MaHV = \text{KETQUATHI.}MaHV} \text{KETQUATHI}

Kết quả:

MAHVHOTENMALOPMAHV(KQ)MAMHDIEM
HV01Nguyen AnL01HV01IT0047.0
HV01Nguyen AnL01HV01MA0048.5
HV02Le SangL02HV02IT0048.5
HV03Ngo HienL01HV03MA0049.0
HV04Pham HuyL03nullnullnull
HV05Mai Ngocnullnullnullnull

Ví dụ kết ngoài phải

Biểu thức:

HOCVIENHOCVIEN.MaHV=KETQUATHI.MaHVKETQUATHI\text{HOCVIEN} \mathop{⟖}\limits_{\text{HOCVIEN.}MaHV = \text{KETQUATHI.}MaHV} \text{KETQUATHI}

Kết quả:

MAHVHOTENMALOPMAHV(KQ)MAMHDIEM
HV01Nguyen AnL01HV01IT0047.0
HV01Nguyen AnL01HV01MA0048.5
HV02Le SangL02HV02IT0048.5
HV03Ngo HienL01HV03MA0049.0
nullnullnullHV06IT0046.0

Ví dụ kết ngoài đầy đủ

Biểu thức:

HOCVIENHOCVIEN.MaHV=KETQUATHI.MaHVKETQUATHI\text{HOCVIEN} \mathop{⟗}\limits_{\text{HOCVIEN.}MaHV = \text{KETQUATHI.}MaHV} \text{KETQUATHI}

Kết quả:

MAHVHOTENMALOPMAHV(KQ)MAMHDIEM
HV01Nguyen AnL01HV01IT0047.0
HV01Nguyen AnL01HV01MA0048.5
HV02Le SangL02HV02IT0048.5
HV03Ngo HienL01HV03MA0049.0
HV04Pham HuyL03nullnullnull
HV05Mai Ngocnullnullnullnull
nullnullnullHV06IT0046.0

5. Gom nhóm và hàm tổng hợp

5.1. Mở đầu

Trong nhiều truy vấn, người dùng không cần xem từng dòng dữ liệu một. Thay vào đó họ muốn có thông tin tổng hợp như số học viên của từng lớp, điểm trung bình theo môn hoặc số lượng môn mà một học viên đã tham gia.

Đại số quan hệ sử dụng một nhóm phép toán riêng để gom dữ liệu theo từng giá trị khóa và tính các hàm tổng hợp.

5.2. Khái niệm gom nhóm

Gom nhóm là thao tác chia một quan hệ thành nhiều nhóm nhỏ, mỗi nhóm gồm những bộ có cùng giá trị ở một hoặc nhiều thuộc tính.

Sau bước gom nhóm, ta áp dụng các hàm tổng hợp lên từng nhóm để tính thông tin thống kê.

Ký hiệu đại số quan hệ:

GIFR{}_{G}\mathfrak{I}_{F}\text{R}

Trong đó:

  • GG: danh sách thuộc tính dùng để gom nhóm
  • FF: danh sách các hàm tổng hợp
  • R\text{R}: quan hệ đầu vào

5.3. Các hàm tổng hợp thường dùng

Các hàm tổng hợp:

  • COUNT(A)\text{COUNT}(A): đếm số bộ
  • SUM(A)\text{SUM}(A): tính tổng
  • AVG(A)\text{AVG}(A): tính trung bình
  • MAX(A)\text{MAX}(A): lấy giá trị lớn nhất
  • MIN(A)\text{MIN}(A): lấy giá trị nhỏ nhất

Hàm tổng hợp luôn đi kèm gom nhóm hoặc áp dụng trên toàn bộ quan hệ khi không có nhóm.

5.4. Ví dụ minh họa

Dữ liệu

HOCVIEN\text{HOCVIEN}

MAHVHOTENMALOP
HV01Nguyen AnL01
HV02Le SangL02
HV03Ngo HienL01
HV04Pham HuyL03
HV05Mai Ngocnull

KETQUATHI\text{KETQUATHI}

MAHVMAMHDIEM
HV01IT0047.0
HV01MA0048.5
HV02IT0048.5
HV03MA0049.0
HV06IT0046.0

Ví dụ 1

Câu hỏi: Cho biết mỗi lớp có bao nhiêu học viên.

MaLopICOUNT(MaHV)SoHVHOCVIEN{}_{MaLop}\mathfrak{I}_{\text{COUNT}(MaHV) \rightarrow SoHV} \text{HOCVIEN}
MALOPSoHV
L012
L021
L031

HV05 không có MALOP nên không thuộc nhóm.

Ví dụ 2

Câu hỏi: Số môn học mà mỗi học viên đã có điểm.

MaHVICOUNT(MaMH)SoMonKETQUATHI{}_{MaHV}\mathfrak{I}_{\text{COUNT}(MaMH) \rightarrow SoMon} \text{KETQUATHI}
MAHVSoMon
HV012
HV021
HV031
HV061

Ví dụ 3

Câu hỏi: Tính điểm trung bình mỗi học viên.

MaHVIAVG(Diem)DTBKETQUATHI{}_{MaHV}\mathfrak{I}_{\text{AVG}(Diem) \rightarrow DTB} \text{KETQUATHI}
MAHVDTB
HV017.75
HV028.50
HV039.00
HV066.00

Ví dụ 4

Câu hỏi: Cho biết điểm cao nhất của từng môn học.

MaMHIMAX(Diem)DiemMaxKETQUATHI{}_{MaMH}\mathfrak{I}_{\text{MAX}(Diem) \rightarrow DiemMax} \text{KETQUATHI}
MAMHDiemMax
IT0048.5
MA0049.0

Ví dụ 5

Câu hỏi: Số học viên của từng lớp đã có ít nhất một kết quả thi.

MaLopICOUNT(DISTINCT MaHV)SoHVThi(HOCVIENMaHVKETQUATHI){}_{MaLop}\mathfrak{I}_{\text{COUNT}(\text{DISTINCT } MaHV) \rightarrow SoHVThi} (\text{HOCVIEN} \mathop{\bowtie}\limits_{MaHV} \text{KETQUATHI})
MALOPSoHVThi
L012
L021
L030

Ví dụ 6

Câu hỏi: Tính điểm trung bình theo từng lớp, chỉ xét học viên có điểm thi.

MaLopIAVG(Diem)DTBLop(HOCVIENMaHVKETQUATHI){}_{MaLop}\mathfrak{I}_{\text{AVG}(Diem) \rightarrow DTBLop} (\text{HOCVIEN} \mathop{\bowtie}\limits_{MaHV} \text{KETQUATHI})
MALOPDTBLop
L018.25
L028.50
L039.00

6. Phép chia

6.1. Mở đầu

Trong các phép toán đại số quan hệ, phép chia là phép mô hình hóa các truy vấn mang tính bao quát trên toàn bộ một tập giá trị. Đây là phép toán duy nhất diễn đạt các câu hỏi dạng "mọi", thường xuất hiện trong các hệ thống quản lý dữ liệu.

Các bài toán như xác định học viên đã thi tất cả môn bắt buộc, nhân viên tham gia toàn bộ dự án thuộc một phòng, hay khách hàng mua đầy đủ sản phẩm trong một danh mục đều là các trường hợp kinh điển cần đến phép chia.

Phép chia thường dùng trong các tình huống:

  • Truy vấn yêu cầu kiểm tra xem một thực thể có liên hệ với toàn bộ phần tử của một tập nào đó.
  • Mỗi bộ trong quan hệ bị chia được kiểm tra dựa trên sự bao phủ đầy đủ đối với các giá trị của quan hệ chia.
  • Kết quả là danh sách các giá trị ở quan hệ bị chia thỏa mãn điều kiện bao quát.

Nói cách khác, phép chia trả lời cho câu hỏi:

“Một giá trị A có liên hệ với mọi giá trị B hay không?”

6.2. Ký hiệu

Giả sử có hai quan hệ:

  • R(X,Y)\text{R}(X, Y)
  • S(Y)\text{S}(Y)

Trong đó YY là tập thuộc tính chung.

Ký hiệu phép chia:

R÷S\text{R} \div \text{S}

Kết quả là một quan hệ gồm các giá trị XX trong R\text{R} thỏa mãn điều kiện:
mọi giá trị YY trong S\text{S} đều phải xuất hiện cùng giá trị XX đó trong R\text{R}.

Có thể hiểu như sau:

  • S\text{S} chứa tập giá trị cần kiểm tra đầy đủ.
  • R\text{R} chứa các cặp giá trị biểu diễn quan hệ giữa XXYY.
  • Một giá trị XX được đưa vào kết quả khi nó liên hệ với toàn bộ các giá trị YY trong S\text{S}.
  • Nếu còn thiếu bất kỳ giá trị YY nào trong S\text{S}, thì XX không được đưa vào kết quả.

Phép chia có thể biểu diễn bằng các phép toán cơ sở:

T1πR+S+(R)\text{T}_1 \gets \pi_{R^+ - S^+}(\text{R}) T2πR+S+((S×T1)R)\text{T}_2 \gets \pi_{R^+ - S^+}((\text{S} \times \text{T}_1) - \text{R}) TT1T2\text{T} \gets \text{T}_1 - \text{T}_2

6.3. Ví dụ minh họa

Ta mở rộng dữ liệu bằng quan hệ MONHOC\text{MONHOC}:

MONHOC\text{MONHOC}

MAMH
IT004
MA004

Hai môn này được xem là các môn bắt buộc.

KETQUATHI\text{KETQUATHI}

MAHVMAMHDIEM
HV01IT0047.0
HV01MA0048.5
HV02IT0048.5
HV03MA0049.0
HV06IT0046.0

Câu hỏi: Cho biết học viên đã thi đầy đủ các môn học.

Biểu thức:

RπMaHV,MaMH(KETQUATHI)\text{R} \gets \pi_{MaHV, MaMH}(\text{KETQUATHI}) R÷MONHOC\text{R} \div \text{MONHOC}

Chúng ta mô phỏng toàn bộ quy trình theo định nghĩa chuẩn của phép chia.

Bước 1. Lấy các cặp giá trị trong quan hệ bị chia

MAHVMAMH
HV01IT004
HV01MA004
HV02IT004
HV03MA004
HV06IT004

Bước 2. Xác định tập môn cần thỏa

MAMH
IT004
MA004

Bước 3. Kiểm tra từng học viên

  • HV01 có cả IT004 và MA004
  • HV02 và HV06 thiếu MA004
  • HV03 thiếu IT004

Kết quả

MAHV
HV01

HV01 là học viên duy nhất thi đầy đủ hai môn.