İç İçe Sorgular Nedir ? #Subquery

İç İçe Sorgular

Merhabalar, bugün ki yazımızda İç İçe Sorgular konusunu ele alacağız. Subquery veya alt sorgular olarak karşımıza çıkmaktadır. İç içe sorguları bulunduğumuz duruma göre kullanımı değişiklik gösterebilir. Aynı işlemi joinlerle yapabiliriz. Hedef tablo çok büyük bir tablo ve bize buradan az bir veri gerekli ise iç içe sorgu kullanmamız daha sağlıklı olacaktır. Örneğimizde Çalışan ve Yönetici adında iki tablo oluşturacağız. Bu tablolar üzerinde örnekler yapacağız.

CREATE TABLE [dbo].[Administrator](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
	[Surname] [nvarchar](50) NULL,
	[Age] [int] NULL,
	[Salary] [money] NULL,
 CONSTRAINT [PK_Administrator] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
))

CREATE TABLE [dbo].[Employee](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
	[Surname] [nvarchar](50) NULL,
	[Age] [int] NULL,
	[Salary] [money] NULL,
	[AdministratorId] [int] NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)) 


ALTER TABLE [dbo].[Employee]  WITH CHECK ADD  CONSTRAINT [FK_Employee_Administrator] FOREIGN KEY([AdministratorId])
REFERENCES [dbo].[Administrator] ([Id])

Tablomuzu oluşturduk. Bir önceki yazımızda ele aldığımız Foreign Key konusunu tablomuzda kullandık. Tabloların vazgeçilmezidir. Her çalışanın bir yöneticisi olmaktadır ve bir yöneticinin birden çok çalışanı olabilir. Bağlantımızı bu şekilde kurguladık.

Subquery 1

Tablolarımızın diyagramı bu şekildedir. Şimdi örnekler üzerinden alt sorgularımıza başlayalım. Tablolarımıza bir miktar kayıt ekleyelim.

INSERT [dbo].[Administrator] ( [Name], [Surname], [Age], [Salary]) VALUES ( N'Ahmet', N'Yurt', 35, 3000.0000)
INSERT [dbo].[Administrator] ( [Name], [Surname], [Age], [Salary]) VALUES ( N'Veli', N'Yağ', 40, 4000.0000)
INSERT [dbo].[Administrator] ( [Name], [Surname], [Age], [Salary]) VALUES ( N'Kemal', N'Kurt', 38, 3500.0000)
INSERT [dbo].[Administrator] ( [Name], [Surname], [Age], [Salary]) VALUES ( N'Ali', N'Kalp', 40, 3850.0000)

INSERT [dbo].[Employee] ( [Name], [Surname], [Age], [Salary], [AdministratorId]) VALUES ( N'Ayşe', N'Barış', 50, 5000.0000, 1)
INSERT [dbo].[Employee] ( [Name], [Surname], [Age], [Salary], [AdministratorId]) VALUES ( N'Fatma', N'Cumhur', 25, 2000.0000, 2)
INSERT [dbo].[Employee] ( [Name], [Surname], [Age], [Salary], [AdministratorId]) VALUES ( N'Ece', N'Su', 28, 2500.0000, 3)
INSERT [dbo].[Employee] ( [Name], [Surname], [Age], [Salary], [AdministratorId]) VALUES ( N'Ecrin', N'Hava', 29, 2000.0000, 4)

Uygulamalar – İç İçe Sorgular

  • Yöneticisinin yaşı kendisinden küçük olan çalışanlar kimlerdir ?
SELECT * FROM [dbo].[Employee] emp WHERE Age > (SELECT Age FROM [dbo].[Administrator] WHERE Id=emp.AdministratorId )

Sorguda görüldüğü gibi ikinci Select işleminde ilgilinin çalışanın yöneticisinin yaş değeri bulunmaktadır.

  • Sütunlar Ad, Soyad, Yaş ve Yönetici Yaşı olacak işlemin sorgusu nedir ?
SELECT emp.[Name],emp.Surname,emp.Age, (SELECT [Name] + ' ' +Surname FROM [dbo].[Administrator] WHERE Id=emp.Administrathttp://www.teknopati.net/wp-admin/post.php?post=1214&action=edit&classic-editor#orId ) AS 'Administrator'  FROM [dbo].[Employee] emp
  • Yöneticilerin ortalama maaşından büyük olan çalışanlar kimlerdir ?
SELECT * FROM [dbo].[Employee] emp WHERE Salary > (SELECT AVG(Salary) FROM [dbo].[Administrator] )

İkinci Select işleminde yöneticilerin ortalama maaşı bulunmuştur. Ortalama işlemi SQL’de AVG komutu ile bulunur. Matematiksel fonksiyonları sonraki yazılarımızda incelicez. Bulunan ortalama maaştan fazla alan kullanıcılar bu şekilde listelenir.

  • Yöneticisinin adı ‘a’ ile başlayan çalışanlar kimlerdir ?
SELECT * FROM [dbo].[Employee] emp WHERE AdministratorId IN (SELECT ID FROM [dbo].[Administrator] WHERE [Name] like 'A%' )

Bir önceki örneğimize çok benzemektedir. Name alanında bi filtreleme yapmamız gerekli. A ile başlayanları bulmamız için LİKE komutunu kullanmamız gerekmektedir. LİKE komutunda % herhangi birşey gelebilir anlamına gelmektedir. ‘A%’ demek A ile başlasın gerisinin ne olduğunun önemi yoktur.

İç İçe Sorgular yazımızın sonuna geldik. Sonraki yazımızda görüşmek üzere.

Referans: https://docs.microsoft.com/en-us/sql/relational-databases/performance/subqueries?view=sql-server-ver15

Kaynak :
E-bültene Abone Ol Merak etmeyin. Spam yapmayacağız.

Yazar

Kocaeli Üniversitesi Bilişim Sistemleri Mühendisliğini bitirip sektörde veri tabanı mühendisi olarak göreve başladım.

İlgili Yazılar

1 Yorum

[…] kullandığımız tablolar bir önceki yazımızda kullandığımız tablolardır. Çalışan ve Yönetici tablolarımız var. Bizden bu 2 tablodaki […]

Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Hızlı yorum için giriş yapın.

Başka Yazı Yok

Kayıt Ol

Zaten üye misiniz? Giriş Yap

Giriş Yap

Henüz üyeliğiniz yok mu? Kayıt Ol