Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: SQL Question
In article <374bb823_at_newsread3.dircon.co.uk>,
"Paul Davies" <cobalt_at_dircon.co.uk> wrote:
> Are intersects and joins equivalent?
>
> So is the query:
>
> select part from orders_list1
> intersect
> select part from orders_list2
>
> the same as
>
> select a.part from orders_list1 a, orders_list2 b where b.part =
a.part
>
> Similarly is
>
> select part from orders_list1
> minus
> select part_from orders_list2
>
> the same as
>
> select part from orders_list1 where part not in (select part from
> orders_list2)
>
> If they are equivalent, when should one choose to use a set operator
as
> opposed to a join or not in query?
>
> Help appreciated
>
> Paul
>
>
Hi Paul,
It depends.
You should look at that.I think you'll understand.
SQL> select part from orders_list1
2 intersect
3 select part from orders_list2;
100001 rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=64290 Card=1100002 B ytes=14300026) 1 0 INTERSECTION 2 1 SORT (UNIQUE) (Cost=59788 Card=1000000 Bytes=13000000) 3 2 INDEX (FAST FULL SCAN) OF 'SYS_C002081' (UNIQUE) (Cost =496 Card=1000000 Bytes=13000000) 4 1 SORT (UNIQUE) (Cost=4502 Card=100002 Bytes=1300026) 5 4 INDEX (FAST FULL SCAN) OF 'SYS_C002082' (UNIQUE) (Cost =50 Card=100002 Bytes=1300026)
Statistics
16 recursive calls 16022 db block gets 9002 consistent gets 9470 physical reads 0 redo size 1552855 bytes sent via SQL*Net to client 740623 bytes received via SQL*Net from client 6670 SQL*Net roundtrips to/from client 1 sorts (memory) 2 sorts (disk) 100001 rows processed
SQL> select a.part from orders_list1 a,orders_list2 b where a.part=b.part;
100001 rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=13865 Card=100002 By tes=3600072) 1 0 MERGE JOIN (Cost=13865 Card=100002 Bytes=3600072) 2 1 INDEX (FULL SCAN) OF 'SYS_C002081' (UNIQUE) (Cost=8127 C ard=1000000 Bytes=23000000) 3 1 SORT (JOIN) (Cost=5688 Card=100002 Bytes=1300026) 4 3 INDEX (FAST FULL SCAN) OF 'SYS_C002082' (UNIQUE) (Cost =50 Card=100002 Bytes=1300026)
Statistics
8 recursive calls 1453 db block gets 15617 consistent gets 0 physical reads 0 redo size 1552857 bytes sent via SQL*Net to client 740622 bytes received via SQL*Net from client 6670 SQL*Net roundtrips to/from client 1 sorts (memory) 1 sorts (disk) 100001 rows processed
1* select part from orders_list1 minus select part from orders_list2 SQL> / 899999 rows selected.
real: 65945
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=64290 Card=1100002 B ytes=14300026) 1 0 MINUS 2 1 SORT (UNIQUE) (Cost=59788 Card=1000000 Bytes=13000000) 3 2 INDEX (FAST FULL SCAN) OF 'SYS_C002081' (UNIQUE) (Cost =496 Card=1000000 Bytes=13000000) 4 1 SORT (UNIQUE) (Cost=4502 Card=100002 Bytes=1300026) 5 4 INDEX (FAST FULL SCAN) OF 'SYS_C002082' (UNIQUE) (Cost =50 Card=100002 Bytes=1300026)
Statistics
16 recursive calls 16022 db block gets 9002 consistent gets 0 physical reads 0 redo size
60003 SQL*Net roundtrips to/from client 1 sorts (memory) 2 sorts (disk) 899999 rows processed
SQL> select part from orders_list1 where part not in (select part from orders_list2);
899999 rows selected.
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=496 Card=50000 Bytes =1150000) 1 0 INDEX (FAST FULL SCAN) OF 'SYS_C002081' (UNIQUE) (Cost=496 Card=50000 Bytes=1150000) 2 1 INDEX (UNIQUE SCAN) OF 'SYS_C002082' (UNIQUE) (Cost=50 C ard=1 Bytes=13)
Statistics
0 recursive calls 2 db block gets 2128177 consistent gets 0 physical reads 0 redo size
60003 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 899999 rows processed
SQL>
Don't hasitate to contact by e-mail:skaplun_at_my-deja.com,skaplun_at_usa.net.
Best regards,
Serge
--== Sent via Deja.com http://www.deja.com/ ==-- ---Share what you know. Learn what you don't.--- Received on Wed May 26 1999 - 07:28:38 CDT
![]() |
![]() |