Sql de kullanmış olduğunuz klasik inner , left outer , right outer ve full outer join yanı sıra oracle 12c den bu yana işlerimizi dahada kolaylaştıracak lateral, coss apply ve outer apply joinlerinin ne işe yaradığına değineceğim. Örneklerini https://livesql.oracle.com üzerinden ücretsiz hesap alıp deyebilirsiniz

LATERAL

Sql cümleleri içerisinde aynı satırda başka bir tablodan veri göstermek istediğimizde hata alıyorduk. Lateral join ile soldaki tablo referans gösterilip satır içi görünüm sağlanır. Çok karmaşık ve uzun bolca sub querry olan sorgularda yazmayı kolaylaştıracaktır. .

bu sorgu sonucunda ORA-00904: “E”.”DEPARTMENT_ID”: invalid identifier hatasını almaktayız.

DEPARTMENT_NAMEEMPLOYEE_NAME
Human ResourcesSusan Mavris

Lateral join ile aynı sql de sağ taraftaki tablonun şartını kullanarak yazabiliriz.

CROSS APPLY

Cross apply olarak ta kullanılır. Soldaki tablonun tüm satırlarını döndürür. Örnekle anlatmak gerekirse insan kaynaklarında 2007 tarihinden son en yüksek departman bazında en yüksek maaşla alınan 2 kişiyi bulmak istediğimizde bir çok yere max sum vs. analitik komutlar içeren querryler yazmak yerine aşağıdaki gibi alabiliriz.

Soldaki deparments tablosunda yer alan departman bilgisi ile sağdaki sub querry de yer alan en yüksek maaş alan 2 personel bilgisini birleştirmiş olduk.

OUTER APPLY

Sağdaki tabloyu referans alır. Birleştirmenin sağ tarafı değer döndürmez ise sütünlarda NULL görülür bir nevi left outer join gibi çalışır.

DEPARTMENT_NAMEEMPLOYEE_IDEMPLOYEE_NAMESALARY
Benefits
Construction
Contracting
Control And Credit
Corporate Tax
Government Sales
IT Helpdesk
IT Support
Manufacturing
NOC
Operations
Payroll
Recruiting
Retail Sales
Shareholder Services
Treasury
Executive101Neena Kochhar17000
Public Relations204Hermann Baer10000
Accounting206William Gietz8300
Finance113Luis Popp6900
Human Resources203Susan Mavris6500
Sales173Sundita Kumar6100
Marketing202Pat Fay6000
Administration200Jennifer Whalen4400
IT107Diana Lorentz4200
Purchasing119Karen Colmenares2500
Shipping132TJ Olson2100

Bu sorguda maaşı 2000 üzerinde olan departman bazında en düşük alan personeli listeliyoruz. Görüldüğü gibi departman bilgileri NULL olarak gelmektedir.

LATERAL, CROSS APPLY OUTER APPLY join

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir