SQL sorguları RDBMS CRUD’un (oluşturma, okuma, güncelleme, silme) et ve patatesleridir. Sadece uygulamanız yada kurumsal veritabanınız büyüdüğünde, koşullu, gereksinime özgü verileri almak için akıllı sorgulara olan gerekseme, eğer olmazsa olmaz haline gelir.
SQL nispeten kapsamlıdır ve her biri çeşitli iş kullanımları için uygun olan birçok işleve haizdir. Bu işlevlerden biri alt sorguların kullanımını ihtiva eder.
Kodlarınızı verimli ve etkili hale getirmek için, verileri getirmek, varolan değişkenleri işlemek ve tek bir hareketle birden oldukca hedefe ulaşmak için SQL kodlarınızdaki alt sorguları kullanabilirsiniz.
SQL alt sorguları nedir?
Alt sorgu, başka bir ana sorgu içinde parametre olarak çalışan iç içe geçmiş bir sorgudur. Alt sorgu bir iç sorgu, ana sorgu ise dış sorgu.
Alt sorgu, verileri ana sorgu için ayraç içi bağımsız değişken olarak döndürürken, ana sorgu nihai sonucu daha da alır.
Alt sorgular Seçmek ifadesinde yada Nerede cümlecik. Bu şekilde bir yapı, alt sorgunun iyi tanımlanmış bir veri filtreleme koşulu olarak davranmasını sağlar. Ne yazık ki, alt sorgular yalnızca Grupla komutlar ve değil Sipariş Eden komutlarına izin verildiği için yalnızca ana sorguda izin verilir.
Çoğu zaman, her alt sorgu, Seçmek cümlecik. Sadece, ana sorgunun birden oldukca sütunu olduğu senaryolar vardır. Bir alt sorgu, başka bir alt sorgu içinde iç içe dönüştürülebilir ve bu da onu iç içe geçmiş bir alt sorgu haline getirir.
Bir alt sorgunun katılık aşağıdaki gibidir:
Select column_name from table where condition=
(SELECT conditional_column FROM table) as alias;
Mesela, aşağıdaki tabloya haiz olduğunuzu varsayalım:
KİMLİĞİ | First_name | Second_name | Agency_fee |
1 | Yuhanna | Fitil | 5000 |
2 | Robert | Graham | 4000 |
3 | Stephen | Hicks | 8000 |
4 | Bob | Marley | 1000 |
5 | Meryem | Ellen | 9000 |
Bu tabloda, averaj ajans tutarının üstünde kazanan kişilerin adlarını çekmek için, birden oldukca kod satırı yazmak yerine bir alt sorgu yazabilirsiniz.
Sorgu şu şekilde görünür:
Select * from agent_details
where Agency_Fee > (select avg(Agency_Fee) from agent_details);
Önceki komut > işareti dış sorgudur, oysa, > işareti iç sorgudur.
İç sorgu, alt sorgu içindeki averaj ajans ücretini hesaplar ve dış sorgu hesaplanan averaj değerden büyük tüm değerleri gösterir.
SQL’de Alt Sorgular Iyi mi Kullanılır?
SQL’de alt sorguları kullanmanın birkaç değişik yolu vardır.
Where yan tümcesi ile alt sorgular
SQL’deki bir alt sorgunun en temel yapılarından biri Where yan tümcesi içindedir. Ne aradığınızı tanımlamanın en kolay yoludur. Select deyimi, alt sorgu koşullarına nazaran değerler döndürür ve ana sorgu için parametre olarak kullanır.
Sorgu yapısı:
select * from table_name
where column_name = (select column_name from table_name);
Bunu bir örnekle açıklayalım.
agency_details tablosundan en yüksek ikinci acente ücretini bulmak istediğinizi varsayalım. Bunu yapmak için, SQL içinde alternatif işlevler vardır; bununla beraber, en iyi yöntem bir alt sorgu kullanmaktır.
Alt sorguyu şu şekilde tanımlayabilirsiniz:
select *, max(Agency_fee)
from agent_details
where Agency_fee < (select max(Agency_fee) from agent_details);
Elde edilecek ifade size 8000, verilen tablodaki en yüksek ikinci ücrettir. Sorgu çalıştığında, alt sorgu ücret listesinden maksimum kıymeti hesaplar. En yüksek ücret tutarı (9000) bellekte depolanır.
Bu bölüm hesaplandıktan sonrasında, sorgunun ikinci kısmı hesaplanır ve bu da tablodan en yüksek ikinci tutarı bulur (bu yüzden < işareti kullanılır). Netice, 8000, tablodaki en yüksek ikinci ücrettir.
From Yan tümcesi içindeki alt sorgular
Alt sorgulardaki bir öteki varyasyon da Kaynak cümlecik. Benzer bir kavram olarak, ilkin iç sorgu işlenir ve dış sorgu ondan sonra işlenir. İç sorgu verilere filtre uygular ve kimlik = 3'ün bulunmuş olduğu neticeleri gösterir.
Müracaat sorgusu şunlardır:
select a.* from (
select agency_fee from agent_details
where ID= 3) as a;
Bu oldukca temel bir yapıdır; sadece, veri tablolarınız ne kadar karmaşık olursa, koşullarınızla eşleşen daha çok veri satırı alırsınız.
Deyime Ekle ile alt sorguları kullanma
Varolan bir tabloyu bazı yeni veri satırlarıyla güncelleştirmek isterseniz, Ekle demeç. Belirli bir koşula nazaran değerler eklemek istiyorsanız, bir alt sorgunun oldukça yararlı olduğu kanıtlanabilir.
Sorgu yapısı:
insert into table_name
select * from table_name
where column_name = conditions;
select * from table_name;
Insert into deyimini alt sorguyla iyi mi kullanabileceğinize ilişkin bir örnek aşağıda verilmiştir:
insert into agent_details
select * from agent_details
where agency_fee in (1000, 5000);
select * from agent_details;
Sorgu çalıştırıldıktan sonrasında, koşulla eşleşen değerler varolan tabloya tekrardan eklenmiş olur. Bu, bir sonraki * öğesini seçin müracaat tüm sütunları beraber alır ve olduğu şeklinde agent_details tablosuna ekler. Bu, bir sonraki içinde deyimi aynı anda birden oldukca filtre koşulu tanımlamak için kullanılır.
Update Deyimiyle Alt Sorguları Kullanma
Sorguları çalıştırırken temel tabloları güncelleştirmek istediğiniz durumlar vardır. Bunu yapmak için, güncelleştirmek ifadesiyle beraber sorgu komutlarını da ifade eder.
Tablodaki detayları tek bir örnekte güncelleştirmek için alt sorguyu şu şekilde yazacaksınız:
update table_name
set column_name = new_value
where column_name =
(select column_name from table_name where = );
Güncelleştirme deyiminin kullanımını gösteren bir örnek aşağıda verilmiştir:
UPDATE agent_details
SET agency_fee = 35000
WHERE agency_fee =
(SELECT agency_fee FROM agent_details WHERE First_name='John');
select * from agent_details;
Alt sorgu, sütun agency_fee filtreleyecek ve First_Name eşleştiği satırları ayıracaktır Yuhanna. Dış sorgu ondan sonra yürütülür ve burada ajans tutarı John Wick için 35000 olarak güncellenir.
Bir * öğesini seçin nihai neticeleri denetlemek için ifade; John Wick için ajans tutarının 35000 olarak güncelleştiğini farkına varacaksınız, bundan dolayı sorguda tanımlanan koşullarla eşleşen yalnızca örnek vardır.
Delete deyimiyle alt sorguları kullanma
Mevcut bir tablodaki veri satırlarını güncelleştirdiğiniz güncelleştirme deyiminde olduğu şeklinde, silmek deyimi, bir koşula nazaran veri satırlarını siler.
Delete deyimi yapısı:
delete from table_name where variable/column name =
(select column_name from table_name where = condition);
İşte bir örnek:
Delete from agent_details
where First_name IN
(select First_name from agent_details where agency_fee = 9000);
select * from agent_details;
SQL İçinde Alt Sorguları Kullanma
Alt sorgular, SQL içinde sizi sonsuz gereksiz kod satırları yazmaktan kurtarabilecek muhteşem bir özelliktir. Teklifinizi yerine getirmek için alt sorguların temel işlevlerini kullanabildiğinizde, SQL kodlamasının karmaşıklıklarına girme mevzusunda asla endişelenmek istemezsiniz.
Daima oyununuzun zirvesinde olmanızı sağlamak için mevcut SQL bilginizi geliştirmek daima en iyisidir. Güvenli olun, SQL hile sayfaları size temellerinizi tek bir bakışta iyi mi fırçalamanız mevzusunda iyi bir düşünce verebilir.