Предложение WHERE в PostgreSQL
В PostgreSQL, когда нам нужно запрашивать данные из одной или нескольких таблиц по заданным условиям, мы можем добавить предложение WHERE в оператор SELECT, чтобы отфильтровать ненужные данные.
Предложение WHERE можно использовать не только в операторах SELECT, но и в UPDATE, DELETE и других операторах.
Синтаксис
Ниже приведён общий синтаксис чтения данных из базы данных с использованием предложения WHERE в операторе SELECT:
SELECT column1, column2, columnN FROM table_name WHERE [condition1]
В предложении WHERE можно использовать операторы сравнения или логические операторы, такие как>, <, =, LIKE, NOTи т. д.
Создайте таблицу COMPANY (Скачать SQL-файл COMPANY), со следующим содержимым данных:
exampledb# 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)В следующих примерах мы используем логические операторы для чтения данных из таблицы.
AND
НайтиAGE (age)поле со значением больше или равным 25, иSALARY (salary)поле со значением больше или равным 65000:
exampledb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; id | name | age | address | salary ----+-------+-----+------------+-------- 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 (2 rows)
OR
НайтиAGE (age)поле со значением больше или равным 25, илиSALARY (salary)поле со значением больше или равным 65000:
exampledb=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; 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)
NOT NULL
Найти записи в таблице COMPANY, где полеAGE (age)не пусто:
exampledb=# SELECT * FROM COMPANY WHERE AGE IS NOT NULL; 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)
LIKE
Найти в таблице COMPANY записи, где полеNAME (name)начинается с Pa:
exampledb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%'; id | name | age |address | salary ----+------+-----+-----------+-------- 1 | Paul | 32 | California| 20000
IN
Следующая инструкция SELECT выводит записи, где полеAGE (age)равно 25 или 27:
exampledb=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 ); id | name | age | address | salary ----+-------+-----+------------+-------- 2 | Allen | 25 | Texas | 15000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 (3 rows)
NOT IN
Следующая инструкция SELECT выводит записи, где полеAGE (age)не равно 25 или 27:
exampledb=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 ); 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)
МЕЖДУ
Следующая инструкция SELECT выводит записи, где полеAGE (age)находится между 25 и 27:
exampledb=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27; id | name | age | address | salary ----+-------+-----+------------+-------- 2 | Allen | 25 | Texas | 15000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 (3 rows)
Подзапрос
Следующая инструкция SELECT использует SQL-подзапрос. Подзапрос считывает данныеSALARY (salary)с полем больше 65000, а затем с помощью оператораEXISTSопределяет, возвращает ли он строки. Если строки возвращены, он считывает всеAGE (age)поля.
exampledb=# SELECT AGE FROM COMPANY
WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
age
-----
32
25
23
25
27
22
24
(7 rows)
Следующая инструкция SELECT также использует SQL-подзапрос. Подзапрос считывает полеSALARY (salary), большее 65000, в данных поляAGE (age), а затем использует>оператор для запроса данных, превышающихAGE (age)поля данных:
exampledb=# SELECT * FROM COMPANY
WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
id | name | age | address | salary
----+------+-----+------------+--------
1 | Paul | 32 | California | 20000 Другие расширения