PostgreSQL ІСНУЄ з SELECT Operaтор (Приклад)

⚡ Розумний підсумок

PostgreSQL EXISTS – це логічний оператор, який перевіряє, чи корельований підзапит повертає будь-який рядок, дозволяючи операторам SELECT, INSERT, UPDATE та DELETE ефективно фільтрувати дані за наявністю або відсутністю відповідних записів.

  • 📋 Синтаксис: WHERE EXISTS (підзапит) повертає значення true, коли підзапит видає хоча б один рядок.
  • 🔗 Корельований підзапит: EXISTS пов'язує внутрішні та зовнішні запити, зіставляючи рядки у спільному ключі.
  • Коротке замикання: EXISTS зупиняється на першому відповідному рядку, тому добре масштабується на великих таблицях.
  • 🔁 Чотири твердження: Оператор працює всередині запитів SELECT, INSERT, UPDATE та DELETE.
  • 🛡️ НЕ ІСНУЄ: Безпечно виключає рядки та уникає пастки NULL, яка перериває NOT IN.
  • 🤖 Запити штучного інтелекту: Помічники генерують речення EXISTS та позначають ризики продуктивності корельованих підзапитів.

PostgreSQL ІСНУЄ з Select Operaтор

Що ІСНУЄ в PostgreSQL?

Команда PostgreSQL ІСНУЄТЬСЯ Оператор перевіряє, чи існує рядок(ки) у підзапиті. Це означає, що оператор використовується разом із підзапитом. Вважається, що оператор EXISTS виконано, коли в підзапиті знайдено принаймні один рядок. Цю операцію можна використовувати разом з операторами SELECT, UPDATE, INSERT та DELETE.

PostgreSQL Синтаксис запиту EXISTS

Ось синтаксис для PostgreSQL EXISTS оператор:

WHERE EXISTS (subquery);

Наведений вище синтаксис показує, що оператор EXISTS приймає аргумент, який є підзапитом. Підзапит - це просто a Оператор SELECT який повинен починатися з SELECT * замість списку імен стовпців або виразів.

PostgreSQL ІСНУЄ з оператором SELECT

Давайте розглянемо, як використовувати оператор SELECT з оператором EXISTS. У нас є такі таблиці:

Книга:

PostgreSQL ІСНУЄ з оператором SELECT

Ціна:

PostgreSQL ІСНУЄ з оператором SELECT

Виконайте наступний оператор:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

Це повертає наступне:

PostgreSQL EXISTS з результатом оператора SELECT

Наведена вище команда має повернути всі записи в таблиці Book, ідентифікатор яких збігається з ідентифікатором будь-яких записів за підзапитом. Збігся лише один ідентифікатор. Таким чином, було повернуто лише один запис.

PostgreSQL ІСНУЄ з оператором INSERT

Ми можемо використовувати оператор EXISTS в Оператор INSERT. У нас є такі 3 таблиці:

Книга:

PostgreSQL ІСНУЄ з оператором INSERT

Ціна:

PostgreSQL ІСНУЄ з оператором INSERT

Ціна 2:

PostgreSQL ІСНУЄ з оператором INSERT

Потім ми можемо запустити такий оператор:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Тепер таблиця цін виглядає так:

PostgreSQL EXISTS з результатом оператора INSERT

Знайдено рядок з ідентифікатором 5 у таблиці під назвою Price2. Потім цей запис було вставлено в таблицю цін.

PostgreSQL ІСНУЄ з оператором UPDATE

Ми можемо використовувати оператор EXISTS в операторі UPDATE.

Виконайте наступний запит:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

PostgreSQL ІСНУЄ з оператором UPDATE

Ми оновлюємо стовпець цін таблиці цін. Наша мета полягає в тому, щоб ціни на товари, що мають спільний ідентифікатор, були однаковими. Збігся лише один рядок, тобто 5.

Однак, оскільки ціни однакові, тобто 205, оновлення не проводилося. Якби була різниця, було б зроблено оновлення.

PostgreSQL ІСНУЄ з оператором DELETE

A PostgreSQL Оператор DELETE може використовувати оператор EXISTS. Ось приклад:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Тепер таблиця цін виглядає так:

PostgreSQL ІСНУЄ з оператором DELETE

Рядок з ідентифікатором 5 видалено.

PostgreSQL Оператор EXISTS з використанням pgAdmin

Поза межами оболонки SQL, ті ж самі запити EXISTS можна виконувати візуально через інтерфейс pgAdmin. Тепер давайте подивимося, як ці дії можна виконати за допомогою pgAdmin:

