Veritabanı Tasarımı. Çoklu Satır Alt Sorgular

Benzer belgeler
Veritabanı Tasarımı. Alt Sorgu Temelleri

BÖLÜM- 5: BİRDEN FAZLA TABLODAN VERİ GETİRMEK

BÖLÜM -2: VERİLERİ SINIRLAMA VE SIRALAMA

Veritabanı Tasarımı COUNT, DISTINCT, NVL

1. IT bölümünde çalışan tüm çalışanların isimlerini gösteren bir sorgu yazınız.

Veri Tabanı II Alt Sorgular

BÖLÜM- 13: ALT SORGULAR İLE VERİ İŞLEME

Emrah UYSAL 1

Veritabanı Tasarımı. Join Yantümceleri

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

BÖLÜM- 11: BÜYÜK VERİ KÜMELERİ

Veritabanı Tasarımı. Büyük/Küçük Harf ve Karakter İşleme

VERİTABANI. SQL (Structured Query Language)

Veritabanı Tasarımı. Self-Join ve Hiyerarşik Sorgular

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

--Tüm personel kayıtlarını seçiniz. SELECT* FROM employees ;

Veritabanı Tasarımı. SQL Deyimi Anatomisi

Veritabanı Tasarımı. Sütunlar, Karakterler ve Satırlar ile Çalışma

Veriyi ve Bilgiyi Organize Etmek. Bilgisayar Mühendisliğine Giriş 1

Veritabanı Yönetim Sistemleri (Başarım Eniyileme Performance Tuning)

Lıke Joker Karakterler, Is [not] Null, Order By, Group By, As

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

Emrah UYSAL 1

Veritabanı Tasarımı. İlişkisel Veritabanı Kavramlarına Giriş

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

SQL DİĞER Deyimler ve Komutlar

Emrah UYSAL 1

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri

Veritabanı Tasarımı. Düzenli İfadeler

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

İleri Seviye Select Cümlecikleri

EBE-368 Veri Tabanı Yönetim Sistemleri SQL

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

Oracle Database 11g: Introduction to SQL

Birden Çok Tabloda Sorgulama (Join)

VERİ TABANI YÖNETİM SİSTEMLERİ I

SQL Komutları (2) Uzm. Murat YAZICI

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Fonksiyonlar, Count, Sum, Avg, Max, Mın, Lower, Upper, Length, Round, Mod, Left, Right, Concat, If

Sql Komutlarından Select Sorgusu Ve Myadmin Üzerinden Anlatımı

IN ve NOT IN Tablodaki alan içeriklerine ulaşmak için IN deyimi kullanılır.

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

Veritabanı. SQL (Structured Query Language)

BÖLÜM- 3: TEK SATIR FONKSİYONLARI

VERİ TABANI YÖNETİM SİSTEMLERİ I

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

Veritabanı Yönetim Sistemleri İleri SQL

SQL NEDİR?... 4 Transact-SQL... 4 SQL Veri İşleme Dili (Data Manipulation Language-DML)... 4 SQL Veri Tanımlama Dili (Data Definition

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

Her bölüm için kısa bazı girişler yapılacak ve bölüm içerisinde anlatılacak olan konuların genel başlıkları belirtilecektir.

VERİTABANI ve YÖNETİMİ

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

Microsoft SQL Server Sorgulama

Veritabanı Tasarımı. Birincil Anahtar, İkincil Anahtar ve Kontrol Kısıtlamaları

Transact-SQL SQL NEDİR? Transact-SQL. SQL Veri İşleme Dili (Data Manipulation Language-DML) SQL Veri Tanımlama Dili (Data Definition Language-DDL)

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Oracle da kullanılan veri tipleri:

Veri Tabanı Yönetim Sistemleri Bölüm - 5

Veri Tabanı Tasarım ve Yönetimi

BÖLÜM -6: VERİLERİ DEĞİŞTİRMEK

Veritabanı Tasarımı. İndeksler ve Eşanlamlar

SQL Kod ile Tablo Oluşturma

Veritabanı Tasarımı. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama

Veritabanı Tasarımı. Basit Eşleme: Dönüşüm İşlemi

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Veritabanı Tasarımı. Seriler ile Çalışma

Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

VERİTABANI Veritabanı Sorgulama

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

Bilgisayar Uygulamaları. MySql

08221 Veri Tabanı II. Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Hafta IV. Öğr. Gör. Murat KEÇECĠOĞLU

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

KULLANICI TANIMLI FONKSİYONLAR

SQL Query and Table Application

Veritabanı Tasarımı. Dönüşüm Fonksiyonları

ORACLE DERS 1 SQL E GİRİŞ

VERİ TABANI ve YÖNETİMİ

Birleştirme (JOIN) işlemi

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Like Joker Karakterler, Order By, Group By

Veritabanı Tasarımı. Tablo Oluşturma

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

SQL e Giriş. Uzm. Murat YAZICI

Lambda İfadeleri (Lambda Expressions)

ENF110 Temel Bilgisayar Uygulamaları Vize Öncesi Tüm Notlar - Episode 2 Excel

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

5 Sorgulama İşlemleri. Veritabanı 1

İLİŞKİSEL VERİTABANI. İlişkisel veritabanlarının ortak özelliği verilerin tablolar aracılığı ile tutulmasıdır.

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Laboratuvar 2 Tek Kayıt Fonksiyonları

Transkript:

Veritabanı Tasarımı Çoklu Satır Alt Sorgular

Konular Çoklu satır alt sorgulardaki IN, ANY ve ALL karşılaştırma operatörlerinin doğru kullanımı WHERE ve HAVING yantümcelerinde çoklu satır alt sorguları oluşturma ve çalıştırma Çoklu satır alt sorgu NULL değeri döndürürse ne olacağının açıklanması Çoklu satır alt sorgularının ne zaman kullanılacağının anlaşılması ve tek satır alt sorgularının ne zaman güvenli olduğu EXISTS ve NOT EXISTS kullanarak alt sorgudan dönen kayıtların test edilmesi 2

Amaç Bir alt sorgu size bilmek istediğiniz bilgileri bulmak için tasarlanmıştır. Ancak, tek satır alt sorgular yalnızca bir satır döndürebilir. Birkaç satır ve çeşitli değerlere dayalı bilgi bulmak isterseniz ne olur? Alt sorgu birkaç satır döndürmelidir. Çoklu satır alt sorgular ve üç karşılaştırma operatörü (IN, ANY ve ALL) kullanarak bunu başarabiliriz. 3

Sorgu Karşılaştırması 20 nolu bölümdeki çalışanın maaşına kimlerin maaşı eşit? SELECT first_name, last_name WHERE salary = (SELECT salary WHERE department_id = 20); Bu örnek neden çalışmaz? 4

Sorgu Karşılaştırması Çünkü 20 nolu bölümde birden fazla çalışan bulunmaktadır. Bu yüzden alt sorgu çok satır döndürür. Buna çoklu satır alt sorgu deriz. SELECT first_name, last_name WHERE salary = (SELECT salary WHERE department_id = 20); 5

Sorgu Karşılaştırması Sorun dış sorgunun WHERE yan tümcesindeki eşittir (=) işaretidir. Nasıl bir değer, bir seferde birden fazla (a eşit ya da değil) eşit olabilir? Bu saçma bir soru, öyle değil mi? SELECT first_name, last_name WHERE salary = (SELECT salary WHERE department_id = 20); 6

IN, ANY ve ALL Birden fazla değer döndüren alt sorgulara çoklu-satır alt sorgu denir. Tek satır karşılaştırma operatörleri (=, <, ve benzeri) kullanılamaz. Çoklu-satır alt sorgular için farklı karşılaştırma operatörlerine ihtiyaç duyarız. SELECT title, year WHERE year IN (SELECT year ); 7

IN, ANY ve ALL Çoklu satır operatörleri IN, ANY ve ALL ifadeleridir. NOT operatörü bu üç operatörden herhangi biriyle kullanılabilir. SELECT title, year WHERE year IN (SELECT year ); 8

IN IN operatörü dış sorgu WHERE yantümcesi ile birlikte kullanılır. Bu sayede iç sorgudan geri dönen değerlerin içerisinde bulunan hangi kayıtların döneceğini seçer. SELECT title, year WHERE year IN (SELECT year WHERE cd_number < 93); Örneğim CD numarası 93 ten küçük olan yıllarla aynı yıla sahip olan CD lerin başlıkları ile ilgilenelim. 9

IN 93 numaranın altındaki CD'lerin içinde hangi yıllar olduğunu bilmediğimizden, alt sorgu bizim için bu yılların listesini dönecektir. Dış sorgu daha sonra iç sorgudaki yılların listesindeki yıllarla aynı olan yılların başlıklarını döndürecektir. SELECT title, year WHERE year IN (SELECT year WHERE cd_number < 93); 10

ANY ANY operatörü alt sorgu sonuç kümesindeki değerlerden en az birine eşleşen satırların seçilmesi için dış sorgu SELECT yantümcesi kullanılmasıdır. SELECT title, producer WHERE year < ANY (SELECT year WHERE producer = 'The Music Man'); 11

ANY Bu örnekte yılı The Music Man tarafından üretilen CD yılından daha düşük olan CD başlıkları döndürülür. SELECT title, producer WHERE year < ANY (SELECT year WHERE producer = 'The Music Man'); 12

ALL ALL operatörü alt sorgu sonuç kümesindeki değerlerin tümüne eşleşen satırların seçilmesi için dış sorgu SELECT yantümcesi kullanılmasıdır. Bu örnekte yılı The Music Man tarafından üretilen CD yılından daha büyük olan tüm CD başlıkları döndürülür. SELECT title, producer,year WHERE year > ALL (SELECT year WHERE producer = The Music Man ); 13

ALL ALL operatörü iç sorgudan dönen her değer için karşılaştırma yapar. SELECT title, producer,year WHERE year > ALL (SELECT year WHERE producer = The Music Man ); 14

NULL Değerler Çok satırlı alt sorgu tarafından döndürülen değerlerden birinin boş olduğunu varsayalım, ancak diğer değerler değil. Şayet IN veya ANY kullanılırsa, dış sorgu null olmayan değerler ile eşleşen satırları dönecektir. SELECT last_name, employee_id WHERE employee_id IN (SELECT manager_id ); 15

NULL Değerler Şayet ALL kullanılırsa, dış sorgu her hangi bir satır döndürmez. Çünkü ALL, dış sorgu satırları ile alt sorgudan dönen Null içeren her değeri karşılaştırır. Null ile her hangi bir şey karşılaştırma da Null ile sonuçlanır. SELECT last_name, employee_id WHERE employee_id IN (SELECT manager_id ); 16

Alt Sorgularda NULL Değerler Şimdi, iç sorgu tarafından döndürülen değerlerin hiçbiri boş bir değer değildir. Böylece çalışır. SELECT emp.last_name emp WHERE emp.employee_id NOT IN (SELECT mgr.manager_id mgr WHERE mgr.manager_id IS NOT NULL); 17

GROUP BY ve HAVING Şüphe edebileceğiniz üzere, GROUP BY ve HAVING yantümceleri aynı zamanda çoklu satır alt sorgular ile kullanılabilir. Minimum maaşı 10. ve 20. bölümlerde çalışan her hangi bir çalışandan daha az olan bölümleri bulmak istersek ne yaparız? 18

GROUP BY ve HAVING 10 ve 20 nolu bölümlerdeki çalışanların maaşlarını döndüren çok satırlı alt sorguya ihtiyaç duyarız. Dış sorgu MIN grup fonksiyonunu kullanır ve bu yüzden department_id yegöre dış sorguyu GROUP BY yapmalıyız. 19

GROUP BY ve HAVING İhtiyaç duyulan SQL ifadesi: SELECT department_id, MIN(salary) GROUP BY department_id HAVING MIN(salary) <ANY (SELECT salary WHERE department_id IN (10,20)); 20

GROUP BY ve HAVING Hatta GROUP BY yantümcesini alt sorguda kullanabiliriz. Hangi bölümler bölüm numarası 50 den az olan bölümlerin minimum maaşlarından daha büyük minimum maaşa sahiptir? SELECT department_id, MIN(salary) GROUP BY department_id HAVING MIN(salary) >ALL (SELECT MIN(salary) WHERE department_id < 50 GROUP BY department_id); 21

Alt Sorgularla İlgili Son Nokta Bazı alt sorgular satırlardaki veri değerlerine bağlı olarak, tek bir satır veya birden çok satır döndürebilir. Hatta birden fazla satır dönmesi için ufak bir olasılık da olsa, çoklu satır alt sorgu yazdığınıza emin olun. SELECT first_name, last_name, job_id WHERE job_id = (SELECT job_id WHERE last_name = Ernst ); 22

Alt Sorgularla İlgili Son Nokta Örneğin Ernst ile kimler aynı job_id ye sahip? Bu tek satır alt sorgu düzgün bir şekilde çalışır çünkü tabloda tek Ernst vardır. Fakat daha sonra şirket Susan Ernst isimli yeni bir çalışan alırsa ne olur? SELECT first_name, last_name, job_id WHERE job_id = (SELECT job_id WHERE last_name = Ernst ); 23

Alt Sorgularla İlgili Son Nokta Bu çoklu satır alt sorgu yazmak için daha iyi olur. Sorgu tek bir satır döndürse bile çoklu satır sorgu sözdizimi çalışmaya devam edecektir. Şüpheniz varsa, bir çoklu satır alt sorgu yazın! SELECT first_name, last_name, job_id WHERE job_id IN (SELECT job_id WHERE last_name = Ernst ); 24