Blog

Gerçek Hayattan Örneklerle Kapsamlı ve Uygulamalı SQL Sorguları [Part 2]

Bir önceki yazıda bir temel bşlangıç seviyesinden belirli bir düzeye kadar olan sql komutlarını uygulamalı olarak paylaşmıştım. Bu yazı içerisinde kaldığım yerden devam ediyor olacağım. Burada biraz daha önemli ve karmaşık sorguları yazmayı öğreneceğiz. Daha sonra C# Serisi adı altında oluşturduğum yazı serisi kapsamında burada öğrendiğimiz JOIN ifadelerin C# içerisinde kullanılarak veritabanı işlemlerini nasıl yaptığımızı anlatıyor olacağım. Burada kullanmış olduğum database’ bir önceki yazının en üst kısmından ulaşabilirsiniz. Ayrıca Github sayfamdada veritabanını paylaştım. İsterseniz oradan da indirerek kullanabilirsiniz. Tercih sizin..

Joker Karakterler – WildCard

Programlama dillerinin baş belası olarak bilinen düzenli ifadelerde olduğu gibi SQL LIKE ifadesi için kullanılabilicek Joker Karakterler vardır.Örnek kullanımları aşağıda görebilirsiniz. Bu karakterler MS Access ve SQL Server arasında farklılık gösterebilmektedir. MS Access için bu ifadeler * , ? , [ ] , ! , – , # karakterleridir. SQL Server için ise % , _ , [ ] , ^ , – karakterleridir.

MS Access için örnek yazımlar;

ha*   :   ha, hadi, hasan, hangar, … (Sıfır yada daha fazka karakter.)
t?k   :    tek, tık, tik, tak, tok ….   (Sadece bir karakter)
k[aöı]z :  kaz, köz, kız olabilir.  (Yalnızca belirtilen karakterler.)
k[!a]z   : kaz olamaz fakat, köz, kız olabilir.
h[a-d]n   :  han, hbn, hcn, hdn 
2#4    :  204, 214, 215, 216, ….

IN Kullanımı

Syntax:

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

Ülke alanı Germany, France yada UK olanların gösterilmesini sağlar.

BETWEEN Kullanımı

Syntax:

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

Fiyat alanı 10 ile 20 arasında olan tüm ürünlerin gösterilmesini sağlar.

Takma Ad Vermek

Syntax:

SELECT CustomerID AS IDler, CustomerName AS Musteriler
FROM Customers;

JOIN Kullanımı ( Buraya Dikkat 😉 )

C# ile Join Kullanımı yazısını okumak için Tıklayınız !

SQL sorgularında dört farklı JOIN kullanımı vardır. Joinler ilişkisel veri tabanlarında yani ortak bir alanı bulunan veritabanlarında sorgu yapmak için kullanılır. Örnek olarak aşağıdaki 2 farklı tabloyu inceleyebiliriz. JOIN ifadesi kısaca ortak alan barındıran tabloların birleştirilmesini sağlar.

Orders Tablosu:

Customers Tablosu:

Görüldüğü gibi her iki tablodada CustomerID sütunları yer almaktadır.

Örneğin sipariş vermiş olan müşterilerin sipariş idsi, müşteri adı ve sipariş tarihinin gösterilmesini sağlana sorgu şu şekilde olacaktır.

Örnek Kullanım:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

INNER JOIN İFADESİ [ !!! ]

Inner Join İfadesi belirtilen her iki tablodada eşleşen değere sahip olan kayıtları gösterir. Aşağıdaki örnekleri inceleyerek bu yapıyı daha iyi kavrayabilirsiniz.

LEFT JOIN İFADESİ

Left Joın sol tarafa yazılan tablodaki tüm kayıtları ve sağ tarafa yazılan tablodaki sadece eşleşen kayıtları gösterir.

RIGHT JOIN İFADESİ

Right Join ifadesi kullanılarak sağ tarafa yazılan tablodaki tüm kayıtları ve sol tarafa yazılan tablodaki sadece eşleşen kayıtları gösterir.

FULL JOIN

Full Join ifadesi sayesinde sol ve sağ tablolarda herhangi bir eşleşme olduğu zaman tüm kayıtları gösterir.

Gerçek Hayatta Join Nerede Kullanılır ?

E-Ticaret sistemlerinde Join ifadeleri çok sık kullanılmaktadır. Kullanıcı websitesinde filtreleme yaparken bu ifadeleri kullanabilmektedir. Ayrıca e-ticaret sitesinin yöneticileri kampanya düzenlerken belirli şartlar sağlayan müşterileri baz alabilmek için bu Joın ifadelerini kulalnırlar. Örneğin bir e-ticaret sitesine girdiğiniz yeni üyelere / yeni müşterilere özel %10 indirim gibi bir pop-up ile karşılaşıyorsanız muhtemelen sizin bu fırsattan yararlanabilmeniz için müşteri bilgileriniz sorgulanarak daha önce herhangi bir sipariş oluşturup oluşturmadığınız kontrol edilecektir. Eğer daha önce sipariş oluşturmadıysanız yen müşteri olarak bu fırsattan yararlanabileceksiniz demektedir.

