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 .
- b) Sai. Sau UPDATE, T04 và T07 đã thành 3 giờ; không còn bản ghi nào có
SoGio < 3nê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ờ).
DESCsắ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
- 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.
- 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.
- 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.
- 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.
- 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.
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.
Đề có câu hỏi về chủ đề này
Đề bám sát cấu trúc 2026: trí tuệ nhân tạo, thiết bị và giao thức mạng, HTML/CSS, đạo đức số, SQL và đọc chương trình Python/C++; phần đúng/sai gồm mạng gia đình, trang web lớp học, sắp xếp nổi bọt, học máy, phần mềm tạo trang web và CSDL thư viện.
Đề cơ bản củng cố kiến thức nền: khái niệm và ứng dụng AI, thiết bị và dịch vụ mạng, thẻ HTML và cách dùng CSS, an toàn tài khoản, hệ quản trị CSDL, rẽ nhánh và vòng lặp; phần đúng/sai gồm thư lừa đảo, AI trong trường học, tìm kiếm nhị phân, làm sạch dữ liệu, trang web làng nghề và CSDL câu lạc bộ thể thao.
Đề nâng cao, nhiều câu vận dụng: hệ chuyên gia, trình tự DNS – TCP – HTTP, quyền hình ảnh và giấy phép sử dụng, bộ chọn và tính kế thừa CSS, biểu mẫu, bảng gộp ô, phạm vi biến; phần đúng/sai gồm sự cố mã độc trong mạng trường, truy vấn nối ba bảng, kiểm thử sắp xếp chèn, phân loại k láng giềng gần nhất, trang web hội chợ khoa học và CSDL cửa hàng.