Tin Học KHMT
Ôn tập Tin học THPT › Tin học 11 - Khoa học máy tính › Bài 16
Tin học 11 - Khoa học máy tính

Bài 16. Tạo bảng, đặt ràng buộc và thống kê dữ liệu bằng SQL

Bài học chỉ cách dùng CREATE TABLE để dựng khung một bảng dữ liệu, cách gài sẵn các ràng buộc để hệ quản trị tự từ chối dữ liệu sai, và cách dùng các hàm tổng hợp cùng GROUP BY, HAVING để máy tính thống kê thay cho việc đếm tay.

Chủ đề C · Tổ chức, lưu trữ & tìm kiếm thông tin - đọc khoảng 13 phút · 23 câu luyện tập trong ứng dụng

Tương ứng sách giáo khoa
  • Cánh DiềuTin học 11 (Khoa học máy tính) - Chủ đề F · Bài 6. Truy vấn trong cơ sở dữ liệu quan hệ (tiếp theo)tr. 71
  • Cánh DiềuTin học 11 (Tin học ứng dụng) - Chủ đề F · Bài 6. Truy vấn trong cơ sở dữ liệu quan hệ (tiếp theo)tr. 71
Xem bảng đối chiếu cả bộ →

Bắt đầu bằng một hình dung

Tháng mười, trường của Long tổ chức giải bóng đá học sinh. Ban tổ chức dán ở bảng tin một tờ giấy khổ lớn: đội nào muốn dự thì tự ghi vào bốn ô - tên đội, lớp, tên đội trưởng và một số điện thoại để ban tổ chức gọi khi có thay đổi lịch thi đấu.

Đến hạn chốt danh sách, tờ giấy kín chữ nhưng rắc rối thì đủ kiểu. Có đội đặt tên thật kêu rồi bỏ trống hẳn ô số điện thoại, đến hôm trời mưa phải dời trận thì chẳng biết báo cho ai. Hai đội ở hai lớp khác nhau lại cùng chọn tên "Sấm Sét", loa gọi lên sân mà cả hai bên cùng đứng dậy. Lại có một dòng ghi lớp 11A9, trong khi cả trường chỉ có đến lớp 11A8 - hoá ra bạn ấy viết vội, nhầm mất một chữ số.

Sang năm sau, thầy tổng phụ trách làm khác. Thay cho tờ giấy, thầy đặt ở phòng Đoàn một máy tính mở sẵn biểu mẫu đăng kí. Bỏ trống số điện thoại thì máy không cho gửi. Gõ một tên đội đã có người đặt thì máy báo ngay tại chỗ để đổi sang tên khác. Còn lớp thì không phải gõ tay mà chọn trong danh sách các lớp có thật của trường, nên không thể xuất hiện lớp 11A9 nào nữa. Cái sai bị chặn ngay ở cửa, thay vì nằm im trong danh sách chờ đến ngày thi đấu mới lộ ra.

Chưa hết. Cuối đợt đăng kí, thầy còn cần biết mỗi khối có bao nhiêu đội, khối nào từ năm đội trở lên thì tách ra một bảng đấu riêng. Với tờ giấy ngoài bảng tin thì phải ngồi đếm tay, đếm hai lượt ra hai con số. Với chiếc máy tính kia, thầy chỉ gõ một câu hỏi là có ngay bảng kết quả. Dặn máy trước những gì nó phải kiểm tra, rồi hỏi máy đúng cách để lấy con số thống kê - đó chính là hai việc ta sẽ học trong bài này.

Nội dung bài học

  1. 1) Dựng khung cho bảng bằng lệnh CREATE TABLE
  2. 2) Ràng buộc: hàng rào chặn dữ liệu sai ngay từ cửa
  3. 3) Thống kê dữ liệu: hàm tổng hợp, GROUP BY và ghép bảng

Tóm tắt lý thuyết cần nhớ

  • Lệnh CREATE TABLE dựng khung một bảng mới: đặt tên bảng và khai báo từng cột kèm kiểu dữ liệu (INTEGER, REAL, TEXT, DATE); còn DROP TABLE xoá cả cấu trúc lẫn dữ liệu, khác hẳn DELETE chỉ xoá các dòng.
  • Các ràng buộc PRIMARY KEY (không trùng, không rỗng), NOT NULL (bắt buộc có giá trị), UNIQUE (không trùng) và FOREIGN KEY (phải tồn tại ở bảng được tham chiếu) được khai báo ngay lúc tạo bảng, giúp hệ quản trị tự động từ chối dữ liệu sai ngay khi thêm hoặc sửa.
  • Năm hàm tổng hợp COUNT, SUM, AVG, MAX, MIN rút cả một cột về một con số; kết hợp GROUP BY để gộp các dòng cùng giá trị thành nhóm rồi thống kê riêng cho từng nhóm.
  • WHERE lọc từng dòng TRƯỚC khi gộp nhóm, còn HAVING lọc từng nhóm SAU khi gộp; muốn lấy dữ liệu từ hai bảng thì dùng JOIN ... ON nối qua đúng cặp khoá chính - khoá ngoại.

Thuật ngữ tiếng Anh trong bài

Tiếng AnhĐọc làNghĩa
tableTÂY-bồbảng (trong CSDL)
Nơi chứa dữ liệu theo hàng và cột - giống bảng điểm của lớp: mỗi hàng một bạn, mỗi cột một thông tin.
primary keyPRAI-mơ-ri kikhoá chính
Cột dùng để phân biệt mỗi hàng, không ai trùng ai - như số báo danh riêng của mỗi học sinh.
CREATE TABLEcri-ÊT TÂY-bồlệnh SQL tạo bảng mới
Là lệnh dựng khung cho một bảng: đặt tên bảng rồi khai báo từng cột kèm kiểu dữ liệu (INTEGER, REAL, TEXT, DATE).
constraintcơn-STRÂY-ntràng buộc
Là điều kiện gài sẵn ở từng cột để hệ quản trị tự động từ chối dữ liệu sai ngay khi nhập.
aggregate functionÉ-gri-gợt PHĂNG-sầnhàm tổng hợp
Là nhóm hàm rút cả một cột dữ liệu về một con số duy nhất: COUNT đếm, SUM cộng, AVG lấy trung bình, MAX và MIN lấy lớn nhất, nhỏ nhất.
GROUP BYgrúp BAIgộp nhóm theo cột
Là mệnh đề gộp các dòng có cùng giá trị ở một cột thành một nhóm, rồi tính hàm tổng hợp cho từng nhóm.

Câu hỏi trắc nghiệm có đáp án

Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 23 câu, chấm điểm tự động và giải thích từng câu sai.

Câu 1 · Nhận biết
Trong SQL, muốn tạo một bảng mới cùng danh sách các cột và kiểu dữ liệu của từng cột, ta dùng lệnh nào?
  1. INSERT INTO ... VALUES ...
  2. SELECT ... FROM ...
  3. CREATE TABLE ... ( ... )
  4. UPDATE ... SET ...
Đáp án: C - Chỉ có CREATE TABLE làm nhiệm vụ dựng khung bảng: đặt tên bảng rồi khai báo từng cột kèm kiểu dữ liệu. INSERT INTO chỉ thêm một dòng dữ liệu vào bảng đã có sẵn; SELECT ... FROM chỉ truy vấn để xem dữ liệu chứ không tạo ra bảng; UPDATE ... SET chỉ sửa giá trị của các dòng đang có. Cả ba lệnh này đều đòi hỏi bảng phải tồn tại từ trước.
Câu 2 · Nhận biết
Khai báo ràng buộc NOT NULL cho cột HoTen khi tạo bảng có tác dụng gì?
  1. Mọi dòng thêm vào đều bắt buộc phải có giá trị ở cột HoTen, không được để trống
  2. Các giá trị trong cột HoTen không được trùng nhau giữa các dòng
  3. Giá trị của cột HoTen phải tồn tại sẵn ở một bảng khác được tham chiếu
  4. Hệ quản trị sẽ tự động điền họ tên nếu người dùng bỏ trống ô này
