PostgreSQL СЪЩЕСТВУВА с SELECT Operaтор (Пример)

⚡ Умно обобщение

PostgreSQL EXISTS е булев оператор, който проверява дали корелирана подзаявка връща произволен ред, позволявайки на операторите SELECT, INSERT, UPDATE и DELETE ефективно да филтрират данните по наличие или отсъствие на съответстващи записи.

  • 📋 Синтаксис: WHERE EXISTS (подзаявка) връща true, когато подзаявката върне поне един ред.
  • 🔗 Корелирана подзаявка: EXISTS свързва вътрешни и външни заявки, съпоставяйки редове в споделен ключ.
  • Късо съединение: EXISTS спира на първия съответстващ ред, така че се мащабира добре върху големи таблици.
  • 🔁 Четири твърдения: Операторът работи в заявки SELECT, INSERT, UPDATE и DELETE.
  • НЕ СЪЩЕСТВУВА: Безопасно изключва редове и избягва NULL капана, който прекъсва NOT IN.
  • 🤖 Заявки към изкуствен интелект: Асистентите генерират EXISTS клаузи и маркират рискове за производителност на корелирани подзаявки.

PostgreSQL СЪЩЕСТВУВА с Select OperaTor

Какво СЪЩЕСТВУВА в PostgreSQL?

- PostgreSQL СЪЩЕСТВУВА Операторът проверява дали съществува ред(ове) в подзаявка. Това означава, че операторът се използва заедно с подзаявка. Операторът EXISTS се счита за изпълнен, когато в подзаявката е намерен поне един ред. Можете да използвате тази операция заедно с операторите SELECT, UPDATE, INSERT и DELETE.

PostgreSQL Синтаксис на заявката EXISTS

Ето синтаксиса за PostgreSQL Изявление EXISTS:

WHERE EXISTS (subquery);

Горният синтаксис показва, че операторът EXISTS приема аргумент, който е подзаявка. Подзаявката е просто a SELECT израз който трябва да започва с SELECT * вместо списък с имена на колони или изрази.

PostgreSQL EXISTS с SELECT оператор

Нека видим как да използваме SELECT оператор с оператора EXISTS. Имаме следните таблици:

Книга:

PostgreSQL EXISTS с SELECT оператор

Цена:

PostgreSQL EXISTS с SELECT оператор

Изпълнете следния оператор:

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

Това връща следното:

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

Горната команда трябва да върне всички записи в таблицата Book, чийто идентификатор съвпада с идентификатора на всички записи от подзаявката. Съпоставен е само един идентификатор. Следователно беше върнат само един запис.

PostgreSQL EXISTS с INSERT оператор

Можем да използваме оператора EXISTS в an оператор INSERT. Имаме следните 3 таблици:

Книга:

PostgreSQL EXISTS с INSERT оператор

Цена:

PostgreSQL EXISTS с INSERT оператор

Цена2:

PostgreSQL EXISTS с INSERT оператор

След това можем да изпълним следния оператор:

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

Ценовата таблица вече е както следва:

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

Редът с id 5 в таблицата с име Price2 беше съпоставен. След това този запис беше вмъкнат в таблицата с цените.

PostgreSQL EXISTS с 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 EXISTS с UPDATE оператор

Актуализираме ценовата колона в таблицата с цените. Нашата цел е цените на артикулите, споделящи един идентификатор, да бъдат еднакви. Съпоставен е само един ред, тоест 5.

Но тъй като цените са еднакви, тоест 205, не е направена актуализация. Ако имаше разлика, щеше да се направи актуализация.

PostgreSQL СЪЩЕСТВУВА с оператор DELETE

A PostgreSQL Операторът DELETE може да използва оператора EXISTS. Ето един пример:

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

Ценовата таблица вече е както следва:

PostgreSQL СЪЩЕСТВУВА с оператор DELETE

Редът с id 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. Щракнете върху Демо.

EXISTS Изявление в PostgreSQL използвайки pgAdmin

Стъпка 3) Въведете заявката в редактора на заявки:

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

Стъпка 4) Щракнете върху бутона Изпълнение.

EXISTS Изявление в PostgreSQL използвайки pgAdmin

Ценовата таблица сега трябва да бъде както следва:

EXISTS Изявление в PostgreSQL използвайки pgAdmin

С изявление UPDATE

За да постигнете същото чрез pgAdmin, направете следното:

Стъпка 1) Влезте във вашия pgAdmin акаунт.

Стъпка 2)

  1. От лентата за навигация вляво щракнете върху Бази данни.
  2. Щракнете върху Демо.

EXISTS Изявление в 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 при големи таблици.

Обобщете тази публикация с: