sql >> Databasteknik >  >> RDS >> Database

SQL IN vs SQL FINNS

SQL IN vs SQL FINNS

Den här artikeln diskuterar i detalj om operatorerna IN och EXISTS i SQL . Det är en vanlig fråga mellan utvecklare att vad är skillnaden mellan dessa två operatörer. För att veta skillnaden, låt oss först diskutera var och en av dessa operatörer i detalj.

IN-operatör

IN-operatören används för att få resultat när ett specificerat värde matchar ett värde i en uppsättning värden eller returneras av en inre fråga. Denna operator kan också användas med WHERE sats för att ange mer än ett värde. IN-operatorn hänvisas ofta till som akronymen för OR-operatorn eftersom den minskar användningen av flera OR-villkor i SELECT, INSERT, UPDATE eller DELETE-frågor .

I den här operatorn löses underfrågan först och det resultatet används sedan för att lösa den yttre frågan.

Följande är den allmänna syntaxen för IN-operatorn:

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

Exempel:

Låt oss överväga följande kundtabell.

Cus_id Kundnamn Stad Yrke
1 Harry Kolkata Företag
2 Ron Mumbai Läkare
3 Albus Delhi Ingenjör
4 Dobby Pune Forskare
5 Snape Bangalore Student

Fråga:

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

Ovanstående fråga kommer att returnera alla kunder som antingen är doktor eller vetenskapsman eller ingenjör.

Utdata:

Cus_id Cus_name Stad Yrke
2 Ron Mumbai Läkare
3 Albus Delhi Ingenjör
4 Dobby Pune Forskare

FINNS operatör

Operatorn EXISTS, till skillnad från IN-operatorn, returerar ett booleskt värde. Denna operatör kontrollerar resultatet av den inre frågan och returnerar ett booleskt värde, dvs. antingen sant eller falskt. Om den inre frågan returnerar en enstaka eller flera poster, returnerar operatorn true annars returnerar den falskt när inga poster hittas.

Denna operatör är också effektiv eftersom den stoppar ytterligare bearbetning så snart den första sanna händelsen upptäcks.

Följande är syntaxen för operatorn EXISTS:

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

Exempel:

Låt oss överväga följande kundtabell.

Cus_id Namn Yrke Ålder
101 Harry Ingenjör 32
102 Ron Utvecklare 30
103 Dobby Ledare 28
104 Albus Forskare 45
105 Snape Snickare 26
106 Ingefära Skådespelare 25
107 NULL NULL NULL

Låt oss överväga andra bordsbeställningar.

Order_id Cus_id Produktnamn Order_date
1 101 Bärbar dator 2021-01-10
2 103 Skrivbord 2021-02-12
3 106 IPhone 2021-02-15
4 104 Mobil 2021-03-05
5 102 TV 2021-03-20

Fråga:

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

Ovanstående fråga kommer att returnera namn och yrke för alla kunder som har gjort minst en beställning.

Utdata:

Namn Yrke
Harry Ingenjör
Ron Utvecklare
Dobby Ledare
Albus Forskare
Ingefära Skådespelare

Skillnadstabell mellan IN- och EXISTS-operatorn

De viktigaste skillnaderna mellan IN-operatören och EXISTS-operatören listas nedan i tabellform:

IN-operatör FINNS operatör
Det minimerar användningen av OR-villkoren. Den kontrollerar att det finns en post i den inre frågan.
Den jämför värdena för den inre frågan med värdet för den yttre frågan. Den jämför inte värdena mellan den inre frågan och underfrågan.
Den kontrollerar alla värden i blocket i IN-satsen. Den stoppar all ytterligare exekvering så snart det första sanna villkoret är uppfyllt.
Den kan returnera TRUE, FALSE eller NULL. Det returnerar antingen TRUE eller FALSE.
Den kan användas för att kontrollera NULL-värden. Den kan inte användas för att kontrollera NULL-värden.
Den används med både underfrågor och värden. Den används endast med underfrågor.
Körningen går snabbare när resultatet av den inre frågan är mindre. Körningen är snabbare även när resultatet av den inre frågan är stort. Den är effektivare än IN-operatören.
Syntax :VÄLJ kolumnnamn FRÅN tabellnamn WHERE kolumnnamn IN (underfråga); Syntax :VÄLJ kolumnnamn FRÅN tabellnamn DÄR [INTE] FINNS (underfråga);

Slutsats:

I det här ämnet har en jämförelse gjorts mellan IN-operatorn och EXISTS-operatorerna för SQL. Båda operatörerna gör samma operation men deras interna arbete är olika. De fungerar olika logiskt. Vilken som helst av dem kan väljas enligt kraven. Men, om mängden data är stor, rekommenderas det alltid att välja EXISTS-operatören.


  1. LOWER() Funktion i Oracle

  2. Summa värden för flerdimensionell array för nyckel utan loop

  3. Få extra rader - Efter att ha sammanfogat de 3 borden med Left Join

  4. Mountain Lion Postgres kunde inte ansluta