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.