sql >> Database teknologi >  >> RDS >> Oracle

Hvad er forskellen mellem 'ikke i' og 'eksisterer ikke'?

Forskellen mellem IKKE I og FINDER IKKE bliver tydeligt, hvor der er NULL værdier inkluderet i resultatet.

For eksempel:

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);

Bemærk :Den vigtigste forskel er, at test_b indeholder en null værdi.

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

Ingen rækker returneret

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

Returnerer

col1
====
d
e


  1. Sådan ændres skabelonens databasesamlingskodning

  2. Værdien ER IKKE NULL i kodetænder

  3. Opret array for værdier fra listen over kolonner udtrukket i Postgres

  4. Indekser viser ingen forbedring i hastighed