Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was ist der Unterschied zwischen „nicht drin“ und „nicht vorhanden“?

Der Unterschied zwischen NICHT IN und EXISTIERT NICHT wird deutlich, wo NULL steht Werte im Ergebnis enthalten.

Zum Beispiel:

create table test_a (col1 varchar2(30 char));
create table test_b (col1 varchar2(30 char));

insert into test_a (col1) values ('a');
insert into test_a (col1) values ('b');
insert into test_a (col1) values ('c');
insert into test_a (col1) values ('d');
insert into test_a (col1) values ('e');

insert into test_b (col1) values ('a');
insert into test_b (col1) values ('b');
insert into test_b (col1) values ('c');
insert into test_b (col1) values (null);

Hinweis :Der Hauptunterschied besteht darin, dass test_b enthält einen null Wert.

select * from test_a where col1 not in (select col1 from test_b);

Keine Zeilen zurückgegeben

select * from test_a where 
    not exists
        (select 1 from test_b where test_b.col1 = test_a.col1);

Rückgabe

col1
====
d
e