З інструкцією SELECT

Нижче наведено кроки для використання запиту EXISTS у PostgreSQL за допомогою оператора SELECT, використовуючи pgAdmin:

Крок 1) Увійдіть до свого облікового запису pgAdmin. Відкрийте pgAdmin та увійдіть до свого облікового запису, використовуючи свої облікові дані.

Крок 2) Створіть демонстраційну базу даних.

  1. На панелі навігації ліворуч натисніть Бази даних.
  2. Натисніть Демо.

PostgreSQL Оператор EXISTS з використанням pgAdmin

Крок 3) Введіть наведений нижче запит у редакторі запитів:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

Крок 4) Натисніть кнопку Виконати.

PostgreSQL Оператор EXISTS з використанням pgAdmin

Він повинен повернути наступне:

PostgreSQL Оператор EXISTS з використанням pgAdmin

З інструкцією INSERT

Щоб зробити те саме через pgAdmin, виконайте наступне:

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  1. На панелі навігації ліворуч натисніть Бази даних.
  2. Натисніть Демо.

ІСНУЄ оператор у PostgreSQL за допомогою pgAdmin

Крок 3) Введіть запит у редакторі запитів:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Крок 4) Натисніть кнопку Виконати.

ІСНУЄ оператор у PostgreSQL за допомогою pgAdmin

Тепер таблиця цін має виглядати так:

ІСНУЄ оператор у PostgreSQL за допомогою pgAdmin

З заявою UPDATE

Щоб зробити те саме через pgAdmin, виконайте наступне:

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  1. На панелі навігації ліворуч натисніть Бази даних.
  2. Натисніть Демо.

ІСНУЄ оператор у PostgreSQL за допомогою pgAdmin

Крок 3) Введіть запит у редакторі запитів:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

Крок 4) Натисніть кнопку Виконати.

PostgreSQL Оператор EXISTS з використанням pgAdmin

Тепер таблиця цін має виглядати так:

PostgreSQL Оператор EXISTS з використанням pgAdmin

З інструкцією DELETE

Щоб зробити те саме через pgAdmin, виконайте наступне:

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2)

  1. На панелі навігації ліворуч натисніть Бази даних.
  2. Натисніть Демо.

PostgreSQL Оператор EXISTS з використанням pgAdmin

Крок 3) Введіть запит у редакторі запитів:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Крок 4) Натисніть кнопку Виконати.

PostgreSQL Оператор EXISTS з використанням pgAdmin

Тепер таблиця цін має виглядати так:

PostgreSQL Оператор EXISTS з використанням pgAdmin

Завантажте базу даних, яка використовується в цьому посібнику

Поширені запитання

Функція EXISTS перевіряє, чи корельований підзапит повертає будь-який рядок, і зупиняється на першому збігу, тому вона підходить для великих підзапитів. Функція IN порівнює значення зі списком і підбирає невеликі, константні набори.

NOT IN може повернути нуль рядків, коли підзапит містить NULL, оскільки порівняння стає невідомим. NOT EXISTS ігнорує NULL та правильно обчислює кожен рядок, що робить його надійним вибором для анти-з'єднань.

Корельований підзапит посилається на стовпець із зовнішнього запиту, наприклад, WHERE Book.id = Price.id. EXISTS повторно перевіряє його для кожного зовнішнього рядка та повертає значення true, коли знайдено збіг.

Так. EXISTS повертає значення true, щойно підзапит створює один рядок, тому решту не сканує. Така поведінка, що призводить до короткого замикання, робить його ефективним для великих корельованих підзапитів.

Ні. EXISTS перевіряє лише, чи підзапит повертає рядок, тому SELECT *, SELECT 1 або SELECT id поводяться однаково. Список стовпців усередині підзапиту не впливає на результат.

Проіндексуйте стовпці, об'єднані всередині підзапиту, збережіть умову кореляції sargable та виконайте команду EXPLAIN ANALYZE. PostgreSQL часто переписує EXISTS як ефективне напівз'єднання, коли індекси це підтримують.

Помічники ШІ перетворюють правила простою англійською мовою на речення EXISTS, створюють корельований підзапит і попереджають про пастки NOT IN NULL. Вони також пропонують індекси та підказки EXPLAIN для налаштування.

Так. AI Copilot виявляє шаблони підзапитів і перезаписує IN як EXISTS або NOT IN як NOT EXISTS, покращуючи безпеку та продуктивність NULL у великих таблицях.

Підсумуйте цей пост за допомогою: