SQL 'IN' ve 'NOT IN' Operatörleri

SQL dilinde sorgulama yapılırken bir değeri belli değerler arasından herhangi birine eşit olabileceği istendiği durumda değerler OR şartı ile birbirine bağlanır. “WHERE Id = 4 OR Id = 10 OR Id = 37” gibi… Değerlerin az olduğu durumlarda bu şekilde yazılabilir ancak değerlerin sayısının arttığı veya bu değerlerin aşağıdaki örnekte olduğu gibi kodun yazıldığı zamanda belli olmaması durumunda bu şekilde OR şartı ile bağlama hem zahmetli hem performans olarak sorgu optimizasyonunu olumsuz etkilemektedir.

Kolon değerinin bir liste içerisinden herhangi bir değere eşit olması istenen durumda IN operatörü kullanılabilir. Listede herhangi bir değere eşit olması istenilmeyen durumda da NOT IN operatörü kullanılır.

Konumuzu en iyi şekilde basit bir örnek ile açıklayabiliriz.

Örnek Senaryo Tabloları

Yukarıdaki tablo şemasında;

  • Users tablosu, kullanıcı listesini
  • Groups tablosu, gruplar tablosunu
  • UserGroups tablosu, kullanıcıların üye oldukları grupları n – n ilişkisi içerisinde tutar.

Sorumuz şu: Hiç bir gruba üye olmayan kullanıcıların listesini veren SQL scriptini yazınız.

select Id, UserName, FullName
from Users
where Id NOT IN (select UserId from UserGroups)

Bu sorgu çalışırken öncelikle UserGroups tablosundan her hangi bir gruba üye olan kullanıcıların UserId değerlerini alır, daha sonra Users tablosundan Id değeri UserGroups tablosundan alınan UserId değerlerinin içerisinde olmayan kullanıcıları getirir.

select * from UserGroups
where UserId IN (1,3,6,87,45,332)

Bu sorguda da UserId değeri “1,3,6,87,45,332” değerlerinden herhangi birine eşit olan kayıtlar gelecektir.

Şimdi de sorguyu biraz daha karmaşıklaştırarak “YÖNETİCİLER” grubuna üye olan kullanıcılardan başka gruba da üye olanların listesini ve üye oldukları grupların listesini çekeceğiz.

select 
u.Id UserId, 
g1.Id GroupId, 
u.FullName, 
g1.Name 
from UserGroups ug1 join Groups g1 on ug1.GroupId = g1.Id 
join Users u on ug1.UserId = u.Id
where UserId IN (
select UserId from UserGroups ug join Groups g on ug.GroupId = g.Id 
where g.Name = 'YÖNETİCİLER'
) and g1.Name != 'YÖNETİCİLER'




SQL Server Veri Tabanının MySql Üzerine Taşınması

SQL Server piyasa da en sık kullanılan veri tabanlarının başında gelmektedir. Ancak özellikle SQL Server‘ın ücretli olması sebebi ile zamanla kullanıcılar sistemlerini MYSQL gibi ücretsiz bir veri tabanı sistemine geçirmek isteyebiliyorlar. Bu noktada eski verilerin ne olacağı, yeni sisteme nasıl taşınacağı problemi ortaya çıkmaktadır.

Veri taşıma işlemi için ücretli alternatifler olmasının yanında MYSQL‘in kendi içerinde de dahili gelen veri taşıma aracı bulunmaktadır. Aşağıdaki YouTube videomuzda bu işlemin nasıl yapıldığını işlemeye çalışıyoruz.




MySQL Kurulum




Telefon Rehberi

Java ve MySQL Server ile yazılmış basit bir telefon rehberi uygulamasıdır. Projeye GitHub üzerinden aşağıdaki linkten ulaşabilirsiniz.

https://github.com/saitorhan/Telefon-Rehberi