Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Veritabanı Yönetim Sistemleri-I Ders 4 Alt sorgular.

Benzer bir sunumlar


... konulu sunumlar: "Veritabanı Yönetim Sistemleri-I Ders 4 Alt sorgular."— Sunum transkripti:

1 Veritabanı Yönetim Sistemleri-I Ders 4 Alt sorgular

2 Bir alt sorgu (subquery) bir SELECT sorgusunun içine yazılan ikinci bir SELECT sorgusudur. İ ç içe yazılan sorgular, aşa ğ ıdan yukarıya (veya içten dışa) do ğ ru çalıştırılarak, her sorgunun sonucu di ğ er sorguya girdi olarak verilir ve en sonunda, en dıştaki sorgunun sonucu alınır Özellikle birden fazla tabloya aynı anda erişilmesi gereken durumlarda alt sorgu ile sorgulamak kolay ve hızlı sonuçlar üretebilir

3 Alt sorgular Alt sorguların genelde kullanıldı ğ ı belli başlı durumlar şunlardır 1.WHERE.. IN anahtar kelimeleri ile bir sorgunun sonucu di ğ er sorguya şart olarak eklendi ğ i durumlar 2.WHERE … EXISTS ile sorgunun sonucu dönen kayıt olup olmadı ğ ı kontrol edilir 3.SELECT listesine yeni sütun olarak eklenen alt sorgular

4 Alt sorgular siparisler sip_edilen sip_id alanı siparişi veren müşterinin id bilgisini tutmaktadır siparisler ve sip_edilen tabloları birbirlerine sip_num alanı ile mantıksal olarak ba ğ lıdırlar Birinci durum için örnek: ◦ Belli bir müşteriye ait (ör: kodu müşteri) sipariş edilen ürünlerin listesini almak istenildi ğ i durum

5 Alt sorgular Normalde bir müşteriye ait siparişi almak için gereken SQL sorgusu Bu müşteriye ait siparişlerin numaraları (sip_edilen tablosunu sorgulamak için kullanılacak)

6 Alt sorgular Az önceki sip_num bilgilerini kullanarak bu müşteriye ait siparişlerin ürünlerini sip_edilen tablosundan sorgulayabiliriz

7 Alt sorgular Bu iki sorguyu ayrı ayrı elle yazıp, birleştirmek yerine alt sorgu mantı ğ ını kullanarak, birinci sorgunun çıktısını otomatik olarak ikinci (üst) sorguya verebiliriz 2005, 2009 üretecek ve bu sonucu üst sorguya verecek

8 Alt sorgular 2004 içinde sipariş vermiş olan müşterilerin must_ad, must_ulke bilgilerini listeleyen

9 Alt sorgular Alt sorgu yazarken dikkat edilmesi gerekenler ◦ Alt sorgu her zaman tek bir sütun döndürmek zorundadır. E ğ er alt sorgu iki sütun içerirse, hata oluşacaktır ◦ Alt sorgudan dönen sütun veri türü ile üst sorguda kıyaslanan sütun veri türü aynı veya uyumlu olmalıdır

10 Alt sorgular Alt sorgularda eşitlik kıyaslanmadı ğ ı durumlarda olabilir, böyle zamanlarda di ğ er SQL operatörleri de kullanılabilir ◦ >, >=, gibi Fakat bu tarz kıyaslamalarda alt sorgu sadece tek bir sütun ve tek bir satır döndürmek zorundadır

11 Alt sorgular Fiyatı, ürünler tablosundaki ortalama fiyattan daha büyük olan ürünleri listeleyiniz Muhtemel kullanılacak sorgular 1.SELECT * FROM urunler WHERE urun_fiyat > ?????? 2.SELECT AVG(urun_fiyat) FROM urunler

12 Alt sorgular

13 Benzer şekilde ◦ En büyük fiyata sahip ürünü listelemek istersek

14 Alt sorgular WHERE ile birlikte kullanılan alt sorgular birden fazla iç içe sorguyu içerebilir Ör: “BR01” kodlu ürünü sipariş eden müşterilerin adlarını listeleyiniz. Sip_edilen tablosu sorgusu (BR01 kodlu ürünün dahil oldu ğ u sipariş numaralarının tespiti) Siparisler tablosu sorgusu (Verilen sipariş numaralarını hangi müşteri id’lerin ilişkili oldu ğ unu tespiti) musteriler tablosu sorgusu (Verilen müşteri id’lere ait müşterlerin adlarının listelenmesi)

15 Alt sorgular

16 Alt sorguların ikinci türünde, alttaki sorgunun sonuç döndürüp döndürmemesi kontrol edilir. Bu durumda EXISTS operatörü kullanılır ◦ E ğ er dönen alt sorgu sonuç içeriyorsa TRUE ◦ Sonuç içermiyorsa FALSE üreterek WHERE içinde bir şart olarak kullanılır

17 Alt sorgular Ürünler tablosunda herhangi bir ürünü bulunan satıcıların tüm bilgilerini listelemek istedi ğ imizi düşünelim Herhangi bir satıcının (ör: DLL01 kodlu satıcı) ürünü olup olmadı ğ ını veren sorgu ◦ SELECT * FROM urunler WHERE satici_id = ‘DLL01’ ◦ Bu sorgu sonuç döndürürse ürünü var, sonuç döndürmezse ürünü yok demektir ◦ Bu sorgunun tüm satıcıları döndüren listeye adapte edilerek, satıcıların bu şarta göre listelenmesi gerekmektedir

18 Alt sorgular Alttaki sorguda satici_id üstteki tablodaki satici_id ile kıyaslanıyor (satici_id = s.satici_id) Dolayısıyla alt sorgu, üstteki tablonun her satırı için ayrı ayrı çalıştırılarak, ayrı ayrı sonuçlar üretiyor

19 Alt sorgular Benzer mantıkla, bu listenin tam tersini, yani ürünü olmayan satıcıları da NOT EXISTS ile alabiliriz

20 Alt sorgular Aynı mantıkla bulabilece ğ imiz ◦ Siparişi olan ve ◦ Siparişi olmayan müşterilerin listelenmesi için gerekli sorgular

21 Alt sorgular Üçüncü alt sorgu türü ◦ SELECT listesine ayrı bir sütun olarak alt sorguların sonucunun eklendi ğ i durumlardır ◦ Bu durumdaki alt sorgular  Tek de ğ er (tek satır ve tek sütun) döndürmek zorundadır  Herhangi bir türde de ğ er içerebilir  Bu tarz alt sorgulardan SELECT listesine istenen sayıda eklenebilir

22 Alt sorgular Her müşterinin id, ad de ğ erleri yanında, toplam sipariş sayısını yanına yazdıralım Alt sorgu her satır için ayrı ayrı çalışacak ve COUNT(*) sonucunu üretecektir

23 Alt sorgular Her satıcının adı ve ürün sayısı, ortalama ürün fiyatı listelenmesi 1. Alt sorgu (adet) 2. Alt sorgu (ortalama fiy.)


"Veritabanı Yönetim Sistemleri-I Ders 4 Alt sorgular." indir ppt

Benzer bir sunumlar


Google Reklamları