Karmaşık (İç içe) SELECT Sorguları

Slides:



Advertisements
Benzer bir sunumlar
T sql-diğer komutlar Metin Akbulut.
Advertisements

VTYS Öğr. Gör. Engin DUTAR
Hazırlayan : Öğr. Gör. Fahri YILMAZ
Verileri gruplayarak analiz
KARMAŞIK SORGULAR.
SQL (Structured Query Language)
KARMAŞIK SORGULAR.
SQL (Structured Query Language)
SQL Structured Query Language (Yapısal sorgulama dili)
En ucuzundan en pahalısına doğru sıralanmış olarak “Cep Telefonları” kategorisindeki tüm ürünlerin isimleri “Spor” kategorisinde ürünleri listelenen “İstanbul”
SQL KOMUTLARI.
SQL Komutlar 2 Sibel SOMYÜREK.
VERİ TABANI II- 4.HAFTA ALT SORGULAR Türetilmiş ve İLİntİlİ tablolar
SQL de Değişken Tanımlama
EkoPC Bilişim Ltd. Eğitim Hizmetleri
SQL Komutlar 4 Fahri YILMAZ.
Veritabanı Yönetim Sistemleri-I
VERİ TABANI ve YÖNETİMİ
Alt Sorgular Veritabanı 2.
Veri Tabanı Yönetim Sistemleri
Tek Tablo İçinde Sorgulamalar
SQL Sorgu Örnekleri.
T-SQL-2.Konu Akış Kontrolleri.
VeriTabanı Uygulama. Tabloları yaratmak için MySQL komutları.
BÖLÜM 6 SQL SERVER KOMUTLARI.
10 Gruplandırarak Sorgulama
SQL (STRUCTURED QUERY LANGUAGE)
VTYS Öğr. Gör. Engin DUTAR
Departman ve Personel Tablosu Soruları
11 ekim 2011 VTYS –II Dersi. Kalıp İfadelerle Sorgu (Pattern) Eğer bir sözel verinin sadece belli kriterlere uyanlarını seçeceksek sütun_adı LIKE kalıp.
VIEW (BAKIŞ) OLUŞTURMA
VIEW lerle çalışmak 11.BÖLÜM.
SQL Komutlar 3 Sibel SOMYÜREK.
VTYS Öğr. Gör. Engin DUTAR
VERİTABANI ve YÖNETİMİ
SQL’e Giriş ve SELECT Komutu
SQL de Değişken Tanımlama
ÇOKLU TABLOLAR.
MySQL Operatörleri ve Fonksiyonları
SQL SERVER 2008 Yücel YILDIRIM.
VeriTabanı Uygulama.
Veri Tabanı Yönetim Sistemleri 1 Ders 6 Çok Tablolu Sorgular
SQL Sibel SOMYÜREK.
Veritabanı Yönetim Sistemleri-I
SQL Komutları (2) Uzm. Murat YAZICI.
VTYS Öğr. Gör. Engin DUTAR
SQL’ e Giriş Uzm. Murat YAZICI.
Bir programlama dilinde fonksiyon denildiğinde akla ilk olarak belli işleri yapmak üzere tasarlanmış kod blokları gelir. Fonksiyonlarla çalışmak, tekrarlanan.
Veritabanı Kavramları
Yapısal Sorgulama Dili SQL Hafta 7. TEKRARLI SATIRLARI ÖNLEMEK  DISTINCT komutu ile sorgu sonucunda birden fazla kayıt aynı verileri içeriyorsa tekrarlı.
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
GROUP BY HAVING ORDER BY İbrahim Onur Sığırcı. Ö RNEK 1 – G RUP F ONKSIYONLARı * «Sales» departmanında kaç kişinin çalıştığını, toplam maaşlarını, en.
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
View View’ler select ifadesi ile tanımlanmış sanal tablolardır. Temel amacı base tabloların içerisinden veri kümesi getirip ortaya çıkan sonucu sanal.
Veri Tabanı Yönetimi Dersi 5
Veri Tabanı Yönetimi Dersi 1. Laboratuvarı
Öğretim Görevlisi Alper Talha Karadeniz Veri Tabanı 2
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
VIEW lerle çalışmak 11.BÖLÜM.
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
VERİ TABANI SQL (STRUCTURED QUERY LANGUAGE) SAVAŞ TUNÇER.
Veri Tabanı Temel Kavramlar.
SQL GROUP BY HAVING.
GROUP BY HAVING ORDER BY LIMIT
Sorgu / dml / ddl komutları
SQL (STRUCTURED QUERY LANGUAGE)
VERİ TABANI II- 4.HAFTA ALT SORGULAR Türetilmiş ve İLİntİlİ tablolar
Intersect Tablo1 Sno Ad Soyad 1 Ali Ak 2 Veli Kara 3 Can Mor Tablo2
Sunum transkripti:

