6.1.Các phép toán quan hệ bổ sung
Có nhiểu truy vấn cơ sở dữ liêu không thể thực hiện đƣợc bằng các phép toán đại số cơ bản trình bày ở trên. Trong phần này chúng ta sẽ trình bày các phép toán bổ sung để biểu diễn các truy vấn đó. Các phép toán này làm tăng cƣờng sức mạnh của đại số quan hệ.
6.1.1.Các hàm nhóm và các phép nhóm
Kiểu câu hỏi đầu tiên không thể biểu diễn đƣợc trong đại số quan hệ cơ sở là chỉ ra các hàm nhóm toán học trên các tập hợp giá trị của các cơ sở dữ liệu. Các ví dụ về các
hàm nhƣ vậy có thể là đƣa ra lƣơng trung bình hoặc tổng lƣơng của tất cả nhân viên, hoặc cho biết số các bộ của bảng nhân viên. Các hàm hay áp dụng để thu thập các giá trị số là hàm Tổng (SUM), Trungbình (AVERAGE), Tính giá trị lớn nhất (MAX), Giá trị bé nhất (MIN). Hàm Đếm (COUNT) đƣợc sử dụng để đếm các bộ giá trị.
Một kiểu câu hỏi hay dùng khác là đòi hỏi nhóm các bộ trong một quan hệ theo một giá trị của một số các thuộc tính của chúng và sau đó áp dụng các hàm nhóm một cách độc lập cho từng nhóm. Ví dụ, nhóm các bộ của quan hệ NHÂNVIÊN theo MãsốĐV. Nhƣ vậy, mỗi nhóm bao gồm các nhân viên cùng làm việc trong một đơn vị. Sau đó chúng ta có thể đƣa ra mỗi giá trị của MãsốĐV cùng với lƣơng trung bình của các nhân viên ở trong đơn vị.
Chúng ta có thể định nghĩa một phép toán nhóm nhƣ sau: < các thuộc tính nhóm> < danh sách các hàm>(R)
trong đó là ký hiệu phép toán hàm nhóm, <các thuộc tính nhóm> là một danh sách các thuộc tính của quan hệ đƣợc chỉ ra trong R, <danh sách hàm> là danh sách các cặp (<hàm><thuộc tính)>). Trong các cặp nhƣ vậy, <hàm> là một trong các hàm cho phép nhƣ SUM, AVERAGE, MAX, MIN, COUNT, và <thuộc tính> là một thuộc tính của quan hệ đƣợc chỉ ra trong R. Quan hệ kết quả có các thuộc tính nhóm cộng với một thuộc tính cho mỗi phần tử trong danh sách hàm. Ví dụ, để lấy ra theo MãsốĐV các nhân viên và lƣơng trung bình của các nhân viên theo từng đơn vị, ta có thể viết:
MãsốDV COUNT (mãsốsNV), AVERAGE(Lƣơng)( NHÂNVIÊN) Kết quả đƣợc minh hoạ ở hình 6.8
MãsốĐV COUNT(mãsốsNV) AVERAGE(Lƣơng)
1 1 5500
4 3 3100
5 4 3314
Hình 6.1 Minh hoạ phép toán nhóm
Nếu không chỉ ra thuộc tính nhóm thì các hàm đƣợc áp dụng cho các giá trị thuộc tính của tất cả các bộ trong quan hệ, vì vậy quan hệ kết quả chỉ có một bộ. Cần chú ý rằng, nói chung, các trùng lặp không đƣợc loại bỏ khi hàm nhóm đƣợc áp dụng. Kết quả của việc áp dụng một hàm nhóm là một quan hệ chứ không phải là một đại lƣợng vô hƣớng, thậm chí nếu nó chỉ có một giá trị.
6.1.2.Các phép toán khép kín đệ quy
Một kiểu phép toán khác, nói chung, không chỉ ra đƣợc trong các phép toán đại số quan hệ cơ sở là phép toán khép kín đệ quy. Phép toán này đƣợc áp dụng cho mối liên kết đệ quy giữa các bộ cùng kiểu.Với các phép toán này chúng ta phải sử dụng kỹ thuật lặp.
Các phép toán nối ngoài (outer join), hợp ngoài (outer union)
Trong phần này chúng ta thảo luận một vài mở rộng của phép toán nối và hợp. Các phép toán nối mô tả ở trên liên kết các bộ thoả mãn điều kiện nối. Nhƣ vậy, các bộ không có bộ liên kết sẽ bị loại khỏi kết quả nối. Các bộ với giá trị null trong các thuộc
tính nối cũng bị loại. Một tập hợp các phép toán gọi là nối ngoài có thể đƣợc sử dụng khi chúng ta muốn giữ các bộ trong R hoặc S hoặc trong cả hai quan hệ trong kết quả của phép nối dù chúng có những bộ liên kết trong quan hệ kia hay không. Có ba phép nối ngoài gọi là nối ngoài trái (left outer join), nối ngoài phải (right outer join) và nối ngoài đầy đủ (full outer join), đƣợc ký hiệu tƣơng ứng là:
Nối ngoài trái Nối ngoài phải Nối ngoài đầy đủ
Phép nối ngoài trái giữ lại mọi bộ trong quan hệ bên trái R trong phép nối. Nếu không có bộ liên kết nào đƣợc tìm thấy trong S thì các thuộc tính của S trong kết quả phép nối đƣợc “làm đầy” bằng các giá trị null.
Tƣơng tự nhƣ vậy đối với các phép nối ngoài phải và các phép nối ngoài đầy đủ.
Phép toán hợp ngoài đƣợc mở rộng để lấy hợp của các bộ từ các quan hệ nếu các bộ không tƣơng thích đồng nhất. Phép toán này chỉ lấy hợp của các quan hệ mà chúng chỉ tƣơng thích bộ phận, nghĩa là chỉ một vài thuộc tính của chúng là tƣơng thích phép hợp. Điều phải tôn trọng là danh sách các thuộc tính tƣơng thích phải chứa một khoá cho cả hai quan hệ. Các bộ từ các quan hệ thành phần với cùng một khoá chỉ đƣợc biểu diễn một lần trong kết quả và có giá trị cho tất cả các thuộc tính trong kết quả. Các thuộc tính không tƣơng thích phép hợp từ bất kỳ quan hệ nào cũng đƣợc giữ trong kết quả và các bộ không có giá trị cho các thuộc tính này cũng đƣợc lấp đầy bằng những giá trị null.
6.2. Một số ví dụ về truy vấn trong đại số quan hệ
Trong phần này, chúng ta xét một số ví dụ minh họa việc sử dụng các phép toán đại số quan hệ. Các ví dụ ở đây thực hiện trên cơ sở dữ liệu “CÔNG TY” . Nói chung, một truy vấn có thể đƣợc thực hiện bằng nhiều cách, sử dụng các phép toán khác nhau. Trong các ví dụ sau, chúng ta xét một cách thực hiện, các bạn đọc có thể tự đƣa ra các cách thực hiện khác.
Truy vấn 1: Đƣa ra Họ đệm, Tên và địa chỉ của tất cả các nhân viên làm việc cho đơn vị có tên là “Nghiên cứu”: (Các quan hệ TG1, TG2 là các kết quả trung gian)
TG1 TênĐV = “Nghiêncứu” (ĐƠNVỊ) TG2 (TG1 NHÂNVIÊN)
KETQUA Họđệm, Tên, Địachỉ (TG2)
Theo cách thực hiện này, quan hệ TG1 chứa thông tin về đơn vị có tên “Nghiên cứu”, quan hệ TG2 chứa thông tin về các nhân viên làm việc cho đơn vị “Nghiên cứu” và quan hệ KẾTQUẢ chứa các thông tin theo yêu cầu của truy vấn. Trong các bảng của chúng ta, các thuộc tính nối có tên nhƣ nhau nên có thể dùng phép nối tự nhiên.
Truy vấn 2: Với mỗi dự án đặt tại Hà nội, hãy liệt kê MãsốDA, TênĐV, Tên, Địachỉ, Ngàysinh của ngƣời quản lý đơn vị.
TG1 DiadiemDA=”Hanoi”(DỰÁN) TG2 (TG1 ĐƠNVỊ)
TG3 (TG2 * NHÂNVIÊN)
KẾTQUẢ MãsốDA, MãsốĐV, Họđệm,Địachỉ, Ngàysinh (TG3)
Truyvấn 3: Hãy tìm tên của các nhân viên làm việc trên tất cả các dự án do đơn vị có mã số = 5 kiểm soát.
TG1 MãsốDA (Mã sốDV = 5 (DỰÁN))
TG2 MãsốNV, MãsốDA (NHÂNVIÊN_DỰÁN) TG3 TG2 TG1
KETQUA Họđệm, Tên (TG3 * NHÂNVIÊN)