VieTopik
Tiếng HànTiếng AnhIT
  • Góc học tập
Tải app
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
SQL với OracleĐọc dữ liệu
Bài 2/16
5 phút

SELECT và WHERE

Nội dung bài · 5 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt

Cửa hàng có hàng nghìn sản phẩm, nhưng khách chỉ muốn xem món dưới 10.000đ. Đọc cả bảng rồi tự lọc bằng mắt là không khả thi. Bài này hướng dẫn chọn đúng cột và lọc đúng dòng ngay trong câu SQL.

Khái niệm

🔍 SELECT: câu lệnh đọc dữ liệu, cho biết lấy những cột nào từ bảng nào.

🎯 WHERE: điều kiện lọc, chỉ giữ lại những dòng thoả điều kiện.

Ví dụ

SELECT name, price
FROM products
WHERE price < 10000;
  • SELECT name, price: chỉ lấy hai cột, thay vì * lấy tất cả.
  • FROM products: đọc từ bảng products.
  • WHERE price < 10000: chỉ giữ sản phẩm giá dưới 10.000đ.

WHERE, ORDER BY và việc chọn cột làm việc như Where, OrderBy, Select của LINQ, nhưng chạy ngay trong database.

Đúng: giữ Sai: loại products: 5 dòng price < 10000? Bút bi 5000, Thước 7000 Vở, Balo, Máy tính
WHERE xét từng dòng của products, chỉ giữ dòng thoả điều kiện

Các toán tử hay dùng trong WHERE:

Toán tử Ý nghĩa Ví dụ
= <> bằng, khác (C#: ==, !=) city = 'Hà Nội'
> < >= <= so sánh stock > 0
AND OR NOT kết hợp điều kiện (C#: &&, ||, !) stock > 0 AND price < 10000
BETWEEN a AND b nằm trong khoảng, tính cả hai đầu price BETWEEN 5000 AND 12000
IN (...) bằng một trong các giá trị city IN ('Hà Nội', 'TP.HCM')
LIKE khớp mẫu: % là nhiều ký tự bất kỳ name LIKE 'B%'

Thử ngay

SELECT name, price
FROM products
WHERE price BETWEEN 5000 AND 12000
ORDER BY price;

Đoán trước khi chạy: Vở giá đúng 12000. Nó có nằm trong kết quả không?

Xem kết quả
NAME PRICE
Bút bi 5000
Thước 7000
Vở 12000

Có. BETWEEN tính cả hai đầu khoảng, nên 5000 và 12000 đều được giữ lại.

Lỗi hay gặp

Đặt chuỗi trong nháy kép theo thói quen C#. Oracle hiểu "Vở" là tên cột, và báo ORA-00904: invalid identifier.

-- SAI — lỗi: "Vở" bị hiểu là tên cột
SELECT * FROM products WHERE name = "Vở";
-- ĐÚNG — chuỗi dùng nháy đơn
SELECT * FROM products WHERE name = 'Vở';

Trộn AND với OR mà không có ngoặc. AND được tính trước OR, nên câu dưới lấy mọi khách ở Hà Nội, cộng với khách tên An ở Đà Nẵng.

-- SAI — muốn khách tên An ở Hà Nội hoặc Đà Nẵng
SELECT name, city FROM customers
WHERE city = 'Hà Nội' OR city = 'Đà Nẵng'
  AND name = 'An';
-- ĐÚNG — ngoặc gom hai thành phố lại trước
SELECT name, city FROM customers
WHERE (city = 'Hà Nội' OR city = 'Đà Nẵng')
  AND name = 'An';

Tóm tắt

  • SELECT cột FROM bảng WHERE điều kiện.
  • Chỉ lấy những cột cần, tránh SELECT * trong code thật.
  • BETWEEN tính cả hai đầu, IN so với danh sách, LIKE khớp mẫu với %.
  • Chuỗi dùng nháy đơn. Trộn AND với OR thì thêm ngoặc.

Tự kiểm tra

0/3 câu
Câu 1

Câu nào lấy sản phẩm có tên bắt đầu bằng chữ "B"?

Câu 2

WHERE stock > 0 AND price < 10000 OR price > 400000 được Oracle hiểu thế nào?

Câu 3

Cách nào gọn nhất để lấy khách ở Hà Nội, Đà Nẵng hoặc Huế?

Database, bảng và khoáSắp xếp và phân trang

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt