Что такое PostgreSQL Exists?
Оператор EXISTS проверяет, существуют ли строки в подзапросе. Это означает, что оператор используется вместе с подзапросом. Оператор Exists считается выполненным, если в подзапросе найдена хотя бы одна строка. Вы можете использовать эту операцию вместе с операторами SELECT, UPDATE, INSERT и DELETE.
В этом руководстве по PostgreSQL вы узнаете следующее:
- Синтаксис
- С оператором SELECT
- С заявлением INSERT
- С заявлением UPDATE
- С оператором DELETE
- С pgAdmin
Синтаксис
Вот синтаксис оператора PostgreSQL EXISTS:
WHERE EXISTS (subquery);
Приведенный выше синтаксис показывает, что оператор EXISTS принимает аргумент, который является подзапросом. Подзапрос - это просто инструкция SELECT, которая должна начинаться с SELECT * вместо списка имен столбцов или выражений.
С оператором SELECT
Давайте посмотрим, как использовать оператор SELECT с оператором EXISTS. У нас есть следующие таблицы:
Книга:
Цена:
Выполните следующую инструкцию:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Это возвращает следующее:
Приведенная выше команда должна возвращать все записи в таблице Book, идентификатор которых совпадает с идентификатором любых записей подзапроса. Подобрался только один идентификатор. Следовательно, была возвращена только одна запись.
С заявлением INSERT
Мы можем использовать оператор EXISTS в инструкции INSERT. У нас есть следующие 3 таблицы:
Книга:
Цена:
Цена2:
Затем мы можем запустить следующий оператор:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Таблица цен теперь выглядит следующим образом:
Строка с идентификатором 5 в таблице с именем Price2 была сопоставлена. Затем эта запись была вставлена в таблицу цен.
С заявлением UPDATE
Мы можем использовать оператор EXISTS в операторе UPDATE.
Выполните следующий запрос:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Мы обновляем столбец цен в таблице цен. Наша цель - сделать так, чтобы цены на товары с одинаковым идентификатором были одинаковыми. Сопоставлена только одна строка, то есть 5.
Однако, поскольку цены равны, то есть 205, обновление не производилось. Если бы была разница, было бы произведено обновление.
С оператором DELETE
Оператор PostgreSQL DELETE может использовать оператор EXISTS. Вот пример:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Таблица цен теперь выглядит следующим образом:
Строка с идентификатором 5 была удалена.
С pgAdmin
Теперь посмотрим, как эти действия можно выполнить с помощью pgAdmin.
С оператором SELECT
Чтобы сделать то же самое с помощью pgAdmin, сделайте следующее:
Шаг 1) Войдите в свою учетную запись pgAdmin.
Шаг 2)
- На панели навигации слева нажмите «Базы данных».
- Щелкните Демо.
Шаг 3) Введите запрос в редакторе запросов:
SELECT *FROM BookWHERE EXISTS (SELECT *FROM PriceWHERE Book.id = Price.id);
Шаг 4) Нажмите кнопку «Выполнить».
Он должен вернуть следующее:
С заявлением INSERT
Чтобы сделать то же самое с помощью pgAdmin, сделайте следующее:
Шаг 1) Войдите в свою учетную запись pgAdmin.
Шаг 2)
- На панели навигации слева нажмите «Базы данных».
- Щелкните Демо.
Шаг 3) Введите запрос в редакторе запросов:
INSERT INTO PriceSELECT id, priceFROM Price2WHERE EXISTS (SELECT idFROM BookWHERE Book.id = Price2.id);
Шаг 4) Нажмите кнопку «Выполнить».
Таблица цен теперь должна быть следующей:
С заявлением UPDATE
Чтобы сделать то же самое с помощью pgAdmin, сделайте следующее:
Шаг 1) Войдите в свою учетную запись pgAdmin.
Шаг 2)
- На панели навигации слева нажмите «Базы данных».
- Щелкните Демо.
Шаг 3) Введите запрос в редакторе запросов:
UPDATE PriceSET price = (SELECT priceFROM Price2WHERE Price2.id = Price.id)WHERE EXISTS (SELECT id, priceFROM Price2WHERE Price2.id = Price.id);
Шаг 4) Нажмите кнопку «Выполнить».
Таблица цен теперь должна быть следующей:
С оператором DELETE
Чтобы сделать то же самое с помощью pgAdmin, сделайте следующее:
Шаг 1) Войдите в свою учетную запись pgAdmin.
Шаг 2)
- На панели навигации слева нажмите «Базы данных».
- Щелкните Демо.
Шаг 3) Введите запрос в редакторе запросов:
DELETE FROM PriceWHERE EXISTS (SELECT *FROM Price2WHERE Price.id = Price2.id);
Шаг 4) Нажмите кнопку «Выполнить».
Таблица цен теперь должна быть следующей:
Резюме
- Оператор EXISTS проверяет, существуют ли строки в подзапросе.
- Он используется с подзапросом и считается выполненным, если подзапрос возвращает хотя бы одну строку.
- Он используется вместе с операторами SELECT, UPDATE, INSERT и DELETE.
Загрузите базу данных, используемую в этом руководстве