Karmaşık (İç içe) SELECT Sorguları

İç içe Select sorguları, bir başka deyişle Alt Sorgu kavramı SQL‘de en zorlanılan kısımdır. Bir sorgudan elde ettiğiniz sonucu, diğer bir sorgu için kullanmanız gerektiğinde, iç içe sorgu kullanmanız gerekir. Alt sorgu kavramı, genellikle birden fazla tablo söz konusu ise ortaya çıkar. Bu yüzden, örnek verebilmek amacıyla 5 adet tablo oluşturup, ilişkilerini kuralım.

Yukarıdaki tablolar bir film veri tabanı oluşturmak için tasarlanmıştır. Açıklamak gerekirse ; Örnek veri tabanının temelinde Filmler var. Filmlerin haricinde, Film Türleri ve Filmlerde oynayan Oyuncular var. Filmler ile Oyuncular arasında sonsuza sonsuz ilişki kurup, gereksiz veri tekrarı yapılmasını önlemek amacıyla araya bir geçiş tablosu yapıldı. Aynı işlem Filmler ile Türler arasında da yapıldı. İlişkileri bu şekilde kurduktan sonra, alt sorgu kavramına dönüp, devam edelim. Bu veri tabanını temel alarak, dramatik filmlere ulaşmak, örneğin Tom Hanks’in filmlerine ulaşmak ya da adı “The” ile başlayan bilim kurgu filmlerine ulaşmak gibi birden fazla tabloyu ilgilendiren sorguları, alt sorgu kavramı ile ya da JOIN komutları kullanılarak yapılabilir.

Örnek bir alt sorgu Bu sorgu bize Tom Hanks’in oynadığı filmleri getirsin ; SELECT Ad FROM Filmler WHERE Film_ID IN ( SELECT Film_ID FROM Oyuncu_Film WHERE Oyuncu_ID = ( SELECT Oyuncu_ID FROM Oyuncular WHERE Ad = "Tom" AND Soyad = "Hanks" ) )

Bu kodda her bir alt SELECT, bir üsttekine değer göndermektedir Bu kodda her bir alt SELECT, bir üsttekine değer göndermektedir. Üstteki sorgu o değeri alıp kullanır. Zaten iç içe select sorgularının mantığıda budur.

İç içe sorgular ile bilinmesi gereken noktalar Alt sorgu, bir üstteki sorguda yer alan WHERE, HAVING veya FROM kelimeleri içine yazılırlar. (Yukarıdaki örnekte WHERE içinde bir alt sorgu ve onun altındaki WHERE içine de bir başka alt sorgu yazılmıştı.) Alt sorgular parantez işaretleri içerisinde yazılmalıdır. Alt sorgularda ORDER BY komutu kullanılamaz, ancak ana sorguda kullanabilirsiniz.

WHERE ve HAVING ile alt sorguya geçerken, alt sorgunun üstteki sorguya göndereceği değer tek de olabilir birden fazla da olabilir. Tek değer gönderenlere tek satır sorguları, birden fazla değer gönderenlere çoklu satır sorguları denir. Ve bu ayrıma göre WHERE ya da HAVING için kullanılan kriter belirteci farklılık gösterir. Tek Satır Döndüren Alt Sorgular : Kriter belirteçleri =, <, > , <=, >= veya <> olabilir. Çok Satır Döndüren Alt Sorgular : Kriter belirteçleri IN, ANY veya ALL olabilir.

