Ngôn ngữ thao tác dữ liệu
Trang 1C h−¬ng 3
Ngôn ngữ thao tác dữ liệu
Trang 2Ngôn ngữ đại số quan hệ
hợp và đặc trưng)
Trang 3Các phép toán tập hợp
Phép hợp: r ∪s = {t⏐ t∈r hoặc t∈s}
Phép giao: r ∩ s = {t⏐ t ∈ r và t ∈ s}
Phép hiệu: r – s = {t⏐ t ∈ r và t ∉ s}
Trang 6Các phép toán đặc biệt trên quan hệ
Trang 7Các phép toán đặc biệt trên quan hệ
Trang 8Các phép toán đặc biệt trên quan hệ
Phép kết nối (join)
Khái niệm ” xếp cạnh nhau ”:
Cho bộ p =( p1, p2 , , pn ) và bộ q =( q1, q2 , , qm ) Xếp cạnh nhau của p và q :
(p,q) = { p1, p2 , , pn , q1, q2 , , qm }
r ⋈ Ai θ Bj s = {(t, u)/ t ∈ r, u ∈ s và t[Ai] θ u[Bj]}
Trang 9Các phép toán đặc biệt trên quan hệ
Phép kết nối (join)
r ⋈ Ai θ Bj s = {(t, u)/ t ∈ r, u ∈ s và t[Ai] θ u[Bj]}
Trường hợp θ là “=” gọi là kết nối bằng
kết nối tự nhiên sử dụng kí hiệu r * s (hoặc r ⋈ s )
Trang 10Các phép toán đặc biệt trên quan hệ
Phép kết nối (join)
kết nối tự nhiên sử dụng kí hiệu r * s (hoặc r ⋈ s )
Ví dụ
Trang 11Các phép toán đặc biệt trên quan hệ
Phép kết nối nửa (semi join)
r ⊲F s = ΠA(r ⋈ F s )
Ví du
CUNG_UNG ⊲ F SAN_PHAM
Trang 12Các phép toán đặc biệt trên quan hệ
Phép kết nối ngoài trái (left outer join)
kết nối ngoài phải (right outer join)
(Đọc tài liệu)
Trang 13Các phép toán quan hệ bổ sung
(Additional Relational Operations)
Trang 14Các phép toán quan hệ bổ sung
(Additional Relational Operations)
Trang 15Chú ý
không phải là một đại lượng vô hướng kể cả khi nó chỉ gồm
bỏ khỏi nhóm khi thực hiện một hàm kết tập
khác
Trang 16Dùng các biểu thức đại số quan hệ
biểu diễn câu hỏi
ΠHOTEN, LUONG (NHAN_VIEN*
(ΠMA-DV (σ(TEN-PHONG=”Nghiên cứu và phát triển ) (PHONG))))
Trang 17Dùng các biểu thức đại số quan hệ
biểu diễn câu hỏi
Câu hỏi 3
Với mỗi dự án thực hiện ở “TT khí thượng thủy văn HN” hãy cho biết mã
số dự án, đồng thời cho biết họ tên, ngày sinh của trưởng phòng quản lý
dự án này.
KQTG ← (ΠMA-DA, MA-DV(σ(DIA-DIEM-DA=”TT Khí tượng thủy văn HN’ )(DU_AN))
KETQUA ← ΠMA-DA, HO-TEN, NG-SINH(NHAN_VIEN ⋈ MA-NV=MA-TP (PHONG*KQTG))
Trang 18Dùng các biểu thức đại số quan hệ
biểu diễn câu hỏi
Câu hỏi 4
Tìm tên những nhân viên làm việc cho tất cả các dự án do phòng có mã
số P4 quản lý.
ΠHO-TEN((ΠMANV,MA-DA(CHAM_CONG)÷
ΠMA-DA(σ(MA-DV=P4)(DU_AN)))*NHAN_VIEN).
Trang 19Dùng các biểu thức đại số quan hệ
biểu diễn câu hỏi
Câu hỏi 5
Tìm mã số những dự án có sự tham gia của một người là lãnh đạo phòng trực tiếp quản lý dự án này.
KQTG ← ΠMA-DA, MA-DV(DU_AN) * ΠMA-DV, MA-TP(PHONG)
KETQUA ← KQTG ⋈ ((KQTG.MA-DA=CHAM_CONG.MA-DA) AND (KQTG.MA-TP=CHAM_CONG.MA-NV))
CHAM_CONG
Trang 20Ngôn ngữ tân từ
(Các phép tính quan hệ)
liệu quan hệ
Có hai loại: ngôn ngữ tân từ biến bộ và ngôn ngữ tân từ biến miền
Trang 21Ngôn ngữ tân từ biến bộ
(Tuple relational calculus)
Một câu hỏi đơn giản trong ngôn ngữ tân từ
biến bộ có dạng
{ t ⏐ ĐK( t ) }
Trang 22Ngôn ngữ tân từ biến bộ
(Tuple relational calculus)
{ t ⏐ NHÂN_VIÊN ( t ) AND t LUONG > 1700 000}
Trang 23Biểu thức của phép tính biến bộ
Một cách tổng quát, một biểu thức của phép tính biến bộ códạng
{ti.A1, tj.A2,…, tk.An ⏐ ĐK (t1, t2,…, tn, tn+1, tn+2, …, tn+m)}
Trang 24Biểu thức của phép tính biến bộ
Công thức của phép tính biến bộ được tạo nên từ các công thức nguyên
tố Một công thức nguyên tố thuộc một trong những dạng sau:
(1) r(t) nói một cách khác đó là phát biểu (t ∈ r)
(2) ti.A θ tj.B
(3) ti.A θ c
Mỗi công thức nguyên tố sẽ nhận một trong hai giá trị TRUE
và FALSE đối với một tổ hợp các bộ (giá trị chân lý)
Trang 25Biểu thức của phép tính biến bộ
Các công thức nguyên tố tạo nên công thức của phép tính bộtheo các luật:
(L1) Mỗi công thức nguyên tố là một công thức
(L2) F, F1, F2 là công thức thì (F1 AND F2), (F1 OR F2), NOT(F) là công thức (L3) F là một công thức thì (∃ t )(F) với t là một biến bộ cũng là một công thức
Trang 28Ví dụ
Câu hỏi 3
Với mỗi dự án thực hiện ở “TT khí thượng thủy văn HN” hãy cho biết mã số dự án, đồng thời cho biết họ tên trưởng phòng quản lý dự án này
Trang 29Ví dụ
Câu hỏi 4
Tìm tên những nhân viên làm việc cho tất cả các dự
án do phòng có mã số P4 quản lý
Trang 30(q.MA_DA = t.MA_DA))}.
Trang 31Luật chuyển đổi công thức tương đương liên quan đến các lượng từ
Trang 32Ngôn ngữ tân từ biến miền
Ví dụ
Câu hỏi 1
Tìm tên của dự án có mã số D4
{tenX ⏐ ∃ diadiemX ∃ma_dvX
(DU_AN(“D4”,tenX, diadiemX, ma_dvX))}
Trang 33Ngôn ngữ tân từ biến miền
Ví dụ
Câu hỏi 2
Cho biết họ tên và lương của những nhân viên thuộc phòng
“Nghiên cứu và phát triển”
{ho_tenX, luongX⏐
∃ma_nvX∃ngay_sinhX∃gioi_tinhX ∃ ma_dvX ∃ ma_tpX
(PHONG (ma_dvX, “Nghiên cứu và phát triển”, ma_tpX) AND
Trang 34Ngôn ngữ tân từ biến miền
Ví dụ
Câu hỏi 3
Với mỗi dự án thực hiện ở “TT khí thượng thủy văn HN” hãy cho biết
mã số dự án, đồng thời cho biết họ tên trưởng phòng quản lý dự án này
{ma_daX, ho_tenX⏐
∃ ten_daX ∃ ma_dvX ∃ten_phongX ∃ma_tpX ∃ngay_sinhX ∃gioi_tinhX ∃luongX ( DU_AN (ma_daX, ten_daX, “TT khí tượng thủy văn HN”, ma_dvX) AND PHONG (ma_dvX, ten_phongX, ma_tpX) AND
NHAN_VIEN (ma_tpX, ho_tenX, ngay_sinhX, gioi_tinhX, ma_dvX, luongX)) }
Trang 35Tính đầy đủ của NN hỏi
đủ nếu với L, chúng ta có thể biểu diễn được bất cứ một câu
Trang 36NGÔN NGỮ SQL
dữ liệu quan hệ
liệu (gồm DDL), cho phép cập nhật và tìm kiếm dữ liệu
(gồm DML)
(view), kiểm soát tính toàn vẹn dữ liệu, cấp phát quyền truy cập, điều khiển các giao tác, thao tác dữ liệu nhúng
Trang 37Phần thao tác dữ liệu sẽ có đông đảo người dùng hơn, do chúng ta xem xét phần này trước phần định nghĩa dữ liệu của SQL
Trang 40NGÔN NGỮ SQL
Cho biết họ tên của mỗi nhân viên và lương mới của mỗi
người nếu lương họ được tăng 10%
SELECT ho_ten, luong + luong*0.10
FROM nhan_vien
Trong bảng kết quả, nếu muốn có thể đặt tên cho cột thứ
ba, chẳng hạn cột thứ ba được đặt tên là luong_moi, với câu lệnh sau
Trang 41NGÔN NGỮ SQL
Cho biết danh sách nhân viên có lương trên 2 300 000, với mỗi nhân viên như vậy các thông tin đưa ra gồm: mã nhân viên, họ tên, mã đơn vị và lương
SELECT manv, ho_ten, ma_dv, luong
FROM nhan_vien
Trang 43NGÔN NGỮ SQL
Có thể tìm biết tên và mã các dự án mà địa điểm có chứa từ
‘UBND’ bằng câu sau:
SELECT ma_da, ten_da, dia_diem_da
FROM du_an
WHERE dia_diem_da LIKE ‘%UBND%’
Trang 46NGÔN NGỮ SQL
Câu hỏi: “Có bao nhiêu nhân viên lương cao hơn 3 000 000 ?”
có thể viết như sau:
SELECT COUNT(*) AS vip
FROM nhan_vien
WHERE luong > 3000 000
Trang 51NGÔN NGỮ SQL
Xét câu hỏi: ‘Tì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, đồng thời cho biết luôn mức chênh lệch này’ Chúng ta có thể dùng truy vấn sau:
SELECT ho_ten , luong – (SELECT AVG(luong) FROM
nhan_vien) AS hieu
FROM nhan_vien
Trang 53NGÔN NGỮ SQL
Theo ngầm định, các tên cột trong câu truy vấn con tham
chiếu đến tên bảng trong câu FROM của truy vấn con này, hoặc có thể tham chiếu đến bảng trong câu FROM của truy vấn ngoài bằng việc xác định tên cột đó
Khi một câu truy vấn con là một trong hai toán hạng của một biểu thức so sánh thì truy vấn con này phải xuất hiện ở vế
Trang 55NGÔN NGỮ SQL
câu HAVING Mặc dù có cú pháp tương tự:
WHERE lọc lấy một số bộ trong bảng đưa vào bảng kết quả,
HAVING lọc lấy một số nhóm nào đó để đưa vào bảng kết quả
Trang 56NGÔN NGỮ SQL
Điều kiện chọn (lọc) trong câu HAVING luôn
chứa ít nhất một hàm gộp, nếu không thì điều kiện này có thể chuyển vào câu WHERE
Nên nhớ rằng hàm gộp không được dùng trong câu WHERE
Trang 57NGÔN NGỮ SQL
Trường hợp câu truy vấn có cả câu WHERE và câu HAVING (dĩ nhiên có cả câu GROUP BY), thì trước tiên điều kiện chọn ở câu WHERE được áp
dụng các bộ thỏa điều kiện này được tạo thành các nhóm do câu GROUP
BY Tiếp theo, câu HAVING loại đi những nhóm không thỏa điều kiện đặt sau từ HAVING Các nhóm còn lại được câu SELECT sử dụng để tạo ra các bộ là kết quả của câu truy vấn
SELECT ma_dv, MAX(luong) AS max_dv,
SUM(luong) AS tong_dv
Trang 59NGÔN NGỮ SQL
Các truy vấn lồng nhau
Xét câu hỏi: ‘Tì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, đồng thời cho biết luôn mức chênh lệch này’
SELECT ho_ten , luong – (SELECT AVG(luong) FROM
nhan_vien) AS hieu
FROM nhan_vien
WHERE luong >
Trang 60Danh sách các mục được liệt kê bởi câu truy vấn con
SELECT phải chứa tên của một cột hoặc một biểu thức trừphi câu truy vấn con này dùng từ khóa EXISTS
Trang 61NGÔN NGỮ SQL
Các truy vấn lồng nhau
Theo ngầm định, các tên cột trong câu truy vấn con tham chiếu đến tên bảng trong câu FROM của truy vấn con này, hoặc cóthể tham chiếu đến bảng trong câu FROM của truy vấn ngoài bằng việc xác định tên cột đó
Khi một câu truy vấn con là một trong hai toán hạng của một biểu thức so sánh thì truy vấn con này phải xuất hiện ở vế phải
Trang 66NGÔN NGỮ SQL
Dùng các biến bộ
Để tìm thông tin về tên và lương của trưởng phòng nghiên cứu phát triển
SELECT nv.ho_ten, nv.luong
FROM nhan_vien nv, phong p
WHERE nv.manv = p.ma_tp AND
p.ten_phong = ‘Nghiên cứu và phát triển’
Các biến bộ rất hữu ích trong việc so sánh hai bộ trong cùng
Trang 67NGÔN NGỮ SQL
Dùng các biến bộ
Có thể tìm nhân viên có lương cao hơn ít nhất lương của một nữ nhân viên bằng câu lệnh sau :
SELECT DISTINCT nv.ho_ten, nv.luong
FROM nhan_vien a, nhan_vien b
WHERE a.luong > b.luong AND b.gioi_tinh = ‘nu’
Trang 68NGÔN NGỮ SQL
Các quan hệ được dẫn xuất và khung nhìn
SQL-92 cho phép dùng câu hỏi con trong
câu FROM, trong đó bảng kết quả của câu hỏi con phải được đặt tên và các cột được phép đổi tên Một kết quả như vậy được gọi
là một quan hệ (bảng) được dẫn xuất.
Trang 69NGÔN NGỮ SQL
Các quan hệ được dẫn xuất và khung nhìn
“Tìm lương trung bình của các phòng có lương trung bình lớn hơn 2 100 000”, trong SQL (chuẩn 92) có thể viết như sau:
SELECT ma_phong, luong_tb
FROM (SELECT ma_dv, AVG(luong)
FROM nhan_vien
GROUP BY ma_dv)
Trang 70Xin cảm ơn !