Professional Documents
Culture Documents
Đề cương ôn tập cuối kỳ môn Cơ sở dữ liệu (UIT)
Đề cương ôn tập cuối kỳ môn Cơ sở dữ liệu (UIT)
Mục lục
I. NGÔN NGỮ SQL ......................................................................................................................................... 2
1. Giới thiệu............................................................................................................................................... 2
2. Các ngôn ngữ giao tiếp.......................................................................................................................... 2
3. Ngôn ngữ định nghĩa dữ liệu ................................................................................................................ 2
3.1 Lệnh tạo bảng.................................................................................................................................. 2
3.2 Sửa cấu trúc bảng............................................................................................................................ 3
3.3 Lệnh xóa bảng ................................................................................................................................. 4
4. Ngôn ngữ thao tác dữ liệu .................................................................................................................... 4
4.1 Thêm dữ liệu ................................................................................................................................... 4
4.2 Sửa dữ liệu ...................................................................................................................................... 4
4.3 Xóa dữ liệu ...................................................................................................................................... 4
5. Ngôn ngữ truy vấn dữ liệu có cấu trúc ................................................................................................. 4
5.1 Toán tử truy vấn.............................................................................................................................. 4
5.2 Câu truy vấn tổng quát.................................................................................................................... 5
5.3 Truy vấn đơn giản ........................................................................................................................... 5
5.4 Đặt bí danh, sử dụng *, distinct, order by, top ............................................................................... 5
5.5 Phép kết: Inner Join, Left Join, Right Join........................................................................................ 5
5.6 Phép toán tập hợp: Phép hội (UNION), Phép trừ (EXCEPT), Phép giao (INTERSECT). .................... 5
5.7 Gom nhóm dữ liệu – GROUP BY, điều kiện trên nhóm dữ liệu – HAVING ..................................... 5
5.8 Truy vấn lồng ................................................................................................................................... 5
5.9 Phép chia ......................................................................................................................................... 7
5.10 Một số hàm toán học và xử lý chuỗi ký tự, ngày tháng, năm ....................................................... 7
5.11 Dạng với từng A, tìm A, B, C có C cao nhất (nếu không in B thì dùng GROUP BY) ....................... 8
5.12 Dạng với từng A, tìm B có C cao nhất ........................................................................................... 8
II. Ràng buộc toàn vẹn .................................................................................................................................. 9
1. Ràng buộc toàn vẹn .............................................................................................................................. 9
2. Trigger ................................................................................................................................................... 9
III. Khóa và dạng chuẩn ............................................................................................................................... 14
1. Dạng chuẩn 2 ...................................................................................................................................... 14
2. Dạng chuẩn 3 ...................................................................................................................................... 15
3. Dạng chuẩn BCNF ................................................................................................................................ 16
Trang 1 / 16
TuanDM – HTTT2020
Trang 2 / 16
TuanDM – HTTT2020
Trang 3 / 16
TuanDM – HTTT2020
Trang 4 / 16
TuanDM – HTTT2020
Trang 5 / 16
TuanDM – HTTT2020
Trang 6 / 16
TuanDM – HTTT2020
5.10 Một số hàm toán học và xử lý chuỗi ký tự, ngày tháng, năm
• Hàm toán học:
o Hàm ABS: trả về giá trị tuyệt đối của một số.
ABS(-1234.56)
o Hàm PI() trả về số pi trong toán học.
PI() Kết quả: 3.14159265358979
o Hàm POWER trả về phép tính lũy thừa
POWER(3,2). Kết quả là: 9
o Hàm ROUND trả về số được làm tròn lên
ROUND(123.4567,2) = 123.4600
ROUND(123.4567,-1) = 120.000
o Hàm SQRT trả về kết quả căn bậc hai
SQRT(9) = 3
o Hàm FLOOR trả về số nguyên nhỏ hơn hoặc bằng số được làm tròn:
FLOOR(12.3) = 12
Trang 7 / 16
TuanDM – HTTT2020
o Hàm CEILING trả về số nguyên lớn hơn hoặc bằng giá trị làm tròn:
CEILING (23.45) = 24
• Hàm xử lý chuỗi ký tự:
o Hàm UPPER: trả về chữ in hoa
UPPER ('Hello') = 'HELLO'
o Hàm LOWER: trả về chữ in thường
LOWER ('HEllo') = 'hello'
o Hàm LEN: trả về số ký tự trong chuỗi
LEN ('HEllo') = 5
o Hàm LEFT, RIGHT, SUBSTRING: hàm cắt chuỗi bên trái, phải, giữa
LEFT ('HEllo world', 3) = 'HEl'
RIGHT ('HEllo world', 5) = 'world'
SUBSTRING ('HEllo world', 3, 2) = 'll'
o Hàm LTRIM, RTRIM: loại bỏ khoảng trắng bên trái, bên phải.
• Hàm xử lý ngày tháng năm
o Hàm GETDATE() trả về ngày tháng hiện tại.
o Hàm DAY(date): trả về ngày của tham số date
o Hàm MONTH(date): trả về tháng của tham số date
o Hàm YEAR(date): trả về năm của tham số date
5.11 Dạng với từng A, tìm A, B, C có C cao nhất (nếu không in B thì dùng
GROUP BY)
Trang 8 / 16
TuanDM – HTTT2020
FROM (SELECT MaLop, hv.MaHV, (Ho+' '+Ten) HoTen, RANK() OVER (PARTITION BY
MaLop ORDER BY COUNT(*) DESC) AS XepHang
FROM HocVien hv JOIN KetQuaThi kqt ON hv.MaHV = kqt.MaHV
WHERE Diem BETWEEN 9 AND 10
GROUP BY MaLop, hv.MaHV, Ho, Ten) AS A
WHERE XepHang = 1
--29. Trong từng học kỳ của từng năm, tìm giáo viên (mã giáo viên, họ tên)
giảng dạy nhiều nhất.
SELECT HocKy, Nam, A.MaGV, HoTen
FROM GiaoVien gv, (SELECT HocKy, Nam, MaGV, RANK() OVER (PARTITION BY HocKy,
Nam ORDER BY COUNT(*) DESC) AS XepHang
FROM GiangDay
GROUP BY HocKy, Nam, MaGV) AS A
WHERE A.MAGV = gv.MaGV AND XepHang = 1
ORDER BY Nam, HocKy
--35. ** Tìm học viên (mã học viên, họ tên) có điểm thi cao nhất trong từng
môn (lấy điểm ở lần thi sau
--cùng).
SELECT MaMH, MaHV, HoTen
FROM (SELECT MaMH, hv.MaHV, (Ho+' '+Ten) HoTen, RANK() OVER (PARTITION BY
MaMH ORDER BY MAX(Diem) DESC) AS XepHang
FROM HocVien hv JOIN KetQuaThi kqt ON hv.MaHV = kqt.MaHV
WHERE LanThi = (SELECT MAX(LanThi)
FROM KetQuaThi
WHERE MaHV = hv.MaHV AND MaMH = kqt.MaMH
GROUP BY MaHV)
GROUP BY MaMH, hv.MaHV, Ho, Ten) AS A
WHERE XepHang = 1
Trang 9 / 16
TuanDM – HTTT2020
• Bảng DELETED chứa dữ liệu bị xoá khi thực thi câu lệnh Delete hoặc chứa
dữ liệu cũ (old) khi thực thi câu lệnh Update.
• Hai bảng này chỉ tồn tại trong thời gian trigger xử lý và cục bộ cho mỗi
trigger.
UPDATE chứa dữ liệu sau khi được cập nhật chứa dữ liệu trước khi cập nhật
Trang 10 / 16
TuanDM – HTTT2020
Trang 11 / 16
TuanDM – HTTT2020
END
-----
CREATE TRIGGER nghd_hoadon_update
ON hoadon
AFTER UPDATE
AS
IF (UPDATE (makh) OR UPDATE (nghd))
BEGIN
DECLARE @ng_muahang smalldatetime
DECLARE @ng_dangky smalldatetime
SELECT @ng_muahang=nghd, @ng_dangky=ngdk
FROM khachhang, inserted
WHERE khachhang.makh=inserted.makh
IF @ng_muahang< @ng_dangky
BEGIN
rollback transaction
print 'ngay mua hang phai lon hon ngay dang ky'
END
END
HOẶC:
CREATE TRIGGER nghd_hoadon_update
ON hoadon
AFTER UPDATE
AS
IF (UPDATE (makh) OR UPDATE (nghd)
BEGIN
IF (EXISTS (SELECT *
FROM inserted i JOIN khachhang kh ON
i.makh=kh.makh
WHERE i.nghd<kh.ngdk))
BEGIN
rollback transaction
print 'ngay mua hang phai lon hon ngay dang ky'
END
END
Trang 12 / 16
TuanDM – HTTT2020
----------
Nhận xét:
Nếu tất cả các khóa K của Q chỉ có một thuộc tính thì Q đạt dạng chuẩn 2.
Nếu Q không có thuộc tính không khóa thì Q đạt dạng chuẩn 2.
Còn xuất hiện sự trùng lắp dữ liệu -> Cần có dạng chuẩn cao hơn
Ví dụ 1:
Cho Q (ABCD), F={A→B, B→DC}
Q có đạt dạng chuẩn 2 không?
Giải:
N=A
(A)+ = ABCD = Q+
=> Khóa là A.
Ta có: Các thuộc tính không khóa B, C, D phụ thuộc đầy đủ vào khóa nên Q đạt
dạng chuẩn 2.
Ví dụ 2:
Cho Q(ABCD), F={AB → D, C → D}
Khóa: ABC
Q có đạt dạng chuẩn 2 không?
Giải:
Thuộc tính khóa: A, B, C. Thuộc tính không khóa: D.
Tập con thực sự của khóa: A, B, C.
Ta có: (C)+ = CD, chứa thuộc tính không khóa D.
=> D phụ thuộc riêng phần vào khóa => Không đạt dạng chuẩn 2.
Ví dụ 3:
Cho Q(ABCD), F={AB→C, C→D}
Khóa AB
Q có đạt dạng chuẩn 2 không?
Giải:
Thuộc tính khóa: A, B. Thuộc tính không khóa: C, D.
Tập con thực sự của khóa: A, B.
(A)+ = A, không chứa thuộc tính không khóa.
(B)+ = B, không chứa thuộc tính không khóa.
Trang 14 / 16
TuanDM – HTTT2020
=> Các thuộc tính không khóa phụ thuộc đầy đủ vào khóa
=> Q đạt dạng chuẩn 2.
2. Dạng chuẩn 3
Định nghĩa 1:
Lược đồ Q ở dạng chuẩn 3 nếu mọi phụ thuộc hàm X → A ∈ F , với A ∉ X đều có:
(1) X là siêu khóa, hoặc
(2) A là thuộc tính khóa
Định nghĩa 2:
Lược đồ Q ở dạng chuẩn 3 nếu:
Q đạt dạng chuẩn 2
Không tồn tại thuộc tính không khóa nào phụ thuộc bắc cầu vào khóa
Ví dụ 1:
Cho Q(ABCD), F={AB→C, C→BD}
Khóa là: AB, AC
Hỏi: Q có đạt dạng chuẩn 3 không?
Giải:
Xét phụ thuộc hàm C → BD
có C không phải là siêu khóa và BD không phải là thuộc tính khóa.
=> Q không đạt dạng chuẩn 3.
Ví dụ 2:
Cho Q(ABCD), F={AB→C, C→D}
Khóa AB
Hỏi: Q đạt dạng chuẩn 3 hay dạng chuẩn 2?
Giải:
Xét phụ thuộc hàm C → D
có C không phải là siêu khóa và D không phải là thuộc tính khóa.
=> Q không đạt dạng chuẩn 3.
Tập con thực sự của khóa: A, B.
(A)+ = A, không chứa các thuộc tính không khóa.
(B)+ = B, không chứa các thuộc tính không khóa.
=> Các thuộc tính không khóa phụ thuộc đầy đủ vào khóa
=> Q đạt dạng chuẩn 2.
Ví dụ 3:
Q(ABC), F={AB→C, C→B}
Khóa là AB, AC
Trang 15 / 16
TuanDM – HTTT2020
Q(A,B,C,D)
F= (AB → CD, C → B)
Khóa là AB, AC
Q có đạt dạng chuẩn 3 không?
Giải:
Xét phụ thuộc hàm AB→CD
có AB là khóa
Xét phụ thuộc hàm C→B
có B là thuộc tính khóa.
=> Q đạt dạng chuẩn 3.
3. Dạng chuẩn BCNF
Cho Q (ABCDEI)
F={ACD → EBI, CE → AD}
Q có đạt dạng chuẩn BCNF không?
Giải:
N = C; (C)+ khác Q+
TG: ADE
CTG: A, D, E, AD, AE, DE, ADE
N Xi N U Xi (N U Xi)+
C A CA CA
C D CD CD
C E CE CEADBI = Q+ Khóa là CE. Loại CTG có chứa E: AE, DE, ADE.
C AD ADC ADCEBI = Q+ Khóa là ADC.
Xét phụ thuộc hàm ACD → EBI có ACD là khóa.
Xét phụ thuộc hàm CE → AD có CE là khóa.
=> Q đạt dạng chuẩn BCNF.
Trang 16 / 16