Veritabanı Yönetim Sistemleri-I

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

description

Veritabanı Yönetim Sistemleri-I. Ders 4 Alt sorgular. Alt sorgular. Bir alt sorgu ( subquery ) bir SELECT sorgusunun içine yazılan ikinci bir SELECT sorgusudur. - PowerPoint PPT Presentation

Transcript of Veritabanı Yönetim Sistemleri-I

Page 1: Veritabanı Yönetim Sistemleri-I

Veritabanı Yönetim Sistemleri-I

Ders 4 Alt sorgular

Page 2: Veritabanı Yönetim Sistemleri-I

Alt sorgularBir 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

Page 3: Veritabanı Yönetim Sistemleri-I

Alt sorgularAlt sorguların genelde kullanıldığı

belli başlı durumlar şunlardır1. 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

Page 4: Veritabanı Yönetim Sistemleri-I

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: 10000001 kodu müşteri) sipariş

edilen ürünlerin listesini almak istenildiği durum

Page 5: Veritabanı Yönetim Sistemleri-I

Alt sorgularNormalde 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)

Page 6: Veritabanı Yönetim Sistemleri-I

Alt sorgularAz önceki sip_num bilgilerini kullanarak bu

müşteriye ait siparişlerin ürünlerini sip_edilen tablosundan sorgulayabiliriz

Page 7: Veritabanı Yönetim Sistemleri-I

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

Page 8: Veritabanı Yönetim Sistemleri-I

Alt sorgular2004 içinde sipariş vermiş olan müşterilerin

must_ad, must_ulke bilgilerini listeleyen

Page 9: Veritabanı Yönetim Sistemleri-I

Alt sorgularAlt 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

Page 10: Veritabanı Yönetim Sistemleri-I

Alt sorgularAlt 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

Page 11: Veritabanı Yönetim Sistemleri-I

Alt sorgularFiyatı, ürünler tablosundaki

ortalama fiyattan daha büyük olan ürünleri listeleyiniz

Muhtemel kullanılacak sorgular1. SELECT * FROM urunler

WHERE urun_fiyat > ??????2. SELECT AVG(urun_fiyat)

FROM urunler

Page 12: Veritabanı Yönetim Sistemleri-I

Alt sorgular

Page 13: Veritabanı Yönetim Sistemleri-I

Alt sorgularBenzer şekilde

◦En büyük fiyata sahip ürünü listelemek istersek

Page 14: Veritabanı Yönetim Sistemleri-I

Alt sorgularWHERE 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)

Page 15: Veritabanı Yönetim Sistemleri-I

Alt sorgular

Page 16: Veritabanı Yönetim Sistemleri-I

Alt sorgularAlt 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

Page 17: Veritabanı Yönetim Sistemleri-I

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

Page 18: Veritabanı Yönetim Sistemleri-I

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

Page 19: Veritabanı Yönetim Sistemleri-I

Alt sorgularBenzer mantıkla, bu listenin tam tersini, yani

ürünü olmayan satıcıları da NOT EXISTS ile alabiliriz

Page 20: Veritabanı Yönetim Sistemleri-I

Alt sorgular Aynı mantıkla bulabileceğimiz

◦ Siparişi olan ve ◦ Siparişi olmayan müşterilerin listelenmesi için gerekli sorgular

Page 21: Veritabanı Yönetim Sistemleri-I

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

Page 22: Veritabanı Yönetim Sistemleri-I

Alt sorgularHer 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

Page 23: Veritabanı Yönetim Sistemleri-I

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.)