WITH kullanımının mantığı; iç içe sorgularda, aynı sorgunun tekrar tekrar yazılmasını ortadan kaldırmaktır.  WITH ile oluşturduğumuz tablo, localde tutulmaktadır, data dictionary’de tutulmamaktadır (procedure,function data dictionary’de tutulur.) Basti bir örnekle açıklamak gerekirse.
NOT: Örneği HR şeması üzerinden gösteriyor olacağım. HR schemasını(şemasını) nasıl kurarım, buraya tıklayınız.

SELECT deptno, bdate,job FROM employees

sorgusunun sonucu:

SELECT deptno, bdate,job FROM employees

SELECT deptno, bdate,job FROM employees

 

WITH my_employee AS (SELECT deptno, bdate,job FROM employees)
  SELECT *
  FROM my_employee
  WHERE deptno='20'
UNION ALL
  SELECT *
  FROM my_employee
WHERE job like 'AD%';

sorgusunun sonucu:

WITH Kullanımı

WITH Kullanımı

Yukarıdaki sorguda: my_employee isimli obje tanımlıyorum, bu obje benim daha sonra alt sorgularda kullanacağım, sorguyu içeriyor.
Benzer mantıkta fonksiyonu da, WITH ile çağırabiliriz. Yani data dictionary’ye kaydetmeden. WITH FUNCTION kullanıldığı zaman, hemen arkasından ilgili select çalıştırılmalı.