PostgreSQL - Mệnh đề WHERE
Mệnh đề WHERE của PostgreSQL được sử dụng để chỉ định một điều kiện trong khi tìm nạp dữ liệu từ một bảng hoặc kết hợp với nhiều bảng.
Nếu điều kiện đã cho được thỏa mãn, thì chỉ khi đó nó mới trả về giá trị cụ thể từ bảng. Bạn có thể lọc ra các hàng mà bạn không muốn đưa vào tập kết quả bằng cách sử dụng mệnh đề WHERE.
Mệnh đề WHERE không chỉ được sử dụng trong câu lệnh SELECT mà còn được sử dụng trong câu lệnh UPDATE, DELETE, v.v., mà chúng ta sẽ xem xét trong các chương tiếp theo.
Cú pháp
Cú pháp cơ bản của câu lệnh SELECT với mệnh đề WHERE như sau:
SELECT column1, column2, columnN
FROM table_name
WHERE [search_condition]
Bạn có thể chỉ định điều kiện tìm kiếm bằng cách sử dụng các toán tử so sánh hoặc lôgic. like>, <, =, LIKE, NOT, v.v ... Các ví dụ sau sẽ làm rõ khái niệm này.
Thí dụ
Xem xét bảng COMPANY có các bản ghi như sau:
testdb# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Dưới đây là các ví dụ đơn giản cho thấy việc sử dụng các toán tử logic PostgreSQL. Câu lệnh SELECT sau đây sẽ liệt kê tất cả các bản ghi có AGE lớn hơn hoặc bằng 25AND lương lớn hơn hoặc bằng 65000,00 -
testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+-------+-----+------------+--------
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
(2 rows)
Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có AGE lớn hơn hoặc bằng 25 OR lương lớn hơn hoặc bằng 65000,00 -
testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+-------+-----+-------------+--------
1 | Paul | 32 | California | 20000
2 | Allen | 25 | Texas | 15000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
(4 rows)
Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi mà AGE không phải là NULL có nghĩa là tất cả các bản ghi, vì không bản ghi nào có AGE bằng NULL -
testdb=# SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(7 rows)
Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi mà NAME bắt đầu bằng 'Pa', không quan trọng những gì đến sau 'Pa'.
testdb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age |address | salary
----+------+-----+-----------+--------
1 | Paul | 32 | California| 20000
Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có giá trị AGE là 25 hoặc 27 -
testdb=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+-------+-----+------------+--------
2 | Allen | 25 | Texas | 15000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
(3 rows)
Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có giá trị AGE không phải là 25 hay 27 -
testdb=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
3 | Teddy | 23 | Norway | 20000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(4 rows)
Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có giá trị AGE ở GIỮA 25 VÀ 27 -
testdb=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+-------+-----+------------+--------
2 | Allen | 25 | Texas | 15000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
(3 rows)
Câu lệnh SELECT sau sử dụng truy vấn con SQL trong đó truy vấn con tìm thấy tất cả các bản ghi có trường AGE có SALARY> 65000 và mệnh đề WHERE mới hơn đang được sử dụng cùng với toán tử EXISTS để liệt kê tất cả các bản ghi có AGE từ truy vấn bên ngoài tồn tại trong kết quả trả về bằng truy vấn phụ -
testdb=# SELECT AGE FROM COMPANY
WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
age
-----
32
25
23
25
27
22
24
(7 rows)
Câu lệnh SELECT sau sử dụng truy vấn con SQL trong đó truy vấn con tìm thấy tất cả các bản ghi có trường AGE có SALARY> 65000 và mệnh đề WHERE mới hơn đang được sử dụng cùng với toán tử> để liệt kê tất cả các bản ghi mà AGE từ truy vấn bên ngoài lớn hơn tuổi trong kết quả trả về bởi truy vấn phụ -
testdb=# SELECT * FROM COMPANY
WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:
id | name | age | address | salary
----+------+-----+------------+--------
1 | Paul | 32 | California | 20000