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.