Ngu ngơ học làm web (100) - mySQL - truy vấn đơn giản

Tiếp theo của: Ngu ngơ học làm web (99) - mySQL – các thao tác
-----

Phần 100. mySQL – truy vấn đơn giản


Xem và làm theo clip số 4 của thầy Nguyễn Anh Tuấn:

Ở phần trước đã tạo cơ sở dữ liệu, đã tạo bảng, tạo khóa, thực hiện ràng buộc khóa ngoại. Để thực hành phần truy vấn, cần nhập một số dữ liệu mẫu vào để thử. Học hành là một quá trình, không có khái niệm “đi tắt đón đầu”, đi tắt thường sẽ đi vào đường cụt hoặc sập hố. Người ta đang đi đường cao tốc, mình thì đi bộ, làm gì có cách nào mà đón được đầu người ta, không nên ảo tưởng.

Truy vấn đơn giản,

1. Liệt kê danh sách món ăn gồm có Tên món, Nội dung tóm tắt, Đơn giá?

Ví dụ một câu lệnh chọn: SELECT * FROM mon_an WHERE 1

Lưu ý: các lệnh không phân biệt chữ hoa, chữ thường.

Trong đó,

- SELECT: lấy cột (field) nào?
- FROM: lấy từ bảng nào?
- WHERE: lấy theo điều kiện nào?

Câu lệnh:
SELECT ten_mon,noi_dung_tom_tat,don_gia
FROM mon_an

2. Liệt kê danh sách món ăn gồm Tên loại, Tên món, Nội dung tóm tắt, Đơn giá và sắp xếp tăng dần theo Tên loại.

SELECT ten_loai,ten_mon,noi_dung_tom_tat,don_gia
FROM mon_an,loai_mon_an
WHERE mon_an.ma_loai=loai_mon_an.ma_loai
ORDER by ten_loai

3. Liệt kê danh sách khách hàng gồm có các thông tin sau: Tên khách hàng, Địa chỉ, Điện thoại, danh sách được sắp tăng theo Tên khách hàng.

SELECT ten_khach_hang, dia_chi, dien_thoai
FROM khach_hang
ORDER by ten_khach_hang

4. Liệt kê danh sách món ăn gồm có các thông tin sau: Tên món, Nội dung tóm tắt, Đơn giá, và sắp xếp giảm theo cột đơn giá.

SELECT ten_mon, noi_dung_tom_tat, don_gia
FROM mon_an
ORDER BY don_gia DESC

5. Liệt kê danh sách món ăn gồm có các thông tin sau: Tên món, Nội dung tóm tắt, Đơn giá, và chỉ liệt kê các món ăn có tên bắt đầu là “S”.

SELECT ten_mon, noi_dung_tom_tat, don_gia, noi_dung_chi_tiet
FROM mon_an
WHERE ten_mon LIKE "S%"

Từ khóa LIKE là toán tử so sánh, nghĩa là tương tự, gần đúng. %: đại diện cho các kí tự bất kì.

6. Liệt kê danh sách món ăn mà trong tên có từ “gà”.

SELECT *
FROM `mon_an`
WHERE ten_mon REGEXP '[[:<:]]gà[[:>:]]'

Đọc thêm về biểu thức chính quy (regular expression) trong mySQL tại đây: http://dev.mysql.com/doc/refman/5.7/en/regexp.html

Để ý đoạn này:

[[:<:]], [[:>:]]
These markers stand for word boundaries. They match the beginning and end of words, respectively. A word is a sequence of word characters that is not preceded by or followed by word characters. A word character is an alphanumeric character in the alnum class or an underscore (_).
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

7. Liệt kê danh sách món ăn có đơn giá từ 50.000 đến 100.000

SELECT *
FROM `mon_an`
WHERE don_gia>=50000 and don_gia<=100000

Hoặc

SELECT *
FROM `mon_an`
WHERE don_gia BETWEEN 50000 and 100000

8. Liệt kê thực đơn có món “súp”

Thêm bảng thuc_don vào CSDL, và nhập dữ liệu cho bảng thuc_don.
thuc_don (Thực đơn)

#
Name
Type
Collation
Attributes
Null
Default
Extra
1
ma_thuc_don
int(11)


No
None
AUTO_INCREMENT
2
ten_thuc_don
varchar(100)
utf8_unicode_ci

No
None

3
don_gia
double


No
None

4
don_gia_khuyen_mai
double


No
None

5
noi_dung
varchar(500)
utf8_unicode_ci

No
None

6
Hinh
varchar(50)


No
None


SELECT *
FROM `thuc_don`
WHERE noi_dung REGEXP '[[:<:]]Súp[[:>:]]'

9. Liệt kê các thực đơn có đơn giá lớn hơn 1.500.000 VNĐ.

SELECT *
FROM thuc_don
WHERE don_gia >= 1500000

Tên bảng hoặc tên các cột có thể bao bằng dấu `` hoặc không đều được?

Hoặc

SELECT *
FROM `thuc_don`
WHERE `don_gia`>= 1500000

10. Liệt kê thông tin các món ăn ‘Bánh canh’, ‘Gà quay’, ‘Súp ngô cua’

SELECT *
FROM `mon_an`
WHERE ten_mon = "Bánh canh" or ten_mon="Gà quay" or ten_mon = "Súp ngô cua"

Hoặc dùng từ khóa “IN”:

SELECT *
FROM `mon_an`

WHERE ten_mon IN ("Bánh canh", "Gà quay", "Súp ngô cua")
-----------
Cập nhật 16/1/2017
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web