Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
- I. Lý thuyết trọng tâm
- 1. Lợi ích của ngôn ngữ truy vấn
- 2. Khởi tạo CSDL (DDL)
- 3. Cập nhật và truy xuất dữ liệu (DML)
- 4. Kiểm soát quyền truy cập (DCL)
- II. Phương pháp giải các dạng bài tập
- Dạng 1: Viết câu truy vấn DDL – Tạo bảng và thiết lập khóa
- Dạng 2: Viết câu truy vấn DML – Truy xuất và liên kết dữ liệu
- III. Sơ đồ tư duy
I. Lý thuyết trọng tâm
1. Lợi ích của ngôn ngữ truy vấn
Để lấy dữ liệu từ CSDL, có hai cách tiếp cận:
- Cách 1 – Lập trình trực tiếp: Viết chương trình mở tệp chứa bảng dữ liệu, lần lượt đọc từng nhóm dữ liệu, tách phần cần kiểm tra rồi đưa ra kết quả. Đây là kiểu lập trình “theo thủ tục” – người dùng phải biết rõ cấu trúc tệp dữ liệu và tự xây dựng thuật toán xử lí. Cách này tốn công sức, dễ nhầm lẫn, và mỗi bài toán khác lại phải viết lại chương trình.
- Cách 2 – Dùng ngôn ngữ truy vấn: Người dùng chỉ cần viết ra yêu cầu dưới dạng một câu truy vấn – mô tả muốn lấy gì, chứ không cần nghĩ cách thực hiện. Mọi việc còn lại do hệ QTCSDL giải quyết: tiếp nhận yêu cầu ở dạng xâu truy vấn rồi trả về kết quả đúng yêu cầu.
Sự khác biệt cơ bản: lập trình trực tiếp yêu cầu mô tả cách làm (thủ tục), còn ngôn ngữ truy vấn chỉ yêu cầu mô tả cần gì (khai báo).
SQL (Structured Query Language – Ngôn ngữ truy vấn có cấu trúc) là ngôn ngữ truy vấn tiêu chuẩn dành cho việc định nghĩa, cập nhật, truy xuất và điều khiển dữ liệu từ các CSDL quan hệ. SQL được phát triển từ những năm 1970 và ngày nay trở thành ngôn ngữ mà hầu hết tất cả các hệ QTCSDL đều hỗ trợ (Oracle, SQL Server, MySQL, PostgreSQL,…).
SQL gồm ba thành phần chính:
| Thành phần | Tên đầy đủ | Chức năng |
|---|---|---|
| DDL | Data Definition Language – Ngôn ngữ định nghĩa dữ liệu | Khởi tạo CSDL, tạo bảng, thiết lập khóa |
| DML | Data Manipulation Language – Ngôn ngữ thao tác dữ liệu | Cập nhật (thêm, xoá, sửa) và truy xuất dữ liệu |
| DCL | Data Control Language – Ngôn ngữ kiểm soát dữ liệu | Cấp quyền và thu hồi quyền người dùng |
Ngoài việc hỗ trợ SQL, các hệ QTCSDL còn cung cấp giao diện lập trình ứng dụng (API) dưới dạng các phương thức mà người lập trình có thể sử dụng để gửi các câu truy vấn đến hệ QTCSDL và nhận về kết quả.
2. Khởi tạo CSDL (DDL)
Thành phần DDL của SQL cung cấp các câu truy vấn để khởi tạo CSDL, tạo bảng và thiết lập các khóa.
a) Các câu truy vấn định nghĩa CSDL
| Câu truy vấn DDL | Ý nghĩa |
|---|---|
CREATE DATABASE |
Khởi tạo CSDL |
CREATE TABLE |
Khởi tạo bảng |
ALTER TABLE |
Thay đổi định nghĩa bảng |
PRIMARY KEY |
Khai báo khóa chính |
FOREIGN KEY... REFERENCES... |
Khai báo khóa ngoài |
Quy tắc đặt tên: Tên CSDL, tên bảng, tên trường chỉ gồm các kí tự La tinh và chữ số, không chứa kí tự trống và các kí tự đặc biệt. Mỗi câu truy vấn kết thúc bằng dấu chấm phẩy ;.
b) Các kiểu dữ liệu trong SQL
| Kiểu dữ liệu | Ý nghĩa |
|---|---|
CHAR(n) hay CHARACTER(n) |
Xâu kí tự có độ dài cố định n kí tự; nếu xâu có ít hơn n kí tự, các kí tự trống được thêm vào phía bên phải |
VARCHAR(n) |
Xâu kí tự có độ dài thay đổi, không vượt quá n kí tự |
BOOLEAN |
Kiểu logic có giá trị Đúng (1) hay Sai (0) |
INT hay INTEGER |
Số nguyên |
REAL |
Số thực dấu phẩy động |
DATE |
Ngày tháng, dạng ‘YYYY-MM-DD’ |
TIME |
Thời gian, dạng ‘HH:MM:SS’ |
c) Ví dụ minh hoạ
Khởi tạo CSDL âm nhạc đặt tên là music, sau đó tạo bảng bannhac và bảng nhacsi:
CREATE DATABASE music;
CREATE TABLE bannhac (
Mid CHAR(4),
Aid INT,
TenBN VARCHAR(128)
);
ALTER TABLE bannhac ADD PRIMARY KEY (Mid);
CREATE TABLE nhacsi (
Aid INT,
TenNS VARCHAR(64)
);
Giải thích:
CREATE DATABASE music;– tạo CSDL có tên music.CREATE TABLE bannhac (...)– tạo bảng bannhac với ba trường: Mid kiểu xâu cố định 4 kí tự, Aid kiểu số nguyên, TenBN kiểu xâu tối đa 128 kí tự.ALTER TABLE bannhac ADD PRIMARY KEY (Mid);– thêm khóa chính Mid cho bảng bannhac.CREATE TABLE nhacsi (...)– tạo bảng nhacsi với hai trường: Aid kiểu số nguyên, TenNS kiểu xâu tối đa 64 kí tự.
3. Cập nhật và truy xuất dữ liệu (DML)
Thành phần DML của SQL cung cấp các câu truy vấn để cập nhật và truy xuất dữ liệu.
a) Câu truy vấn truy xuất dữ liệu
| Thành phần | Ý nghĩa |
|---|---|
SELECT <dữ liệu cần lấy> |
Dữ liệu cần lấy có thể là danh sách các trường hay hàm nào đó với các biến là trường trong bảng |
FROM <tên bảng> |
Chỉ định bảng chứa dữ liệu |
WHERE <điều kiện chọn> |
Chỉ định chọn chỉ các dòng thoả mãn điều kiện xác định |
ORDER BY <tên trường> |
Sắp xếp các dòng kết quả theo thứ tự chỉ định |
INNER JOIN |
Liên kết các bảng theo điều kiện |
Ví dụ 1: Chọn từ bảng bannhac các dòng có Aid = 1, ở mỗi dòng chỉ lấy giá trị các cột Mid và TenBN, sắp xếp kết quả theo thứ tự TenBN:
SELECT Mid, TenBN
FROM bannhac
WHERE Aid = 1
ORDER BY TenBN;
Ví dụ 2: Lấy tất cả các dòng từ bảng bannhac, liên kết với bảng nhacsi theo khóa Aid, ở mỗi dòng lấy cột TenBN ở bảng bannhac và cột TenNS ở bảng nhacsi:
SELECT bannhac.TenBN, nhacsi.TenNS
FROM bannhac INNER JOIN nhacsi
ON bannhac.Aid = nhacsi.Aid;
Ví dụ 3: Giả sử có bảng diemtoan_11A chứa điểm trung bình môn Toán (cột tb) của tất cả học sinh lớp 11A. Lấy điểm trung bình cộng môn Toán của cả lớp:
SELECT AVG(tb) FROM diemtoan_11A;
b) Câu truy vấn cập nhật dữ liệu
| Câu truy vấn | Ý nghĩa |
|---|---|
INSERT INTO <tên bảng> VALUES <danh sách giá trị> |
Thêm dữ liệu vào bảng với giá trị lấy từ danh sách |
DELETE FROM <tên bảng> WHERE <điều kiện> |
Xoá các dòng trong bảng thoả mãn điều kiện |
UPDATE <tên bảng> SET <tên trường> = <giá trị> |
Cập nhật giá trị cho trường chỉ định trong bảng |
Ví dụ thêm dữ liệu: Thêm hai dòng mới vào bảng nhacsi:
INSERT INTO nhacsi VALUES
(5, 'Phú Quang'),
(6, 'Phan Huỳnh Điểu');
Ví dụ xoá dữ liệu: Xoá dòng có Mid = ‘0005’ trong bảng bannhac:
DELETE FROM bannhac
WHERE Mid = '0005';
Ví dụ sửa dữ liệu: Thay đổi giá trị cột TenNS thành ‘Hoàng Hiệp’ ở dòng có Aid = 6 trong bảng nhacsi:
UPDATE nhacsi
SET TenNS = 'Hoàng Hiệp'
WHERE Aid = 6;
4. Kiểm soát quyền truy cập (DCL)
Thành phần DCL của SQL cung cấp các câu truy vấn kiểm soát quyền người dùng đối với CSDL. Chỉ có hai câu truy vấn:
| Câu truy vấn | Ý nghĩa |
|---|---|
GRANT |
Cấp quyền cho người dùng |
REVOKE |
Thu hồi quyền đối với người dùng |
Ví dụ cấp quyền: Cấp quyền dùng truy vấn SELECT đối với tất cả các bảng trong CSDL music cho người dùng guest:
GRANT select
ON music.*
TO guest;
Ví dụ thu hồi quyền: Thu hồi quyền CREATE và ALTER cho bảng bannhac trong CSDL music đối với người dùng mod:
REVOKE create, alter
ON music.bannhac
FROM mod;
II. Phương pháp giải các dạng bài tập
Dạng 1: Viết câu truy vấn DDL – Tạo bảng và thiết lập khóa
Phương pháp:
Bước 1: Xác định tên bảng cần tạo và danh sách các trường kèm kiểu dữ liệu phù hợp (tra cứu bảng kiểu dữ liệu SQL: CHAR, VARCHAR, INT, REAL, BOOLEAN, DATE, TIME).
Bước 2: Viết câu CREATE TABLE với đầy đủ tên trường và kiểu dữ liệu.
Bước 3: Nếu cần thiết lập khóa chính hoặc khóa ngoài, dùng ALTER TABLE ... ADD PRIMARY KEY (...) hoặc ALTER TABLE ... ADD FOREIGN KEY (...) REFERENCES tên_bảng_khác(...).
Bài 1 (Luyện tập SGK). Hãy viết câu truy vấn tạo bảng Bản thu âm (banthuam) như đã mô tả trong Bài 13.
Lời giải:
Bảng Bản thu âm trong Bài 13 có hai trường: Mid (mã bản nhạc, kiểu xâu cố định 4 kí tự) và Sid (mã ca sĩ, kiểu xâu kí tự có độ dài thay đổi).
CREATE TABLE banthuam (
Mid CHAR(4),
Sid VARCHAR(4)
);
Bài 2 (Luyện tập SGK). Viết câu truy vấn tạo khóa ngoài Mid và Sid cho bảng banthuam.
Lời giải:
Trường Mid là khóa chính ở bảng bannhac, trường Sid là khóa chính ở bảng casi. Do đó Mid và Sid là khóa ngoài của bảng banthuam:
ALTER TABLE banthuam
ADD FOREIGN KEY (Mid) REFERENCES bannhac(Mid);
ALTER TABLE banthuam
ADD FOREIGN KEY (Sid) REFERENCES casi(Sid);
Dạng 2: Viết câu truy vấn DML – Truy xuất và liên kết dữ liệu
Phương pháp:
Bước 1: Xác định dữ liệu cần lấy (những cột nào, từ bảng nào).
Bước 2: Nếu dữ liệu nằm trong một bảng → dùng SELECT ... FROM ... WHERE .... Nếu dữ liệu nằm ở nhiều bảng → dùng INNER JOIN ... ON ... để liên kết các bảng qua khóa ngoài tương ứng.
Bước 3: Khi liên kết nhiều bảng, cần chỉ rõ tên bảng trước tên trường (dạng tên_bảng.tên_trường) để tránh nhầm lẫn giữa các trường cùng tên ở các bảng khác nhau.
Bài 3 (Luyện tập SGK). Viết câu truy vấn lấy ra tất cả các dòng trong liên kết bảng banthuam với bảng bannhac, mỗi dòng lấy các cột: Mid, Sid của bảng banthuam và cột TenBN của bảng bannhac.
Lời giải:
Hai bảng banthuam và bannhac có chung trường Mid. Liên kết theo trường này:
SELECT banthuam.Mid, banthuam.Sid, bannhac.TenBN
FROM banthuam INNER JOIN bannhac
ON banthuam.Mid = bannhac.Mid;
Bài 4 (Vận dụng SGK). Viết câu truy vấn lấy ra tất cả các dòng trong liên kết bảng banthuam với bảng bannhac và bảng casi, mỗi dòng lấy các cột: Mid, Sid của bảng banthuam, cột TenBN của bảng bannhac và TenCS của bảng casi.
Lời giải:
Cần liên kết ba bảng: banthuam với bannhac qua trường Mid, và banthuam với casi qua trường Sid:
SELECT banthuam.Mid, banthuam.Sid,
bannhac.TenBN, casi.TenCS
FROM banthuam
INNER JOIN bannhac ON banthuam.Mid = bannhac.Mid
INNER JOIN casi ON banthuam.Sid = casi.Sid;
III. Sơ đồ tư duy
SQL – NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC
│
├── 1. LỢI ÍCH CỦA NGÔN NGỮ TRUY VẤN
│ ├── Lập trình trực tiếp
│ │ ├── Mô tả CÁCH LÀM (thủ tục)
│ │ ├── Cần biết cấu trúc tệp dữ liệu
│ │ └── Tốn công, dễ nhầm, khó tái sử dụng
│ │
│ ├── Ngôn ngữ truy vấn (SQL)
│ │ ├── Mô tả CẦN GÌ (khai báo)
│ │ ├── Hệ QTCSDL tự xử lí và trả kết quả
│ │ └── Ngắn gọn, dễ dùng, tái sử dụng
│ │
│ ├── SQL phát triển từ 1970, chuẩn phổ biến nhất
│ │
│ └── Ba thành phần
│ ├── DDL – Định nghĩa dữ liệu
│ ├── DML – Thao tác dữ liệu
│ └── DCL – Kiểm soát dữ liệu
│
├── 2. KHỞI TẠO CSDL (DDL)
│ ├── CREATE DATABASE <tên CSDL>
│ │
│ ├── CREATE TABLE <tên bảng>
│ │ └── (DS trường và kiểu dữ liệu)
│ │
│ ├── ALTER TABLE <tên bảng>
│ │ ├── ADD PRIMARY KEY (...)
│ │ └── ADD FOREIGN KEY (...) REFERENCES ...
│ │
│ └── Kiểu dữ liệu SQL
│ ├── CHAR(n), VARCHAR(n) – xâu kí tự
│ ├── INT / INTEGER – số nguyên
│ ├── REAL – số thực
│ ├── BOOLEAN – logic (0/1)
│ ├── DATE – ngày ('YYYY-MM-DD')
│ └── TIME – giờ ('HH:MM:SS')
│
├── 3. CẬP NHẬT & TRUY XUẤT (DML)
│ ├── Truy xuất dữ liệu
│ │ ├── SELECT <cột> FROM <bảng>
│ │ ├── WHERE <điều kiện>
│ │ ├── ORDER BY <trường>
│ │ └── INNER JOIN ... ON ... (liên kết bảng)
│ │
│ └── Cập nhật dữ liệu
│ ├── INSERT INTO ... VALUES ... (thêm)
│ ├── DELETE FROM ... WHERE ... (xoá)
│ └── UPDATE ... SET ... WHERE ... (sửa)
│
└── 4. KIỂM SOÁT QUYỀN TRUY CẬP (DCL)
├── GRANT <quyền> ON <đối tượng> TO <user>
│ └── Cấp quyền cho người dùng
│
└── REVOKE <quyền> ON <đối tượng> FROM <user>
└── Thu hồi quyền người dùng

Thầy Phạm Thành Danh
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THPT
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1
Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa
