En ihållande utmaning i att använda SQL är att bestämma korrekt användning av de uppkommit, operatörer . De två operatörerna kan ge samma resultat , men inte alltid göra det . Det finns också omfattande debatt över hur varje aktör är optimerad för hastighet . Användare bör förstå de olika attributen för varje operatör och prova båda för att bestämma lämplig funktion . IN Operator
Operatorn returnerar en rad om en WHERE betingad table.field värdet matchar en lista på värden . IN används vanligen som en del av en huvudsaklig fråga eller i förening med en underfråga
Exempel 1 : . VAR Table.Field i ( "a" , "b" , "c" ) katalog
Exempel 2 : VAR Table.Field i ( Subquery återkomst värdegrund )
fINNS Operator
EXISTS operatören returnerar alla huvudfrågan rader om delfråga innehåller några rader .
EXISTS används endast i kombination med en underfråga . Rader returneras bestäms genom filtrering vid huvudfrågan nivå . Exempel : VAR FINNS ( Subquery återkomst värdegrund ) Addera ditt Skillnad
IN kan inte utvärdera NULL , så dessa rader är alltid falska , och inte återvänt .
FINNS kan utvärdera NULL , så dessa rader kan returneras .
likheter
uppkommit, både stöd korrelerade och icke - korrelerade underfrågor , och både kan producera huvudsakliga liknande resultat . När korrelerade , uppkommit, matchar en huvudfrågan fält till en delfråga fält (ex : main.id = subquery.id ) . Den underfråga utvärderar rad för rad , för varje funnit match. I detta fall kommer IN och existerar returnera samma rader som bygger på liknande id matcher . När icke - korrelerade , uppkommit, process sina delfrågor först , och sedan matcha resultaten till huvudfrågan .
Utförande av uppkommit,
Prestanda bestäms av databasen Optimizer och exekveringsplanen den använder för det exekveras koden . För uppkommit, kan optimeringsfunktionen välja olika vägar . I Oracle , är detta genom att INTE FINNS undvika en anti - gå , och typiskt bevisa snabbare än INTE IN . I slutändan är lite trial and error som krävs för att jämföra den snabbaste vägen beroende på databasen och det är version som används . Var noga med att använda den operatör som garanterar rätt resultat först , därefter, om allt är samma , försök ersättande uppkommit, att verkligen se vilken som är snabbare .