Database
 sql >> Baza danych >  >> RDS >> Database

SQL IN vs SQL ISTNIEJE

SQL IN vs SQL EXISTS

W tym artykule szczegółowo omówiono operatory IN i EXISTS w SQL . Częstym pytaniem deweloperów jest to, jaka jest różnica między tymi dwoma operatorami. Aby poznać różnicę, najpierw omówmy szczegółowo każdy z tych operatorów.

Operator IN

Operator IN jest używany do uzyskania wyników, gdy określona wartość pasuje do wartości w zestawie wartości lub jest zwracana przez zapytanie wewnętrzne. Ten operator może być również używany z WHERE klauzula, aby określić więcej niż jedną wartość. Operator IN jest często określany jako akronim operatora OR, ponieważ ogranicza użycie wielu warunków OR w zapytaniach SELECT, INSERT, UPDATE lub DELETE .

W tym operatorze podzapytanie jest rozwiązywane jako pierwsze, a wynik jest następnie używany do rozwiązania zapytania zewnętrznego.

Poniżej znajduje się ogólna składnia operatora IN:

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

Przykład:

Rozważmy poniższą tabelę klientów.

Cust_id Cust_name Miasto Zawód
1 Harry Kalkuta Biznes
2 Ron Bombaj Lekarz
3 Albus Delhi Inżynier
4 Zgredek Pune Naukowiec
5 Snap Bangalur Student

Zapytanie:

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

Powyższe zapytanie zwróci wszystkich klientów, którzy są lekarzem, naukowcem lub inżynierem.

Wyjście:

Cust_id Cust_name Miasto Zawód
2 Ron Bombaj Lekarz
3 Albus Delhi Inżynier
4 Zgredek Pune Naukowiec

EXISTS Operator

Operator EXISTS, w przeciwieństwie do operatora IN, zwraca wartość logiczną. Ten operator sprawdza wynik wewnętrznego zapytania i zwraca wartość logiczną, tj. Prawdę lub fałsz. Jeśli wewnętrzne zapytanie zwraca jeden lub wiele rekordów, operator zwraca prawdę, w przeciwnym razie zwraca fałsz, gdy nie znaleziono żadnych rekordów.

Ten operator jest również skuteczny, ponieważ zatrzymuje dalsze przetwarzanie zaraz po wykryciu pierwszego prawdziwego zdarzenia.

Poniżej znajduje się składnia operatora EXISTS:

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

Przykład:

Rozważmy poniższą tabelę klientów.

Cust_id Nazwa Zawód Wiek
101 Harry Inżynier 32
102 Ron Programista 30
103 Zgredek Lider 28
104 Albus Naukowiec 45
105 Snap Cieśla 26
106 Imbir Aktor 25
107 NULL NULL NULL

Rozważmy inny stół Zamówienia.

Identyfikator zamówienia Cust_id Nazwa_produktu Data_zamówienia
1 101 Laptop 2021-01-10
2 103 Pulpit 12.02.20
3 106 IPhone 2021-02-15
4 104 Komórka 2021-03-05
5 102 telewizor 2021-03-20

Zapytanie:

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

Powyższe zapytanie zwróci nazwę i zawód wszystkich klientów, którzy złożyli co najmniej jedno zamówienie.

Wyjście:

Nazwa Zawód
Harry Inżynier
Ron Programista
Zgredek Lider
Albus Naukowiec
Imbir Aktor

Tabela różnic między operatorem IN i EXISTS

Kluczowe różnice między operatorem IN a operatorem EXISTS są wymienione poniżej w formie tabelarycznej:

Operator IN Operator ISTNIEJE
Minimalizuje użycie warunków OR. Sprawdza istnienie rekordu w wewnętrznym zapytaniu.
Porównuje wartości wewnętrznego zapytania z wartością zewnętrznego zapytania. Nie porównuje wartości między zapytaniem wewnętrznym a zapytaniem podrzędnym.
Sprawdza wszystkie wartości wewnątrz bloku klauzuli IN. Zatrzymuje dalsze wykonywanie, gdy tylko spełniony zostanie pierwszy prawdziwy warunek.
Może zwrócić PRAWDA, FAŁSZ lub NULL. Zwraca wartość PRAWDA lub FAŁSZ.
Może być używany do sprawdzania wartości NULL. Nie można go używać do sprawdzania wartości NULL.
Jest używany zarówno z podzapytaniami, jak i wartościami. Jest używany tylko z podzapytaniami.
Wykonanie jest szybsze, gdy wynik wewnętrznego zapytania jest mniejszy. Wykonywanie jest szybsze, nawet gdy wynik wewnętrznego zapytania jest duży. Jest bardziej wydajny niż operator IN.
Składnia :SELECT nazwy_kolumn FROM nazwa_tabeli WHERE nazwa_kolumny IN (podzapytanie); Składnia :SELECT nazwy_kolumnFROM nazwa_tabeliWHERE [NOT] EXISTS (podzapytanie);

Wniosek:

W tym temacie dokonano porównania między operatorem IN i operatorami EXISTS języka SQL. Obaj operatorzy wykonują tę samą operację, ale ich wewnętrzna praca jest inna. Mają inną logikę działania. Każdy z nich można wybrać zgodnie z wymaganiami. Ale jeśli zestaw danych jest duży, zawsze zaleca się skorzystanie z operatora 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. Wyspy T-SQL Wyzwanie

  2. Zaawansowany SQL:odmiany i różne przypadki użycia instrukcji Insert T-SQL

  3. ACID Właściwości wyciągów i transakcji

  4. Wizualizacja danych w Microsoft Power BI

  5. Łączenie RDBMS i NoSQL:wprowadzenie do klastra 2DX UI