Database
 sql >> база данни >  >> RDS >> Database

SQL IN срещу SQL СЪЩЕСТВУВА

SQL IN срещу SQL СЪЩЕСТВУВА

Тази статия разглежда подробно операторите IN и EXISTS в SQL . Често срещан въпрос между разработчиците е каква е разликата между тези два оператора. За да разберете разликата, нека първо обсъдим подробно всеки от тези оператори.

IN оператор

Операторът IN се използва за получаване на резултати, когато определена стойност съвпада със стойност в набор от стойности или се връща от вътрешна заявка. Този оператор може да се използва и с КЪДЕ клауза, за да посочите повече от една стойност. Операторът IN често се нарича акроним на оператора OR, тъй като намалява използването на множество условия OR в ЗАВЪРКИ SELECT, INSERT, UPDATE или DELETE .

В този оператор първо се решава подзаявката и този резултат след това се използва за решаване на външната заявка.

Следва общият синтаксис на оператора IN:

SELECT column_name
 FROM table_name
 WHERE column_name IN (value1, value2, …); 

Пример:

Нека разгледаме следната таблица с клиенти.

Cust_id Cust_name Град Професия
1 Хари Колката Бизнес
2 Рон Мумбай Доктор
3 Албус Делхи Инженер
4 Доби Пуна Учен
5 Снейп Бангалор Студент

Запитване:

SELECT *
 FROM Customer    
 WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer'); 

Горната заявка ще върне всички клиенти, които са или доктор, или учен, или инженер.

Изход:

Cust_id Cust_name Град Професия
2 Рон Мумбай Доктор
3 Албус Делхи Инженер
4 Доби Пуна Учен

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

Операторът EXISTS, за разлика от оператора IN, връща булева стойност. Този оператор проверява резултата от вътрешната заявка и връща булева стойност, т.е. true или false. Ако вътрешната заявка върне единичен или множество записи, тогава операторът връща true, иначе връща false, когато не бъдат намерени записи.

Този оператор също е ефективен, тъй като спира по-нататъшната обработка веднага щом бъде открито първото истинско събитие.

Следва синтаксисът на оператора EXISTS:

SELECT column_names    
 FROM table_name    
 WHERE NOT EXISTS (    
 SELECT column_names     
 FROM table_name     
 WHERE condition    
 ); 

Пример:

Нека разгледаме следната таблица с клиенти.

Cust_id Име Професия Възраст
101 Хари Инженер 32
102 Рон Разработчик 30
103 Доби Лидер 28
104 Албус Учен 45
105 Снейп Дърводелец 26
106 Джинджифил Актьор 25
107 NULL NULL NULL

Нека разгледаме друга таблица Orders.

Order_id Cust_id Име_на_продукт Дата_на_поръчка
1 101 Лаптоп 10.01.2021
2 103 Настолен компютър 12.02.2021
3 106 IPhone 15.02.2021
4 104 Мобилни 05.03.2021
5 102 телевизор 20.03.2021

Запитване:

SELECT Name, Occupation
 FROM Customer    
 WHERE EXISTS (
 SELECT *
 FROM Orders     
 WHERE Customer.Cust_id = Orders.Cust_id
 ); 

Горната заявка ще върне името и професията на всички клиенти, които са направили поне една поръчка.

Изход:

Име Професия
Хари Инженер
Рон Разработчик
Доби Лидер
Албус Учен
Джинджифил Актьор

Таблица на разликата между IN и EXISTS оператор

Основните разлики между оператора IN и оператора EXISTS са изброени по-долу в табличен начин:

IN оператор СЪЩЕСТВУВА оператор
Той минимизира използването на условията ИЛИ. Проверява съществуването на запис във вътрешната заявка.
Той сравнява стойностите на вътрешната заявка със стойността на външната заявка. Не сравнява стойностите между вътрешната заявка и подзаявката.
Проверява всички стойности в блока на IN клаузата. Спира всяко по-нататъшно изпълнение веднага щом бъде изпълнено първото вярно условие.
Може да върне TRUE, FALSE или NULL. Връща ВЯРНО или ЛОШНО.
Може да се използва за проверка на NULL стойности. Не може да се използва за проверка на NULL стойности.
Използва се както с подзаявки, така и със стойности. Използва се само с подзаявки.
Изпълнението е по-бързо, когато резултатът от вътрешната заявка е по-малък. Изпълнението е по-бързо, дори когато резултатът от вътрешната заявка е голям. Той е по-ефективен от IN оператора.
Синтаксис :SELECT column_names FROM table_name WHERE column_name IN (подзаявка); Синтаксис :SELECT column_namesFROM table_nameWHERE [NOT] EXISTS (подзаявка);

Заключение:

В тази тема е направено сравнение между оператора IN и операторите EXISTS на SQL. И двата оператора извършват една и съща операция, но вътрешната им работа е различна. Те имат различна логическа работа. Всеки един от тях може да бъде избран според изискването. Но,ако наборът от данни е голям, винаги се препоръчва да използвате оператора EXISTS.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да махнете таблици и колони с SQL

  2. Вземете човешки подход към управлението на данните

  3. Първи стъпки с Shareplex на Windows на AWS, част 2

  4. Всичко, което трябва да знаете за стандартите за кодиране на SQL заявки

  5. Използване на OAuth за удостоверяване на вашата ODBC връзка към Salesforce.com