Ôn Thi Đại Họcby ToanKhonTech
Kiến thức trọng tâmLớp 11

Cơ sở dữ liệu và SQL

Tóm tắt bảng, bản ghi, khóa chính, khóa ngoài, hệ quản trị CSDL và câu lệnh SQL SELECT, WHERE, ORDER BY, JOIN, GROUP BY, UPDATE, DELETE kèm ví dụ chạy thử.

Cơ sở dữ liệu là kiến thức lớp 11 nhưng xuất hiện đều đặn: phần I có 2–3 câu (khóa chính, khóa ngoài, câu lệnh SQL), phần II định hướng ICT gần như luôn có một câu đúng/sai cho hai bảng dữ liệu kèm vài câu truy vấn. Muốn làm nhanh, em phải "chạy tay" được câu SQL trên bảng cho sẵn.

Kiến thức trọng tâm

Các khái niệm cơ bản

Khái niệm Nghĩa
Cơ sở dữ liệu (CSDL) Tập hợp dữ liệu có liên quan, được lưu trữ có tổ chức để nhiều người khai thác
Hệ quản trị CSDL Phần mềm để tạo lập, cập nhật, truy vấn, bảo mật CSDL
Hệ CSDL CSDL + hệ quản trị CSDL (+ ứng dụng khai thác)
Bảng (quan hệ) Dữ liệu về một loại đối tượng, gồm hàng và cột
Bản ghi Một hàng của bảng (một đối tượng)
Trường Một cột của bảng (một thuộc tính), có kiểu dữ liệu xác định
Khóa chính Trường (nhóm trường) có giá trị duy nhất, không rỗng, phân biệt các bản ghi
Khóa ngoài Trường của bảng này tham chiếu tới khóa chính của bảng khác, dùng để liên kết

Kiểu dữ liệu hay gặp: INT (số nguyên), FLOAT (số thực), CHAR(n) (xâu dài cố định), VARCHAR(n) (xâu dài tối đa n), DATE (ngày), BOOLEAN (đúng/sai).

CSDL mẫu dùng trong bài

Câu lạc bộ Tình nguyện quản lí học sinh và các lượt tham gia hoạt động:

CREATE TABLE HOCSINH (
  MaHS CHAR(4) PRIMARY KEY,
  HoTen VARCHAR(50) NOT NULL,
  Lop CHAR(4)
);
CREATE TABLE THAMGIA (
  MaTG CHAR(3) PRIMARY KEY,
  MaHS CHAR(4),
  HoatDong VARCHAR(30),
  SoGio INT,
  FOREIGN KEY (MaHS) REFERENCES HOCSINH(MaHS)
);

Bảng HOCSINH

MaHS HoTen Lop
HS01 Lê An 11A1
HS02 Trần Bảo 11A2
HS03 Phạm Chi 11A1
HS04 Ngô Dũng 11A3
HS05 Vũ Hà 11A2

Bảng THAMGIA

MaTG MaHS HoatDong SoGio
T01 HS01 Dọn vệ sinh 3
T02 HS02 Trồng cây 4
T03 HS01 Trồng cây 5
T04 HS03 Thư viện 2
T05 HS05 Dọn vệ sinh 3
T06 HS02 Thư viện 6
T07 HS01 Thư viện 2

Tóm tắt câu lệnh SQL

Câu lệnh Công dụng
CREATE TABLE / ALTER TABLE / DROP TABLE Tạo / sửa cấu trúc / xóa cả bảng
INSERT INTO … VALUES (…) Thêm bản ghi
UPDATE … SET … WHERE … Sửa dữ liệu các bản ghi thỏa điều kiện
DELETE FROM … WHERE … Xóa bản ghi thỏa điều kiện (bảng vẫn còn)
SELECT … FROM … WHERE … Truy vấn, lọc dữ liệu
ORDER BY … ASC/DESC Sắp xếp tăng/giảm (mặc định tăng)
INNER JOIN … ON … Ghép hai bảng theo điều kiện (thường khóa ngoài = khóa chính)
GROUP BY … + COUNT, SUM, AVG, MAX, MIN Gom nhóm và thống kê từng nhóm
HAVING … Lọc nhóm sau khi gom (WHERE lọc bản ghi trước khi gom)

Toán tử trong điều kiện: =, <>, >, >=, AND, OR, NOT, BETWEEN 2 AND 5, IN ('11A1', '11A2'), LIKE 'Trần%' (họ Trần; % thay cho dãy kí tự bất kì).

SELECT, WHERE, ORDER BY

SELECT HoTen, Lop
FROM HOCSINH
WHERE Lop = '11A1'
ORDER BY HoTen;

Kết quả: hai dòng Lê An – 11A1 và Phạm Chi – 11A1.

Ghép bảng với INNER JOIN

SELECT HOCSINH.HoTen, THAMGIA.HoatDong, THAMGIA.SoGio
FROM HOCSINH INNER JOIN THAMGIA
  ON HOCSINH.MaHS = THAMGIA.MaHS
WHERE THAMGIA.SoGio >= 4
ORDER BY THAMGIA.SoGio DESC;
HoTen HoatDong SoGio
Trần Bảo Thư viện 6
Lê An Trồng cây 5
Trần Bảo Trồng cây 4

INNER JOIN chỉ giữ những cặp bản ghi khớp nhau: Ngô Dũng (HS04) chưa tham gia hoạt động nào nên không bao giờ xuất hiện.

GROUP BY và HAVING — vết thực hiện từng bước

SELECT HOCSINH.HoTen, COUNT(*) AS SoLan,
       SUM(THAMGIA.SoGio) AS TongGio
FROM HOCSINH INNER JOIN THAMGIA
  ON HOCSINH.MaHS = THAMGIA.MaHS
GROUP BY HOCSINH.MaHS, HOCSINH.HoTen
HAVING SUM(THAMGIA.SoGio) >= 8
ORDER BY HOCSINH.HoTen;

Thứ tự máy xử lí: FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.

Bước Kết quả trung gian
JOIN 7 dòng (mỗi lượt tham gia kèm họ tên)
GROUP BY 4 nhóm: HS01 (3, 5, 2), HS02 (4, 6), HS03 (2), HS05 (3)
Tính tổng HS01: 10 · HS02: 10 · HS03: 2 · HS05: 3
HAVING ≥ 8 Còn HS01, HS02
SELECT + ORDER BY Lê An – 3 – 10, Trần Bảo – 2 – 10

Bảo mật và an toàn CSDL

Xác thực người dùng (tài khoản, mật khẩu), phân quyền (người chỉ được xem, người được sửa), mã hóa dữ liệu nhạy cảm, ghi nhật kí truy cập, sao lưu định kì để khôi phục khi có sự cố.

Dạng bài thường gặp trong đề thi

Dạng 1: Chọn khóa chính, khóa ngoài

Xem lời giải

MaHS trong THAMGIA tham chiếu tới khóa chính MaHS của HOCSINH → khóa ngoài. MaHS không làm khóa chính của THAMGIA được vì một học sinh tham gia nhiều lần (HS01 xuất hiện 3 lần) → giá trị bị trùng. Khóa chính của THAMGIA là MaTG.

Dạng 2: Câu đúng/sai với chuỗi câu lệnh

Xem lời giải
  • a) Đúng. T04: 2 → 3, T06: 6 → 7, T07: 2 → 3; tổng 3+7+3=133 + 7 + 3 = 13.
  • b) Sai. Sau UPDATE, T04 và T07 đã thành 3 giờ; không còn bản ghi nào có SoGio < 3 nên không bản ghi nào bị xóa. Bẫy: quên rằng các câu lệnh chạy lần lượt, câu sau thấy dữ liệu đã bị câu trước sửa.
  • c) Đúng. Mã T08 chưa có nên không vi phạm khóa chính, nhưng HS09 không tồn tại trong HOCSINH → vi phạm khóa ngoài.
  • d) Sai. Có 3 nhóm: Thư viện (3 lượt, 13 giờ), Trồng cây (2 lượt, 9 giờ), Dọn vệ sinh (2 lượt, 6 giờ). DESC sắp giảm dần theo tổng giờ nên Thư viện đứng đầu, dòng cuối là Dọn vệ sinh – 2 – 6.

Dạng 3: Chọn câu SQL đúng yêu cầu

Xem lời giải

Lớp nằm ở HOCSINH, số giờ nằm ở THAMGIA → phải ghép bảng, rồi gom theo lớp và cộng số giờ → B.

A sai vì THAMGIA không có trường Lop; C chỉ liệt kê, không tính tổng; D đếm số lượt chứ không cộng số giờ. Kết quả của B: 11A1 có 12 giờ (HS01: 10, HS03: 2), 11A2 có 13 giờ (HS02: 10, HS05: 3).

Lỗi thường gặp

Mẹo làm bài

Tự kiểm tra nhanh

  1. Câu lệnh sau trả về số nào?
SELECT COUNT(DISTINCT MaHS) FROM THAMGIA;
Xem đáp án

4 — có 7 lượt tham gia nhưng chỉ của 4 học sinh khác nhau (HS01, HS02, HS03, HS05). DISTINCT loại các giá trị trùng trước khi đếm.

  1. Viết câu lệnh cho biết sĩ số (số học sinh) của mỗi lớp trong bảng HOCSINH.
Xem đáp án
SELECT Lop, COUNT(*) AS SiSo
FROM HOCSINH
GROUP BY Lop;

Kết quả: 11A1 – 2, 11A2 – 2, 11A3 – 1.

  1. Câu SELECT HoTen FROM HOCSINH WHERE Lop = '11A2' AND MaHS <> 'HS02'; trả về ai?
Xem đáp án

Vũ Hà. Lớp 11A2 có HS02 và HS05; điều kiện MaHS <> 'HS02' loại Trần Bảo.

  1. Vì sao không nên chọn HoTen làm khóa chính của bảng HOCSINH?
Xem đáp án

Hai học sinh có thể trùng họ tên, trong khi khóa chính phải có giá trị duy nhất cho mỗi bản ghi.

  1. Phân biệt WHERE và HAVING.
Xem đáp án

WHERE lọc từng bản ghi trước khi gom nhóm; HAVING lọc các nhóm sau GROUP BY, thường dùng với hàm thống kê như SUM, COUNT.

Kiểm tra lại kiến thức vừa ôn

Làm 10 câu luyện tập về cơ sở dữ liệu và sql và xem lời giải ngay sau mỗi câu.

Luyện tập ngay

Đề có câu hỏi về chủ đề này