Mục lục bài họcĐang ở d05-b2
← A-Level Computer Science
0/30 bài đã học xong
Chương 5 · Databases and Data Security · Bài 2/3 của chương · bài 14/30 của A-Level Computer Science

SQL and the DBMS

SQL và hệ quản trị cơ sở dữ liệu
← Mục lục bài học
Lý thuyết · English

Data Definition Language

CREATE TABLE, ALTER TABLE and constraints such as PRIMARY KEY, FOREIGN KEY and NOT NULL. DDL defines the structure.

Data Manipulation Language

SELECT … FROM … WHERE … ORDER BY for queries, plus INSERT INTO, UPDATE … SET and DELETE FROM. Aggregate functions COUNT, SUM, AVG, MAX, MIN combine with GROUP BY.

Joining tables

An INNER JOIN … ON matches a foreign key to a primary key and returns only rows that match in both tables. Writing the ON condition is the step that gets marked; forgetting it produces every combination of every row.

A worked pattern

SELECT KHACH_HANG.ten_kh, COUNT(DON_HANG.ma_don)
FROM KHACH_HANG INNER JOIN DON_HANG
ON KHACH_HANG.ma_kh = DON_HANG.ma_kh
GROUP BY KHACH_HANG.ten_kh
ORDER BY COUNT(DON_HANG.ma_don) DESC;

What the DBMS does for you

Beyond storing data: a data dictionary describing the structure; access control so different users see different data; validation of entered values; backup and recovery; and concurrency control, which uses record locking so two users cannot overwrite each other's changes.

Why the DBMS matters

It separates the data from the programs that use it, so changing one application does not require rewriting the data, and several applications can share one consistent set of data.

Giải thích tiếng Việt

Ngôn ngữ định nghĩa dữ liệu (DDL)

CREATE TABLE, ALTER TABLE và các ràng buộc như PRIMARY KEY, FOREIGN KEY, NOT NULL. DDL định nghĩa cấu trúc.

Ngôn ngữ thao tác dữ liệu (DML)

SELECT … FROM … WHERE … ORDER BY để truy vấn, cùng với INSERT INTO, UPDATE … SETDELETE FROM. Các hàm tổng hợp COUNT, SUM, AVG, MAX, MIN dùng kèm GROUP BY.

Nối bảng

INNER JOIN … ON khớp một khoá ngoại với một khoá chính và chỉ trả về những dòng khớp ở cả hai bảng. Viết điều kiện ON chính là bước được chấm điểm; quên nó thì kết quả là mọi tổ hợp của mọi dòng.

Một mẫu truy vấn hoàn chỉnh

SELECT KHACH_HANG.ten_kh, COUNT(DON_HANG.ma_don)
FROM KHACH_HANG INNER JOIN DON_HANG
ON KHACH_HANG.ma_kh = DON_HANG.ma_kh
GROUP BY KHACH_HANG.ten_kh
ORDER BY COUNT(DON_HANG.ma_don) DESC;

Hệ quản trị làm giúp ta những gì

Ngoài việc lưu dữ liệu: một từ điển dữ liệu mô tả cấu trúc; phân quyền truy cập để người dùng khác nhau thấy dữ liệu khác nhau; kiểm tra hợp lệ giá trị nhập vào; sao lưu và khôi phục; và kiểm soát truy cập đồng thời, dùng cơ chế khoá bản ghi để hai người dùng không ghi đè lên thay đổi của nhau.

Vì sao hệ quản trị quan trọng

Nó tách dữ liệu khỏi các chương trình sử dụng dữ liệu, nhờ đó đổi một ứng dụng không buộc phải viết lại dữ liệu, và nhiều ứng dụng cùng dùng chung một tập dữ liệu nhất quán.

Ví dụ — viết ba truy vấn SQL

Cho các bảng: KHACH_HANG(ma_kh, ten_kh, thanh_pho), DON_HANG(ma_don, ngay, ma_kh, tong_tien).

Viết SQL để: (a) liệt kê tên khách ở Hà Nội theo thứ tự bảng chữ cái; (b) tính tổng tiền đơn hàng của từng khách; (c) tìm những khách có tổng chi trên $10\,000\,000$.

Giải.

(a)

SELECT ten_kh
FROM KHACH_HANG
WHERE thanh_pho = 'Hà Nội'
ORDER BY ten_kh ASC;

Chú ý: chuỗi ký tự phải đặt trong dấu nháy. Đây là lỗi cú pháp bị trừ điểm nhiều nhất.

(b)

SELECT KHACH_HANG.ten_kh, SUM(DON_HANG.tong_tien)
FROM KHACH_HANG INNER JOIN DON_HANG
ON KHACH_HANG.ma_kh = DON_HANG.ma_kh
GROUP BY KHACH_HANG.ten_kh;

Ba chỗ phải có: phép nối, điều kiện ON khớp khoá ngoại với khoá chính, và GROUP BY trên đúng trường không nằm trong hàm tổng hợp.

(c)

SELECT KHACH_HANG.ten_kh, SUM(DON_HANG.tong_tien)
FROM KHACH_HANG INNER JOIN DON_HANG
ON KHACH_HANG.ma_kh = DON_HANG.ma_kh
GROUP BY KHACH_HANG.ten_kh
HAVING SUM(DON_HANG.tong_tien) > 10000000;

Điểm mấu chốt của câu (c): phải dùng HAVING chứ không phải WHERE. WHERE lọc từng DÒNG trước khi gom nhóm, nên nó không nhìn thấy tổng; HAVING lọc từng NHÓM sau khi đã tính tổng. Viết WHERE SUM(...) > … là lỗi cú pháp và cũng là lỗi tư duy.

Bẫy hay mất điểm — Viết INNER JOIN mà quên mệnh đề ON. Không có điều kiện nối, cơ sở dữ liệu ghép MỌI dòng bảng này với MỌI dòng bảng kia — $500$ khách và $2\,000$ đơn thành một triệu dòng vô nghĩa. Đây là lỗi bị trừ điểm nhiều nhất ở câu SQL.
Phải nhớ — DDL định nghĩa cấu trúc, DML thao tác dữ liệu. Nối bảng luôn cần ON khớp khoá ngoại với khoá chính. WHERE lọc dòng, HAVING lọc nhóm. Và nhớ hệ quản trị còn lo phân quyền, sao lưu và khoá bản ghi.

Đọc xong rồi — làm thử ngay

Bài tập của chương Databases and Data Security gồm 14 câu trắc nghiệm và 3 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.

Làm bài tập chương →