Skillnader mellan EXISTS och IN-operatörer i SQL

Författare: Peter Berry
Skapelsedatum: 11 Augusti 2021
Uppdatera Datum: 1 Juli 2024
Anonim
Skillnader mellan EXISTS och IN-operatörer i SQL - Artiklar
Skillnader mellan EXISTS och IN-operatörer i SQL - Artiklar

Innehåll

En konstant utmaning med att använda SQL är att bestämma korrekt användning av EXISTS och IN-operatörerna. De två operatörerna kan producera samma resultat, men inte alltid. Dessutom är det en stor debatt om hur varje operatör optimeras för hastighet. Användare bör förstå de olika attributen för varje operatör och experimentera med de två för att bestämma lämplig användning.


Tänk på dina SQL-mål när du väljer EXISTS eller IN (Jupiterimages / Photos.com / Getty Images)

IN-operatör

IN-operatören returnerar en rad om fältvärdet på ett bord uppfyller WHERE-villkoret i en lista med IN-värden. Den används vanligen som en del av en huvudfråga eller i samband med en underfråga.

Exempel 1: WHERE table.field IN ('a', 'b', 'c') Exempel 2: WHERE table.field IN (Subquery som returnerar en uppsättning)

EXISTS operatör

EXISTS-operatören returnerar alla huvudrader om en underfråga innehåller några rader. Den används endast i samband med en underfråga. Raderna som returneras bestäms av filtret i huvudfrågan.

Exempel: VAR EXISTER (Subquery som returnerar en uppsättning)


skillnad

IN-operatören kan inte utvärdera NULL-värden, så sådana linjer kommer alltid att vara falska och kommer inte att returneras, till skillnad från EXISTS-operatören, som utvärderar och returnerar rader med NULL-värden.

likheter

Både EXISTS och IN stöder korrelerade och okorrelerade undersökningar, och båda kan producera liknande resultat. När de korreleras uppfyller de ett huvudfält för ett underfrågningsfält (t.ex.: principal.id = subquery.id). Underfrågan utvärderar rad för rad, för varje förekomst som hittats. I detta fall kommer IN och EXISTS att returnera samma linjer baserat på liknande "id" villkor. När de är okorrelerade bearbetar de två operatörerna sina undersökningar och kombinerar sedan resultaten för huvudfrågan.

prestanda

Prestanda bestäms av databasoptimeraren och exekveringsplanen som används för den exekverade koden. För EXISTS och IN kan optimeringsprogrammet välja olika vägar. I Oracle, EXISTS är vanligtvis snabbare än INTE. I slutändan krävs några försök och fel för att sortera den kortaste sökvägen beroende på vilken databas och version som används. Var noga med att använda operatören som garanterar de rätta resultaten först och försök sedan byta operatörerna för att se vilken som är snabbast.