CodeGym /Các khóa học /SQL SELF /Xây dựng truy vấn đơn giản với SELECT, WHERE và ORDER BY

Xây dựng truy vấn đơn giản với SELECT, WHERE và ORDER BY

SQL SELF
Mức độ , Bài học
Có sẵn

Bây giờ là lúc gom hết mọi thứ lại và học cách tạo ra các truy vấn đơn giản nhưng hữu ích bằng cách kết hợp SELECT, WHEREORDER BY. Kỹ năng này sẽ cực kỳ hữu dụng cho nhiều bài toán, từ lấy danh sách user cho đến tạo báo cáo nhỏ nhỏ.

Trước khi bắt đầu, nhắc lại một chút về cấu trúc của một truy vấn SQL đơn giản:

SELECT cot1, cot2, cot3
FROM bang
WHERE dieu_kien
ORDER BY cot ASC
LIMIT so_dong
OFFSET so_dong;

Nếu SQL là một tác phẩm văn học, thì SELECT là tiêu đề chương, FROM là nội dung, còn WHERE là giải thích cốt truyện. Còn ORDER BY thì thêm trật tự cho dễ đọc hơn!

Thứ tự các toán tử là cố định. Có thể bỏ qua một số cái, nhưng không được đổi thứ tự đâu nha.

Ví dụ 1: Lấy tên sinh viên có điểm xuất sắc

Giả sử mình có bảng students với cấu trúc và dữ liệu như sau:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

Bạn cần lấy danh sách tất cả sinh viên có điểm xuất sắc (tức là grade = 'A'), sắp xếp theo tên. Làm như này nè:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

Kết quả:

name
Alex
Otto

Giải thích:

  1. SELECT name — chỉ lấy tên thôi. Không cần tốn tài nguyên lấy mấy dữ liệu không xài.
  2. WHERE grade = 'A' — lọc ra ai có điểm xuất sắc.
  3. ORDER BY name ASC — sắp xếp tên sinh viên theo thứ tự abc.

Ví dụ 2: Tìm sản phẩm theo giá

Giờ giả sử có bảng products chứa thông tin sản phẩm:

id product_name category price
1 Điện thoại thông minh Electronics 30000
2 Tivi Electronics 45000
3 Tủ lạnh Appliances 50000
4 Máy hút bụi Appliances 15000
5 Bóng đèn Lighting 500

Bài toán là — lấy danh sách sản phẩm thuộc category "Electronics", sắp xếp giảm dần theo giá. Truy vấn như sau:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

Kết quả:

product_name price
Tivi 45000
Điện thoại thông minh 30000

Giải thích:

  1. SELECT product_name, price — lấy tên sản phẩm và giá.
  2. WHERE category = 'Electronics' — lọc sản phẩm thuộc category "Electronics".
  3. ORDER BY price DESC — sắp xếp kết quả giảm dần theo giá (đắt nhất lên đầu).

Ví dụ 3: Lọc phức tạp với logic

Dùng lại bảng students. Giả sử cần tìm tất cả sinh viên trên 21 tuổi, có điểm B hoặc C, và sắp xếp theo tuổi. Ở đây mình kết hợp nhiều điều kiện:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

Kết quả:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

Giải thích:

  1. WHERE age > 21 — chỉ lấy sinh viên trên 21 tuổi.
  2. AND (grade = 'B' OR grade = 'C') — lọc ai có điểm B hoặc C. Dùng ngoặc tròn để gom điều kiện.
  3. ORDER BY age ASC — sắp xếp kết quả theo tuổi, trẻ nhất lên trước.

Ví dụ 4: Kết hợp sắp xếp và lọc

Quay lại bảng products. Mình muốn tìm sản phẩm giá dưới 50 000, sắp xếp theo category, trong mỗi category thì sắp xếp theo giá tăng dần.

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

Kết quả:

product_name category price
Máy hút bụi Appliances 15000
Điện thoại thông minh Electronics 30000
Tivi Electronics 45000
Bóng đèn Lighting 500

Giải thích:

  1. WHERE price < 50000 — đầu tiên lọc sản phẩm giá dưới 50 000.
  2. ORDER BY category ASC, price ASC — sắp xếp theo category (abc), trong mỗi category thì sắp xếp theo giá tăng dần.

Ví dụ 5: Lỗi phổ biến — quên gom điều kiện

Giờ xem thử có gì sai sót. Nếu quên gom điều kiện khi dùng toán tử logic thì sao?

Truy vấn sai:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

Ở đây OR grade = 'C' sẽ chạy mà không quan tâm AND age > 21, nên truy vấn trả về kết quả không đúng. Bạn sẽ thấy cả những ai có điểm C dù chưa tới 21 tuổi.

Vì vậy luôn luôn dùng ngoặc cho rõ ràng nha:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION