SysVN tiếp tục giới thiệu bài viết “Restricting and Sorting Data” trong một câu truy vấn dùng mệnh đề SELECT. Restricting and Sorting Data tôi tạm dịch sang tiếng Việt là giới hạn và sắp xếp dữ liệu. Tài liệu kỹ thuật bằng tiếng Anh có ý nghĩa nguyên bản, đọc rất dễ hiểu. Khi dịch sang tiếng Việt, tùy theo cách hiểu của mỗi người mà có cách dịch khá nhau. Đó là lý do tôi thích đọc tài liệu tiếng Anh.
Sau khi hiểu được bài này các bạn có thể làm được những vấn đề sau:
- Giới hạn những hàng hiển thị dữ liệu bởi một câu truy vấn
- Sắp xếp lại dữ liệu những hàng được hiển thị bởi một câu truy vấn
- Cách sử dụng mệnh đề WHERE
- Cách sử dụng những toán tử so sánh =, <=, BETWEEN, IN, LIKE và điều kiện NULL
- Cách sử dụng những toán tử logic: AND, OR, NOT
- Giới hạn những hàng được hiển thị
Cú pháp:
SELECT *|{[DISTINCT] column|expression [alias],…}
FROM table
[WHERE logical expression(s)];
Chú ý:
- Giới hạn những hàng được hiển thị bằng cách sử dụng mệnh đề WHERE. Mệnh đề WHERE chứa một điều kiện. Nếu điều kiện là đúng và những hàng khớp với điều kiện đó thì trả về kết quả.
- Mệnh để WHERE đứng sau mệnh đề FROM
- Không sử dụng Column Alias trong mệnh đề WHERE
- Mệnh đề WHERE so sánh những giá trị trong những column, literal, biểu thức toán học, những hàm. Nó bao gồm ba thành phần:
– Tên column
– Điều kiện so sánh
– Tên column, hằng số, danh sách các giá trị
Ví dụ: Với vị dụ trên hiển thị employee_id, last_name, job_id, department_id của những nhân viên mà có mã phòng ban là 90
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90;
2. Chuỗi ký tự và ngày
Quy tắc:
- Chuỗi ký tự và ngày (Character Strings and Dates) được đặt trong dấu nháy đơn.
- Chuối ký tự phân biệt hoa thường, giá trị ngày (date) phụ thuộc vào định dạng
- Định dạng mặc định của kiểu ngày là DD-MON-RR. Chi tiết định dạng RR và thay đổi định dạng mặc định sẽ tìm hiểu trong bài sau
Ví dụ:
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = ‘King’;
SELECT last_name
FROM employees
WHERE hire_date = ’17-FEB-95′;
3. Toán tử so sánh
Toán tử so sánh được sử dụng trong điều kiện để so sánh một biểu thức với một giá trị hoặc biểu thức khác. Toán tử so sánh được sử dụng trong mệnh đề WHERE có định dạng. Có thể sử dụng != và ^= để so sánh không bằng.
… WHERE expr operator value
Ví dụ:
… WHERE hire_date = ’01-JAN-95‘
… WHERE salary >= 6000
… WHERE last_name = ‘Smith’
Ví dụ: Hiển thị last_name, salary của những nhân viên có lương dưới 3000$
SELECT last_name, salary
FROM employees
WHERE salary <= 3000 ;
a. Sử dụng toán tử BETWEEN
BETWEEN thường được sử dụng với AND để hiển thị kết quả những hàng dựa vào một dãy giá trị điều kiện
Ví dụ: Hiển thị last_name, salary của những nhân viên mà có lương từ 2500$ đến 3500$
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500 ;
BETWEEN cũng có thể được sử dụng với kiểu ký tự. Ví dụ:
SELECT last_name
FROM employees
WHERE last_name BETWEEN ‘King’ AND ‘Smith’
b. Sử dụng toán tử IN
Để kiểm tra những giá trị trong một danh sách các giá trị thường sử dụng toán tử IN
Ví dụ: Hiển thị employee_id, last_name, salary, manager_id của những nhân viên mà có manager_id là 100 hoặc 101 hoặc 201
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201) ;
Ví dụ trên có thể sử dụng điều kiện OR
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id = 100
OR manager_id = 101
OR manager_id = 201
Chú ý:
- Danh sách các giá trị được chỉ ra trong IN theo thứ tự ngẫu nhiên
- Toán tử IN có thể sử dụng bất kỳ kiểu dữ liệu nào
Ví dụ: Hiển thị employee_id, manager_id, department_id của những nhân viên mà có last_name là Hartstein hoặc Vargas
SELECT employee_id, manager_id, department_id
FROM employees
WHERE last_name IN (‘Hartstein’, ‘Vargas’);
c. Sử dụng toán tử LIKE
LIKE được sử dụng để so sánh một giá trị với các giá trị tương tự bởi sử dụng các toán tử wildcard. Có hai wildcard được sử dụng kết hợp với toán tử LIKE là % và _
- % đại diện cho 0 hoặc nhiều ký tự chữ hoặc số
- _ đại diện cho một ký tự chữ hoặc số
Ví dụ: Hiển thị tên của những nhân viên bắt đầu ký tự “S”
SELECT first_name
FROM employees
WHERE first_name LIKE ‘S%’ ;
Tùy vào từng trường hợp, LIKE cũng có thể thay thế cho BETWEEN
Ví dụ: Hiển thị last_name, hire_date của những nhân viên bắt đầu làm việc từ tháng 1-1995 đên 12-1995
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE ‘%95’;
Có thể kết hợp 2 wildcard (%, _) với những ký tự
Ví dụ:
SELECT last_name
FROM employees
WHERE last_name LIKE ‘_o%’ ;
Nếu trong chuỗi ký tự hiển thị yêu cầu có chứa có ký tự đặc biệt như %, _ thì ta có thể dùng ESCAPE. Ví dụ
SELECT employee_id, last_name, job_id
FROM employees
WHERE job_id LIKE ‘%SA\_%’ ESCAPE ‘\’;
d. Điều kiện NULL
Để kiểm tra điều kiện Null có thể dùng hai mệnh đề IS NULL, IS NOT NULL. Giá trị Null là giá trị không có, không được gán, không biết, không phải zero, không phải khoảng trắng. Do đó ta không thể dùng dấu = trong biểu thức kiểm tra, bởi vì giá trị Null bằng hoặc không bằng với bất kỳ giá trị nào
- IS NULL để kiểm tra giá trị là Null
- IS NOT NULL để kiểm tra giá trị không phải là Null
Ví dụ: Hiển thị last_name, manager_id của những nhân viên nào không có manager_id
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL ;
Ví dụ: Hiển thị last_name, job_id, commission_pct của những nhân viên mà có nhận commission
SELECT last_name, job_id, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
e. Sử dụng toán tử logic
Toán tử logic trong SQL bao gồm: AND, OR, NOT
Toán tử AND
Ví dụ: Hiển thị employee_id, last_name, job_id, salary của những nhân viên mà có lương trên 10000$ và job_id có chưa MAN
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
AND job_id LIKE ‘%MAN%’ ;
Bảng bên dưới là kết quả của sự kết hợp 2 biểu thức sử dụng AND
Toán tử OR
Ví dụ: Hiển thị employee_id, last_name, job_id, salary của những nhân viên mà có lương trên 10000$ hoặc có job_id có chưa MAN
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE ‘%MAN%’ ;
Bảng bên dưới là kết quả của sự kết hợp 2 biểu thức sử dụng OR
Toán tử NOT
Ví dụ: Hiển thị last_name, job_id của những nhân viên mà có job_id không phải là IT_PROG hoặc ST_CLERK hoặc SA_REP
SELECT last_name, job_id
FROM employees
WHERE job_id
NOT IN (‘IT_PROG’, ‘ST_CLERK’, ‘SA_REP’) ;
Bảng bên dưới là kết quả của việc sử dụng toán tử NOT
NOT | TRUE | FALSE | NULL |
FALSE | TRUE | NULL |
Chú ý: Toán tử NOT cũng có thể được sử dụng với các toán tử khác như BETWEEN, LIKE, NULL.
Vi dụ:
… WHERE job_id NOT IN (‘AC_ACCOUNT’, ‘AD_VP’)
… WHERE salary NOT BETWEEN 10000 AND 15000
… WHERE last_name NOT LIKE ‘%A%’
… WHERE commission_pct IS NOT NULL