Đáp án: A - NOT NULL nghĩa là 'không được rỗng': hệ quản trị sẽ từ chối bất kì dòng nào bỏ trống cột đó. Ràng buộc chống trùng lặp là UNIQUE (hoặc PRIMARY KEY) chứ không phải NOT NULL. Ràng buộc buộc giá trị phải có sẵn ở bảng khác là FOREIGN KEY. Và không có ràng buộc nào tự nghĩ ra họ tên để điền hộ - hệ quản trị chỉ biết từ chối dữ liệu sai chứ không bịa dữ liệu.
Câu 3 · Thông hiểu
Hai lệnh DROP TABLE LuotMuon; và DELETE FROM LuotMuon; khác nhau ở điểm căn bản nào?
  1. Cả hai đều xoá toàn bộ dữ liệu và giữ lại bảng, chỉ khác nhau về tốc độ thực hiện
  2. DROP TABLE chỉ xoá những dòng thoả điều kiện, còn DELETE xoá mọi dòng của bảng
  3. DROP TABLE xoá dữ liệu nhưng giữ lại cấu trúc bảng, còn DELETE xoá luôn cả cấu trúc
  4. DROP TABLE xoá cả cấu trúc bảng lẫn dữ liệu bên trong, còn DELETE chỉ xoá các dòng dữ liệu và bảng rỗng vẫn còn tồn tại
Đáp án: D - DROP TABLE huỷ hẳn bảng khỏi cơ sở dữ liệu: sau lệnh đó không còn tên bảng LuotMuon nữa, muốn dùng lại phải CREATE TABLE từ đầu. DELETE chỉ xoá nội dung các dòng, khung bảng và các cột vẫn nguyên vẹn nên hôm sau vẫn INSERT dữ liệu mới vào được. Phương án đầu sai vì DROP không giữ lại bảng. Phương án thứ hai đảo ngược vai trò và còn nhầm ở chỗ DELETE có thể kèm WHERE để chỉ xoá một số dòng. Phương án thứ ba mô tả đúng nhưng gán nhầm cho hai lệnh.
Câu Đúng/Sai (Phần II) · Thông hiểu
Cho biết mỗi phát biểu sau đúng hay sai:
  • a)Ràng buộc FOREIGN KEY buộc giá trị điền vào cột khoá ngoại phải là một giá trị đã tồn tại ở cột khoá chính của bảng được tham chiếu.Đúng
  • b)Hàm AVG(SoNgayMuon) trả về số lượng dòng đang có trong cột SoNgayMuon.Sai
  • c)Mệnh đề GROUP BY Lop gộp các dòng có cùng giá trị ở cột Lop thành một nhóm, để hàm tổng hợp được tính riêng cho từng lớp.Đúng
  • d)Trong một truy vấn, WHERE và HAVING có thể thay thế cho nhau vì cả hai đều làm nhiệm vụ lọc dữ liệu.Sai
Vì sao:
  • (a) Đúng - đó chính là tác dụng của khoá ngoại: không thể ghi một lượt mượn cho mã độc giả chưa hề có trong bảng DocGia.
  • (b) Sai - AVG tính trung bình cộng các giá trị của cột; hàm đếm số dòng là COUNT.
  • (c) Đúng - GROUP BY gom các dòng cùng giá trị thành nhóm rồi COUNT, SUM, AVG... được tính riêng rẽ trên từng nhóm.
  • (d) Sai - hai mệnh đề làm việc ở hai thời điểm khác nhau: WHERE lọc từng dòng trước khi gộp nhóm, HAVING lọc từng nhóm sau khi đã gộp; điều kiện chứa hàm tổng hợp bắt buộc phải đặt ở HAVING.

Thử ngay: minh hoạ từng bước

Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.

Học trọn bài này trong ứng dụng

Bài giảng đầy đủ, 23 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.

Mở bài 16 trong ứng dụng

Phần học miễn phí, không cần tạo tài khoản.