Search notes:

Oracle SQL: Subquery

A nested subquery is a select statement («subquery-block») that is found in the where or having clause of an «outer» SQL statement.

Inline view

A subquery that appears in the from part of an outer SQL statement is also referred to as inline view:
select
  …
from (
  select
     …
  from
    …
) sq
where
  sq.…
See also lateral inline views, views and subquery unnesting.

Using a subquery to delete records

--
--     Compare /DatabaseObjects/Views/UpdateableJoinViews/test_01.sql
--
create table tq84_delete_subquery_p (
   id    number    primary key,
   val   varchar2  (10)
);

create table tq84_delete_subquery_c (
  id_p   references tq84_delete_subquery_p,
  col    varchar2(10)
);

---------------------------------------------------------

insert into tq84_delete_subquery_p values (1, 'one'     );
insert into tq84_delete_subquery_p values (2, 'two'     );
insert into tq84_delete_subquery_p values (3, 'three'   );
insert into tq84_delete_subquery_p values (4, 'four'    );

---------------------------------------------------------

insert into tq84_delete_subquery_c values (1, 'foo'     );
insert into tq84_delete_subquery_c values (1, 'bar'     );
insert into tq84_delete_subquery_c values (1, 'baz'     );

insert into tq84_delete_subquery_c values (2, 'apple'   );
insert into tq84_delete_subquery_c values (2, 'orange'  );
insert into tq84_delete_subquery_c values (2, 'pear'    );

insert into tq84_delete_subquery_c values (3, 'New York');
insert into tq84_delete_subquery_c values (3, 'Paris'   );
insert into tq84_delete_subquery_c values (3, 'Berlin'  );

insert into tq84_delete_subquery_c values (4, 'Mark'    );
insert into tq84_delete_subquery_c values (4, 'Joe'     );
insert into tq84_delete_subquery_c values (4, 'Susan'   );

---------------------------------------------------------


delete from (
  select * from 
    tq84_delete_subquery_p p join 
    tq84_delete_subquery_c c on p.id = c.id_p
  where
    c.col like '%o%'
);

prompt

select * from tq84_delete_subquery_p;

prompt
prompt

select * from tq84_delete_subquery_c;

prompt

---------------------------------------------------------

drop table tq84_delete_subquery_c purge;
drop table tq84_delete_subquery_p purge;
Github repository Oracle-Patterns, path: /SQL/delete/subquery.sql

Correlated subquery

A nested subquery that references a column of the outer select statement is a correlated subquery.

See also

where clause subqueries
A subquery can be prefixed by the keyword lateral in which case it becomes a lateral inline view.
The optimizer feature subquery unnesting query transformation
A scalar subqueries is a subquery that returns zero or one records with exactly one column.
The unnest no_unnest and qb_name hints.
Using subqueries in a select list of a view prevents the view from being updatable.

Index