MS Sql Server İle Sub Query

Merhabalar arkadaşlar bu yazımızda sizlerle birlikte subQuery çalışacağız umarım faydalı olur.


Sub query’nin temel mantığı alt sorgudur kısacası sorgu içinde sorgu da diyebiliriz öncelikle tabloları oluşturabilmeniz için sizlere kodları vereyim.


Create database burakaksan
--Daha sonra da bu veri tabanını use komutu ile kullanıma geçirelim
use burakaksan
--Evet şimdi tablolar oluşturalım kayıtlar ekleyelim ve düzeltme işlemleri yapalım
Create table Ogretmenler(
	OgretmenID int PRIMARY KEY identity(1,1),
	OgretmenAdiSoyadi nvarchar(50),
	OgretmenYasi int)
Create table Dersler(
	DersID int Primary Key identity(1,1),
	DersAdi nvarchar(50),
	DersSaati tinyint
	)
Create table Ogrenciler(
	OgrenciID int Primary Key identity(1,1),
	OgrenciAdiSoyadi nvarchar(50),
	OgrenciYasi tinyint
	)
	Create table OgrenciDersIliskisi(
		OgrenciID int,
		DersID int)
Create table OgretmenDersIliskisi(
		OgretmenID int,
		DersID int)
-- Tablolarımızı oluşturduk klasik bir öğretmen öğrenci ders ilişkileri problemleriyle uğraşacağız. Öncelikle birkaç öğretmen ve öğrenci ekleyelim.
--İlk olarak öğretmenleri ekleyelim
Insert into Ogretmenler values ('Veli Diken',35)
Insert into Ogretmenler values ('Abdullah Artı',40)
Insert into Ogretmenler values ('Mehmet Zaim',33)
Insert into Ogretmenler values ('Hasan Kitap',29)
--Daha sonra dersler ekleyelim.
Insert into dersler values('Matematik',4)
Insert into dersler values('Fizik',2)
Insert into dersler values('Edebiyat',6)
Insert into dersler values('Tarih',5)
--Şimdi de birkaç öğrenci ekleyelim
Insert into Ogrenciler values('Muhammed Burak Aksan',24)
Insert into Ogrenciler values('Hikmet İskifoğlu',25)
Insert into Ogrenciler values('Erdinç Yaşan',22)
Insert into Ogrenciler values('Kahraman Koçovalı',20)
--Şimdi de hangi dersi hangi öğretmen veriyor onları belirleyelim.
Insert into OgretmenDersIliskisi Values (1,2)
Insert into OgretmenDersIliskisi Values (1,4)
Insert into OgretmenDersIliskisi Values (2,3)
Insert into OgretmenDersIliskisi Values (2,2)
Insert into OgretmenDersIliskisi Values (3,4)
Insert into OgretmenDersIliskisi Values (4,1)
--Şimdi Hangi Öğrenci Hangi dersleri alıyor onları ekleyelim.
Insert into OgrenciDersIliskisi Values(1,1)
Insert into OgrenciDersIliskisi Values(1,2)
Insert into OgrenciDersIliskisi Values(1,3)
Insert into OgrenciDersIliskisi Values(1,4)
Insert into OgrenciDersIliskisi Values(2,1)
Insert into OgrenciDersIliskisi Values(2,3)
Insert into OgrenciDersIliskisi Values(3,4)
Insert into OgrenciDersIliskisi Values(3,3)
Insert into OgrenciDersIliskisi Values(3,1)
Insert into OgrenciDersIliskisi Values(4,1)

Yukarıdaki kod satırlarını msSql Server Management studio kullanarak new query kısmından çalıştırdığınızda veri tabanımız tablolarımızla birlikte oluşturulmuş olacaktır. Şimdi kendi kafamızdan Soru oluşturup çözümlerine bakalım

 

1-)Ogrenci ID’Si 1 olan öğrencinin aldığı derslerin adını getiren Sorgu nedir?

Select DersAdi from Dersler where DersID in (select DersID from OgrenciDersIliskisi where OgrenciID=1)

Bizden istenen dersin adı olduğundan dolayı selectten sonraki kısma dersAdi Yazıyoruz sonrasında ise dersAdına erişebildiğimiz dersler tablosundan verileri çekmemiz gerektiğini söylüyoruz.

Where koşulumuzda ise in etiketini kullanarak bir dizi girebiliyoruz girdiğimiz dizinin verilerini de OgrenciDers İlişkileri tablomuzdan Ogrenci ID si 1 olan öğrencinin aldığı dersID lerini çekebiliyoruz.

Not : where koşulunda istenen koşul DersID ise in koşulunun içinde yazılan kodlar bize DersID döndürmelidir yoksa bazı ufak tefek hatalarla karşılşabilirsiniz.

2-) Matematik Dersini Alan Öğrencilerin İsimleri ve Soyisimleri

Select OgrenciAdiSoyadi from Ogrenciler where OgrenciID in (select OgrenciID from OgrenciDersIliskisi where DersID in (select DersID from Dersler where DersAdi='Matematik'))

Şimdi burada asıl istenen bilgi öğrencinin adı soyadı fakat bize verilen bilgi ‘Matematik’ yani dersin adı. Dersin ID’sini bilmediğimizden dolayı Öğrenci Ders ilişkilerinin bulunduğu OgrenciDersIliskileri tablosuyla bir sonuç elde edemeyeceğiz bu yüzden öncelikle Matematik adına sahip dersin DersID’sini bulmamız gerekiyor. En uç kısımda bu işlemi yaptıktan sonra OgrenciDersIlıskileri tablosundan bu dersi alan OgrenciID’lerini çekebiliyoruz. Son olarak da öğrenci idlerini çektiğimiz için öğrenciler tablosu içerisinden öğrenci ID’leri ile öğrencilerin Adlarını ve soyadlarını çekebiliyoruz.

3-) Muhammed Burak Aksan adlı öğrencinin aldığı dersleri veren Öğretmenlerin isimleri

Select OgretmenAdiSoyadi from Ogretmenler where OgretmenID in(Select OgretmenID from OgretmenDersIliskisi where DersID in (select DersID from OgrenciDersIliskisi where OgrenciID in (select OgrenciID from Ogrenciler Where OgrenciAdiSoyadi='Muhammed Burak Aksan')))

Bir üstteki soruda Dersin adı verilip Öğrencilerin adı istenmişti aradaki tablo sayımız 1 idi. Burada ise öğrencinin adı verilmiş bu öğrencinin aldığı dersleri bulup bu dersleri veren öğretmenleri bulmamız gerekiyor.  Öğretmen adı ve soy adını öncelikle Ogretmenler tablosundan OgretmenID göre çekiyoruz. yukarıda da belirtiğimiz gibi bu dersi veren öğretmenleri göstermek istiyoruz. o yüzden bu dersi veren öğretmenlerin ID sini çevirmeliyiz öğretmenler tablosunda Dersler olmadığı için Dersleri OgretmenDersIliskisi tablosundan çekiyoruz. Bu ders Idlerini de son koşulumuz olan Muhammed Burak Aksan’ın aldığı dersleri İdler olarak çevirmemiz gerekiyor burada da Dersler Tablomuz da Öğrenci isimleri olmadığından Öğrenci ismimizi Ögrenciler tablosundan çekiyoruz.

Kimler Neler Demiş?

avatar
  Subscribe  
Bildir