PostgreSQL – условие WHERE
WHERE в PostgreSQL используется для указания условия при выборке данных из одной или нескольких таблиц.
Если условие выполнено, тогда оператор возвращает конкретное значение из таблицы. Вы можете отфильтровать строки, которые не хотите включать в результирующий набор, используя WHERE.
WHERE используется не только в команде SELECT, но также и в UPDATE, DELETE и т.д., которые мы рассмотрим в последующих разделах.
Синтаксис
Базовый синтаксис SELECT с применением WHERE выглядит следующим образом:
SELECT column1, column2, columnN FROM table_name WHERE [search_condition]
Вы можете уточнить условие_поиска при помощи логических операторов или операторов сравнения, таких как >, <, =, LIKE, NOT и т.д. Следующий пример прояснит ситуацию:
Рассмотрим таблицу COMPANY:
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)
Вот простые примеры использования логических операторов. Использование оператора SELECT пролистает все записи, где возраст (AGE) больше или равен 25 и (AND) зарплата больше или равна 65000.00:
testdb=# 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)
Следующая команда SELECT пролистает все записи, где возраст (AGE) больше или равен 25 или (OR) зарплата больше или равна 65000.00:
testdb=# 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)
Следующая команда SELECT пролистает все записи, где возраст (AGE) = NULL , что означает все записи, поскольку ни одна запись AGE не равна NULL:
testdb=# SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
Результат будет следующий:
----+-------+-----+------------+-------- 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)
Следующая команда SELECT пролистает все записи, где имя (NAME) начинается на 'Pa', не важно, что идет дальше за 'Pa'.
testdb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';
Результат будет следующим:
id | name | age |address | salary ----+------+-----+-----------+-------- 1 | Paul | 32 | California| 20000
Следующая команда пролистает все записи, где AGE равен 25 или 27:
testdb=# 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)
Следующая команда SELECT пролистает все записи, где AGE ни 25, ни 27:
testdb=# 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 находится МЕЖДУ (BETWEEN) 25 И (AND) 27:
testdb=# 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, где подзапрос находит все записи с полем AGE, имеющим SALARY > 65000 и затем, где WHERE используется вместе с оператором EXISTS для перечисления всех записей, в которых AGE из внешнего запроса присутствует в результате, выданном по подзапросу:
testdb=# 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, где подзапрос находит все записи с полем AGE, имеющим SALARY > 65000, а WHERE используются вместе с оператором > для перечисления всех записей, в которых AGE из внешнего запроса больше, чем возраст, выдаваемый в результате подзапроса:
testdb=# SELECT * FROM COMPANY
WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
Результат будет следующим:
id | name | age | address | salary ----+------+-----+------------+-------- 1 | Paul | 32 | California | 20000



