Truy vấn cơ sở dữ liệu cơ bản¶
Sách Tin học lớp 12 (chương trình trước 2024) có nội dung về truy vấn cơ sở dữ liệu, minh họa bằng công cụ Query của Microsoft Access. Nội dung này là đúng nhưng chưa ổn.
Bởi trong thế giới công nghiệp, các phần mềm có giao diện khác nhau và thường thay đổi, trong khi dòng lệnh chỉ biến tấu chứ không biến đổi hoàn toàn, lại có tính ứng dụng cao.
Cho nên, dạy học sinh truy vấn bằng SQL, dù ở mức cơ bản, vẫn cần thiết hơn và ngầu hơn.
Bài viết này giới thiệu sơ nét về SQL và một số câu lệnh ví dụ, hướng đến học sinh phổ thông.
SQL¶
Khái quát¶
SQL, viết tắt của Structured Query Language, là ngôn ngữ dùng để ### Truy vấn và xử lý cơ sở dữ liệu.
Cú pháp chung¶
Giải thích:
- Để hiển thị tất cả cột liên quan, ta có thể gõ
SELECT *
. <điều kiện>
trong mệnh đềWHERE
sử dụng các toán tử so sánh như<
<=
>
>=
=
<>
(so sánh khác nhau).- Trong
<điều kiện>
, chuỗi phải được đặt trong dấu ngoặc kép, còn số thì không. Cần cẩn trọng các khoảng trắng dư thừa khi gõ chuỗi. - Trong
WHERE
, có thể sử dụng toán tửLIKE
để so sánh gần bằng/gần giống. -
Ký tự đại diện khi sử dụng toán tử
LIKE
là:%
đại diện cho không ký tự, một ký tự hoặc nhiều ký tự._
đại diện cho một ký tự duy nhất.
-
Từ khóa trong mệnh đề
ORDER BY
:DESC
: giảm dầnASC
: tăng dần. Nếu sắp xếp tăng dần, ta có thể bỏ qua, không cần nêu rõ.
Công cụ thực hiện truy vấn¶
Chương trình sử dụng: SQL Online IDE.
Nếu chưa biết, bạn hãy xem sơ bài Hướng dẫn thực hành ### Truy vấn cơ sở dữ liệu trực tuyến
Cơ sở dữ liệu minh họa¶
Cơ sở dữ liệu minh họa trong bài là Coffee shop, tải tại đây.
Đây là cơ sở dữ liệu theo dạng SQLite, phần mở rộng của tập tin là .sqlite hoặc .sqlite3
Nếu link hết hạn, bạn có thể liên lạc theo email vtchitruong@gmail.com hoặc tự tìm trên mạng một cơ sở dữ liệu SQLite khác.
Lược đồ cơ sở dữ liệu Coffee shop như sau:
-
customers(customer_id, customer_name, phone, district, province, customer_type, major, achievements)
-
menu(item_id, item_name, item_type, price, description, real_name)
-
invoice(invoice_id, invoice_date, customer_id, item_id, amount, actual_price, total)
Một số truy vấn ví dụ¶
Truy vấn 1¶
- Lập danh sách các khách hàng vip.
-
Gợi ý:
Ở góc độ là người học, bạn không nên dùng
SELECT *
, mà hãy tự liệt kê các thuộc tính (cột) có liên quan.
Khách hàng vip là khách có dữ liệu"V"
ở thuộc tínhcustomer_type
.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 2¶
- Lập danh sách các khách hàng vip và thân thiết.
-
Gợi ý:
Khách hàng thân thiết là khách có dữ liệu
“F”
ở thuộc tínhcustomer_type
.
Thêm mệnh đềOR
, chứ không phảiAND
.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 3¶
- Lập danh sách các khách hàng vip là tỉ phú.
-
Gợi ý:
Gõ thêm thuộc tính mới là
major
.
Thêm mệnh đềAND
với thuộc tínhmajor
.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 4¶
- Lập danh sách các khách hàng có tên bắt đầu bằng chữ N và T.
-
Gợi ý:
Sử dụng toán tử so sánh gần bằng
LIKE
và ký tự đại diện%
.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 5¶
- Cùng truy vấn trên, sắp xếp danh sách tăng dần theo lĩnh vực công tác của khách hàng.
-
Gợi ý:
Thêm mệnh đề
ORDER BY
vào truy vấn trên.
Sắp xếp tăng dần thì không cần gõ từ khóaASC
(Ascending).
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 6¶
- Cùng truy vấn trên, nếu khách trùng nhau về lĩnh vực công tác thì sắp xếp loại khách giảm dần.
-
Gợi ý:
Thêm thuộc tính
customer_type
vào mệnh đềORDER BY
.
Từ khóaDESC
(Descending) dùng để sắp xếp giảm dần.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 7¶
- Lập danh sách các món là thức ăn. Sắp xếp theo giá giảm dần.
-
Gợi ý:
Chuyển sang truy vấn dữ liệu ở bảng
menu
.
Thức ăn là các mẫu tin có dữ liệu"Food"
ở thuộc tínhitem_type
.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 8¶
- Lập danh sách các món là thức uống. Sắp xếp theo giá giảm dần.
-
Gợi ý:
Cách 1: Dùng toán tử
OR
để liệt kê các dữ liệu như"Coffee"
,"Tea"
, v.v... của thuộc tínhitem_type
.
Cách 2: Dùng toán tử so sánh khác<>
để lấy các mẫu tin không phải"Food"
.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 9¶
- Cùng truy vấn trên, sắp xếp các món theo loại món giảm dần, nếu trùng thì sắp xếp theo đơn giá giảm dần.
-
Gợi ý:
Khi sắp xếp giảm dần, phải ghi từ khóa
DESC
ngay sau mỗi thuộc tính cần sắp xếp.
Hôm nay, tôi không thông minh hơn học sinh lớp 5.
Truy vấn 10¶
- Lập danh sách tất cả các món có giá từ 50 ngàn đến 200 ngàn. Sắp xếp theo loại món giảm dần và tên món tăng dần.
-
Gợi ý:
Thuộc tính
price
nằm trong đoạn [50k, 200k] nên ta sử dụng toán tửAND
.
Yêu cầu sắp xếp được hiểu rằng: sắp xếp loại món trước, nếu trùng loại món thì mới sắp xếp tên món.