Можно использовать и несколько выборок, разделяя их запятой.
Пример:
with test1 as ( select 1 as id from dual union all select 2 as id from dual ), test2 as ( select id from test1 minus select 1 as id from dual union all select 3 as id from dual ) select id from test1 join test2 using (id);
Что бы не писать несколько раз одни и те же выборки в запросе, а использовать виртуальную таблицу. при попытки повторно написать with as :name - oracle ругаетя ошибкой.