sql >> Databáze >  >> RDS >> Database

SQL IN vs SQL EXISTUJE

SQL IN vs. SQL EXISTUJE

Tento článek podrobně popisuje operátory IN a EXISTS v SQL . Mezi vývojáři je častá otázka, jaký je rozdíl mezi těmito dvěma operátory. Abychom poznali rozdíl, pojďme nejprve podrobně probrat každý z těchto operátorů.

Operátor IN

Operátor IN se používá kzískání výsledků, když zadaná hodnota odpovídá hodnotě v sadě hodnot nebo je vrácena vnitřním dotazem. Tento operátor lze také použít s WHERE klauzule k určení více než jedné hodnoty. Operátor IN je často označován jako zkratka pro operátor OR, protože snižuje použití více podmínek OR v dotazech SELECT, INSERT, UPDATE nebo DELETE .

V tomto operátoru se nejprve vyřeší dílčí dotaz a tento výsledek se poté použije k vyřešení vnějšího dotazu.

Následuje obecná syntaxe operátoru IN:

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

Příklad:

Podívejme se na následující tabulku zákazníků.

Cust_id Cust_name Město Povolání
1 Harry Kalkata Obchodní
2 Ron Bombaj Doktor
3 Albus Dillí Inženýr
4 Dobby Pune Vědec
5 Snape Bangalore Student

Dotaz:

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

Výše uvedený dotaz vrátí všechny zákazníky, kteří jsou buď doktor, vědec nebo inženýr.

Výstup:

Cust_id Cust_name Město Povolání
2 Ron Bombaj Doktor
3 Albus Dillí Inženýr
4 Dobby Pune Vědec

EXISTUJE operátor

Operátor EXISTS na rozdíl od operátoru IN vrací booleovskou hodnotu. Tento operátor zkontroluje výsledek vnitřního dotazu a vrátí booleovskou hodnotu, tj. buď true nebo false. Pokud vnitřní dotaz vrátí jeden nebo více záznamů, pak operátor vrátí true, jinak vrátí false, když nebudou nalezeny žádné záznamy.

Tento operátor je také efektivní, protože zastaví další zpracování, jakmile je detekována první opravdová událost.

Následuje syntaxe operátoru EXISTS:

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

Příklad:

Podívejme se na následující tabulku zákazníků.

Cust_id Jméno Povolání Věk
101 Harry Inženýr 32
102 Ron Vývojář 30
103 Dobby Vůdce 28
104 Albus Vědec 45
105 Snape Tesař 26
106 Zázvor Herec 25
107 NULL NULL NULL

Podívejme se na další tabulku Objednávky.

ID_objednávky Cust_id Název_produktu Datum_objednávky
1 101 Laptop 2021-01-10
2 103 Počítač 2021-02-12
3 106 IPhone 2021-02-15
4 104 Mobil 2021-03-05
5 102 TV 20. 3. 2021

Dotaz:

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

Výše uvedený dotaz vrátí jména a povolání všech zákazníků, kteří zadali alespoň jednu objednávku.

Výstup:

Název Povolání
Harry Inženýr
Ron Vývojář
Dobby Vůdce
Albus Vědec
Zázvor Herec

Tabulka rozdílů mezi operátorem IN a EXISTS

Klíčové rozdíly mezi operátorem IN a operátorem EXISTS jsou uvedeny níže v tabulkové podobě:

Operátor IN EXISTUJE Operátor
Minimalizuje použití podmínek OR. Kontroluje existenci záznamu ve vnitřním dotazu.
Porovnává hodnoty vnitřního dotazu s hodnotou vnějšího dotazu. Neporovnává hodnoty mezi vnitřním dotazem a dílčím dotazem.
Zkontroluje všechny hodnoty uvnitř bloku klauzule IN. Zastaví jakékoli další provádění, jakmile je splněna první pravdivá podmínka.
Může vrátit TRUE, FALSE nebo NULL. Vrátí buď PRAVDA, nebo NEPRAVDA.
Lze jej použít ke kontrole hodnot NULL. Nelze jej použít ke kontrole hodnot NULL.
Používá se s poddotazy i hodnotami. Používá se pouze s poddotazy.
Provádění je rychlejší, když je výsledek vnitřního dotazu menší. Provádění je rychlejší, i když je výsledek vnitřního dotazu velký. Je efektivnější než operátor IN.
Syntaxe :SELECT názvy_sloupců FROM název_tabulky WHERE název_sloupce IN (poddotaz); Syntaxe :SELECT názvy_sloupcůFROM název_tabulkyWHERE [NOT] EXISTS (poddotaz);

Závěr:

V tomto tématu bylo provedeno srovnání mezi operátorem IN a operátory EXISTS SQL. Oba operátoři provádějí stejnou operaci, ale jejich vnitřní fungování je odlišné. Mají jinou logickou práci. Kterýkoli z nich může být vybrán podle požadavku. Pokud je však sada dat velká, vždy se doporučuje použít operátor EXISTS.


  1. Sběr dat o výkonu pomocí nástroje SQLDiag | Odstraňování problémů s výkonem serveru SQL -6

  2. SQL Server Jedinečný složený klíč dvou polí s automatickým přírůstkem druhého pole

  3. Vytvoření databázového poštovního účtu v SQL Server (T-SQL)

  4. Postgresql vynucuje jedinečnou obousměrnou kombinaci sloupců