Oracle
 sql >> база данни >  >> RDS >> Oracle

Каква е разликата между „не е в“ и „не съществува“?

Разликата мНЕ В и НЕ СЪЩЕСТВУВА става ясно къде има NULL стойности, включени в резултата.

Например:

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

Забележка :Основната им разлика е, че test_b съдържа null стойност.

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

Няма върнати редове

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

Връщане

col1
====
d
e


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle счита празните низове за NULL, докато SQL Server не го прави - как се справя най-добре с това?

  2. SQL присъединяване на нулеви стойности

  3. Как да свия временното пространство за таблица в oracle?

  4. Проблем със съхранената процедура на Oracle inout параметър – Разбрах решението – Печатна грешка

  5. Какво представляват скритите полета на Oracle?