Örnek Türü dram olan filmlerin Adlarını ve IMDB Puanlarını listeleyelim ; SELECT Ad, IMDB_Puan FROM Filmler WHERE Film_ID IN ( SELECT Film_ID FROM Film_Tur WHERE Tur_ID IN ( SELECT Tur_ID FROM Turler WHERE Ad = "Dram" ) )

Açıklama : En alttaki sorguya bakılırsa, türü dram olan filmlerin Tur_ID’leri bir üstteki sorguya gönderilmiştir. Ortadaki sorgu ifadesi ise Tur_ID’si dram olan filmlerin Film_ID’lerini ana sorguya göndermiştir. Bütün kriterler bu iki alt sorgu ile sağlandıktan sonra en üstteki SELECT ifadesi ile Ad ve IMDB_Puan değerleri seçilerek listelenmiştir.

Natalia Portman’ın oynadığı film sayısını bulalım ; SELECT COUNT(Film_ID) AS Film_Sayisi FROM Filmler WHERE Film_ID IN ( SELECT Film_ID FROM Oyuncu_Film WHERE Oyuncu_ID IN ( SELECT Oyuncu_ID FROM Oyuncular WHERE Ad = "Natalia" AND Soyad = "Portman" ) )

Açıklama : En alttaki sorguda adı Natalia soyadı Portman olan oyuncunun Oyuncu_ID’si bir üstteki sorguya gönderilmiştir. Ortadaki sorgu ise, alt sorgudan gelen Oyuncu_ID değerini barındıran filmlerin Film_ID’lerini bir üstteki sorguya göndermiştir. (Dikkat ederseniz Oyuncu_Film tablosunda 2 sütun var : Oyuncu_ID, Film_ID) Ana sorguda ise alt sorgulardaki kriterlerden geçen kayıtların sayısı, yani Natalia Portman’ın oynadığı filmlerin sayısı bulunmuştur.

IMDB Puanı, tüm filmlerin IMDB Puanlarının ortalamasından büyük olan dram filmlerin adlarını, IMDB puanlarını ve tarihlerini listeleyelim ; SELECT Ad, Tarih, IMDB_Puan FROM Filmler WHERE IMDB_Puan > ( SELECT AVG(IMDB_Puan) FROM Filmler ) AND Film_ID IN ( SELECT Film_ID FROM Film_Tur WHERE Tur_ID IN ( SELECT Tur_ID FROM Turler WHERE Ad = "Dram" ) )

Açıklama : Bu sorguda 2 farlı kriter mevcuttur : IMDB puanı, ortalamanın üstünde olan filmler ve dram filmleri. Dramatik filmleri bulmak amacıyla en alttaki sorgudan, türü dram olan filmlerin Tur_ID’leri bir üsttekine gönderilmiştir. Bir üstteki sorguda ise, dramatik filmlerin Film_ID’lerini ana sorguya göndermiştir. Ortalama puanların üzerindeki filmler bulmak amacıyla AVG fonksiyonu kullanarak ana sorguya bir kriter daha belirlemiş olduk. 2 kriterde sağlandığına göre artık Ad, Tarih ve IMDB_Puan değerlerini SELECT edebiliriz.

Tom Hanks’in oynadığı dramatik filmlere bakalım ; SELECT Ad FROM Filmler WHERE Film_ID IN ( SELECT Film_ID FROM Oyuncu_Film WHERE Oyuncu_ID = ( SELECT Oyuncu_ID FROM Oyuncular WHERE Ad LIKE "Tom%" ) ) AND Film_ID IN ( FROM Film_Tur WHERE Tur_ID = ( SELECT Tur_ID FROM Turler WHERE Ad LIKE "Dra%" ))

Açıklama : Bu sorgu için 5 tabloyu da kullanmamız gerekiyor Açıklama : Bu sorgu için 5 tabloyu da kullanmamız gerekiyor. Yine 2 farklı kritere uyan filmleri listeleyeceğiz. Önce Tom Hanks’in oynadığı filmlerin Film_ID’leri, daha sonra türü dram olan filmlerin Film_ID’leri ana sorguya gönderilmiştir. Bu 2 kriteri sağladıktan sonra SELECT ile listeleme yapabiliriz.