Veritabanı Yönetim Sistemleri-I
-
Upload
matthew-russo -
Category
Documents
-
view
53 -
download
0
description
Transcript of Veritabanı Yönetim Sistemleri-I
Veritabanı Yönetim Sistemleri-I
Ders 4 Alt sorgular
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
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
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
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)
Alt sorgularAz önceki sip_num bilgilerini kullanarak bu
müşteriye ait siparişlerin ürünlerini sip_edilen tablosundan sorgulayabiliriz
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
Alt sorgular2004 içinde sipariş vermiş olan müşterilerin
must_ad, must_ulke bilgilerini listeleyen
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
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
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
Alt sorgular
Alt sorgularBenzer şekilde
◦En büyük fiyata sahip ürünü listelemek istersek
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)
Alt sorgular
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
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
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
Alt sorgularBenzer mantıkla, bu listenin tam tersini, yani
ürünü olmayan satıcıları da NOT EXISTS ile alabiliriz
Alt sorgular Aynı mantıkla bulabileceğimiz
◦ Siparişi olan ve ◦ Siparişi olmayan müşterilerin listelenmesi için gerekli sorgular
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
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
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.)