Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> Computer Programming Languages >> .

Differenze tra EXISTS e IN di SQL

Una sfida persistente utilizzando SQL è determinare il corretto utilizzo dei esiste e degli operatori . I due operatori in grado di produrre gli stessi risultati , ma non sempre farlo . Inoltre, vi è dibattito notevole sopra come ciascun operatore è ottimizzato per la velocità . Gli utenti dovrebbero capire i diversi attributi di ciascun operatore e provare entrambi per determinare la funzione appropriata . IN Operator

L'operatore IN restituisce una riga se una WHERE valore table.field condizionata corrisponde a una lista di valori . IN è tipicamente usato come parte di una query principale o in combinazione con una sottoquery

Esempio 1 : . DOVE table.field in ('a' , 'b' , 'c' ) per

esempio 2 : DOVE table.field in ( ritorno di sottoquery insieme di valori)
ESISTE operator

ESISTE operatore restituisce tutti i principali file di query se la subquery contiene tutte le righe .

esiste è usato solo in combinazione con una sottoquery . Righe restituite sono determinati dal filtraggio a livello di query principale. Esempio : DOVE ESISTE ( il ritorno di sottoquery insieme di valori)
Differenza

IN non può valutare NULL , per cui le righe sono sempre false , e non tornarono .

ESISTE può valutare NULL , quindi queste righe possono essere restituiti .
somiglianze

esiste e in entrambi supporto subquery correlate e non correlate , e entrambi possono produrre principali risultati simili . Quando correlata , esiste e sospesa, un campo di query principale per un campo di sottoquery ( es: main.id = subquery.id ) . La subquery restituisce riga per riga , per ogni corrispondenza trovata . In questo caso , IN e EXISTS restituisce le stesse righe in base a simili incontri id . Quando non correlati , esiste e IN processo loro sottoquery prima, poi i risultati delle partite alla query principale.
Prestazioni di esiste e IN

prestazioni sono determinate dalla banca dati ottimizzatore e il piano di esecuzione che impiega per il codice eseguito . Per EXISTS e IN , l'ottimizzatore può scegliere percorsi diversi . In Oracle , questo è di NON ESISTE evitando un anti -join , e in genere dimostrando veloce di NOT IN . Alla fine, un po 'di tentativi ed errori è necessario per riferimento il percorso più veloce a seconda del database e la sua versione in uso . Assicurarsi di utilizzare l'operatore che assicura i risultati corretti , poi se tutto è lo stesso , provare EXISTS sostituendo e per vedere realmente che è più veloce .

 

Programmazione © www.354353.com