Örnek olarak bu senaryoyu aşağıdaki sorgu ve çıktısını inceleyerek daha iyi anlayabilirsiniz.

Hiç Ürün Satın Almamış Müşteriler

Çoklu Inner İfadesi kullanmamızda pekala mümkündür. Çoklu inner join kullanımını aşağıdaki sorgu ve çıktısını inceleyerek daha iyi kavrayabilirsiniz.

Çoklu Inner

GROUP BY Kullanımı

Syntax:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;

Group By ifadesi sayesinde gruplama işlemleri yapılmaktadır. Bu örnekte Country sütundaki verilere göre gruplamalar yapılmıştır.

HAVING Kullanımı

Having İfadesi yalnızca toplam değerlerin belirtilen koşulu sağlaması istendiği durumlarda kullanılmaktadır.

Syntax:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;

Exists Operatörü

Exists operatörü bir alt sorgudaki verinin var olup olmadığını kontrol eder.

Syntax:

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);

ANY ve ALL Operatörleri

Her iki operatörde WHERE yada HAVING ifadeleriyle birlikte kullanılabilir.

ANY Operatörü alt sorgularıdan bir tanesinin sağlanması durumunda TRUE değer döndürmektedir.

ALL Operatörü alt sorguların tamamının sağlanması durumunda True değer döndürmektedir.

Syntax:

SELECT ProductName 
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);

SELECT ProductName 
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);

SELECT INTO İfadesi

Bu ifade bir tablodaki verilerin yeni bir tabloya kopyalanmasını sağlar. Bir tablonun tüm sütunlarının kopyalanabildiği gibi sadece belirtilen sütunların da kopyalanabilmesi mümkündür.

Syntax:

SELECT *
INTO yeniTablo 
FROM eskiTablo
WHERE Koşul İfadesi;

INSERT INTO SELECT İfadesi

Bir tablo içeriğini başka bir tabloya eklemek amacıyla kullanılır. Fakat bu ifadenni kullanılabilmesi için tabloların veri tiplerinin eşleşmesi gerekir. Bu işlem sonucunda hedef tablodaki mevcut veriler ekleme işleminden etkilenmezler.

Syntax:

NSERT INTO tablo2
SELECT * FROM tablo1
WHERE Koşul İfadesi;

CASE İfadesi

Programlama dillerinde yer alan switch-case yapısına benzerdir. Kullanım şekli aşağıdaki gibidir.

Syntax:

CASE
	WHEN ŞART1 THEN SONUÇ1
	WHEN ŞART2 THEN SONUÇ2
	WHEN ŞART3 THEN SONUÇ3
	WHEN ŞART4 THEN SONUÇ4
END;

Örnek Sorgu:

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN 'The quantity is greater than 30'
    WHEN Quantity = 30 THEN 'The quantity is 30'
    ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails; 

SQL Sorgularını Kayıt Ederek Tekrar Tekrar Kullanabiliriz. Peki Nasıl ?

SQL veritabanlarında sorgulamalar yaparken çoğu zaman karmaşık sorgular yazılabilmektedir. Bazende aynı sorgunun sürekli olarak kullanılması gibi durumlarla karşılaşabilmekteyiz. Stored Procedure adı verilen bu işlemde yapılan sorgular bir isim altında kayıt edilir ve daha sonra sadece ismi EXEC komutuyla çağrılarak kayıt edilen sorgu çalıştırılabilir.

Syntax:

CREATE PROCEDURE kayıtİsmi
AS
SORGU
GO;

Örnek Sorgu

REATE PROCEDURE TumMusteriler
AS
SELECT * FROM Customers
Go;

Daha sonra bu sorguyu şu şekilde sürekli olarak çağırabiliriz;

EXEC TumMusteriler;

Sıfırdan ileri seviye sql sorgularına doğru hazırladığım blog yazımı bu noktada sonlandırıyorum. Farklı ihtiyaçlar doğrultusunda çeşitli kombinasyonlarda Sql Sorguları oluşturulabilir. Yazının en başında belirtiğim gibi Join ile tabloları birbirine bağlamayı burada öğrendik. Bu öğrendiklerimizi C# ile veritabanı programlama noktasına taşıyacağız. Bir Araç Kiralama Sistemi geliştirdiğim C# Yazı Serim içerisinde ihtiyaçlarımız doğrultusunda nasıl Joinler yazdığımı paylaşıyor olacağım.

Umarım okuduklarınız sizin için faydalı olmuştur. Bende burada notlar oluştururken ve blog düzenlerken tekrar gözümden kaçırdığım noktaları öğrenmiş ve tekrar etmiş oldum. Bunun için de teşekkür ederim. Sağlıklı ve mutlu günler dilerim…

Eğer bu blogun 1.bölümünü okumadıysanız aşağıdaki linkten önceki yazıya ulaşabilir ve okuyabilirsiniz.

Gerçek Hayattan Örneklerle Kapsamlı ve Uygulamalı SQL Sorguları [Part 1]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir