Veritabanı Yönetim Sistemleri-I

Preview:

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

Citation preview

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

Recommended