Blog

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

Bu blog içerisinde örnek sorgularımızı daha iyi anlayabilmek ve uygulamalar yaparak görsellik katmak amacıyla çok bilinen Northwind Veritabanı üzerinde çalışmalar yapacağız. Bu veritabanını Github’tan indirerek Visual Studio izerinde indirdiğimiz script ile kurulumunu yaparak kullanabilir ve sorgularımızı burada çalıştırabiliriz. Visual Studio çalışmasına alternatif olarak doğrudan w3school üzerinden aynı veritabanı üzerinde çalışmalar yapabilirsiniz. Bu içerik temelde w3school baz alınarak hazırlanmıştır. Buradaki amacım öğrendiğim bilgileri pekiştirmek ve SQL ile ilgili kaynak arayanlara bir alternarif oluşturmaktır. Aşağıdaki linklerden yararlanarak her iki alternatifide kullanabilirsiniz. Genel olarak her uygulamanın altına w3school üzerinde alıştırma yapabilireceğiniz ilgili sayfanın linkinide eklemeye çalışacağım

Github:https://github.com/microsoft/sql-server-samples/tree/master/samples/databases/northwind-pubs

(Ben instnwnd.sql dosyası ile örneklerimi yaptım.)

W3SCHOOL: https://www.w3schools.com/sql/

Sql veritabanlarına erişim sağlamak ve bu veritabanları üzerinde işlemler yapabilmek için kullanılan standart haline gelmiş yapılandırılmış bir sorgu dilidir. Ayrıca SQL ANSI ve ISO standartı haline gelmiştir.

Sql ile neler yapılabilir?

  • Veri tabanlarında sorgu çalıştırabilir.
  • Veri tabanından bilgi alınabilir.
  • Veri tabanına bilgi eklenebilir.
  • Veri tabanındaki kayıtlar güncellenebilir.
  • Veri tabanındaki kayıtlar silinebilir.
  • Yeni veritabanı oluşturulabilir.
  • Mevcut veritabanına yeni tablolar eklenebilir.
  • Farklı izin alternatifleri oluşturulabilir.

SQL sorgu dili ANSI/ISO standartı olmasına rağmen sql dilinin farklı versiyonları vardır. Fakat ANSI ile uyumu bozmamak adına temel komutlar benzer işleyişleri kapsamaktadır. Örneğin SELECT, UPDATE, INSERT, WHERE, DELETE gibi.

RDBMS Nedir?

RDBMS İlişkisel Veritabanı Yönetim Sistemi olarak ifade edilebilir. RDBMS Ms SQL Server, Oracle, MySQL yada Microsoft Accees gibi veritabanlarının temelidir. Veri RDBMS veritabanlarında tablo olarak adlandırılan nesnelerde depolanmaktadır. Tablolar ise ilişkili verilerin bir bütünü olarak ifade edilebilir Veritabanı tabloları satır ve sütunlardan oluşmaktadır.

Veritabanı Tabloları

Bir veritabanı sıklıkla bir veya birden fazla tabloladan oluşmaktadır. Bu tabloların isimlendirilmesi örneğin Müşteriler (Customer), Siparişler (Orders) şeklinde yapılmaktadır. Örneğin w3school üzerinde paylaşılan bir veritabanı tablosunu aşağıda görebilirsiniz. Doğrudan tabloya ulaşmak ve sorguları çalıştırmak isteyenler için görselin altına link bırakacağım.

(https://www.w3schools.com/sql/sql_syntax.asp)

Buradaki tablonun ismi “Custormers” olarak belirlenmiş. Bu tablo toplamda 5 adet kayıttan oluşmaktadır. Aynı zamanda 7 kolon mevcuttur.Yani bu tablo bize örneğin bir e-ticaret sisteminin veritabanındaki müşteri bilgilerini kayıt ediyor. Tablo içerisinde müşterilere ait bir takım bilgiler yer alıyor, bu bilgiler şunlardır;

  • CustomerID = Müşteri Id
  • CustomerName = Müşterinin Adı
  • ContactName = İletişim Adı
  • Address = Adres
  • City = Şehir
  • PostalCode = Posta Kodu
  • Country = Ülke

NOT: Sql sorgularında kullanılan anahtar sözcükler büyük küçük harf duyarlı değildir. (Not Case Sensitive) Yani “select “ sözcüğü ile “SELECT” sözcüğü arasında hiç bir fark yoktur. Hatta “SeLecT” şeklinde bile yazılabilir. Tabi düzen ve prensipler gereği tüm Sql sözcüklerini büyük harf olarak yazmak en çok kullanılan şeklidir.

En Çok Kullanılan SQL İfadeleri

  • SELECT = Veritabanından veri çekme
  • UPDATE = Veritabanındaki verileri güncelleme
  • DELETE = Veritabanından veri silme
  • INSERT INTO = Veritabanına yeni verilerin eklenmesi
  • CREATE DATABASE = Yeni bir veritabanı oluşturulması
  • ALTER DATABASE = Veritabanında düzenleme yapılması
  • CREATE TABLE = Veritabanında yeni bir tablo oluşturulması
  • ALTER TABLE = Mevcut tablolonun düzenlenmesi
  • DROP TABLE = Bir tablonun silinmesi
  • CREATE INDEX = Yeni bir index oluşturulması (Arama Anahtarı)
  • DROP INDEX = Mevcut bir index’in silinmesi

SELECT Kullanımı

Syntax:

SELECT kolonadı1, kolonadı2, …
FROM tabloAdı;

Bu komut sayesinde tabloAdı tablosundan kolonadı1 ve kolonadı2 isimli sütunlardaki veriler SELECT ifadesiyle çekilmektedir. Burada kolon isimleri (sütunda denilebilir) belirtmeden tüm sütunları çekmek (görmek) istersek SELECT ifadesinden sonra yıldız (*) karakteri eklmemiz gerekir.

SELECT * FROM tabloAdı;

Visual Studio içerisine import ettiğimiz northwind veritabanı için temel bir SELECT sorgusu çalıştıralım ve getirilen verileri görelim.

DISTINCT Kullanımı

DISTINCT ifadesi SELECT sorgusuyla birlikte çalışmaktadır. Eğer bir veri birden fazla sütunda varsa sadece bir tanesinin getirilmesi yani birbirinden farklı olan verilerin gösterilmesini istediğiniz zaman DISTINCT ifadesini kullanırız.

Syntax:

SELECT DISTINCT sütunAdı1, sütunAdı2, …
FROM tabloAdı;

Uygulama Sayfası : (https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_no_distinct)

WHERE Kullanımı

Programlama dillerinde (Python, Java, C# ..) bulunan IF koşulunun SQL Sorgu dilindeki karşılığı ise WHERE ifadesidir. Biz bir sorgu içerisinde şart-koşul belirtmek istiyorsak bu sorgu içerisinde WHERE ifadesi ekleriz ve sonrasında istediğimiz koşulu belirtebiliriz.

Syntax:

SELECT sutun1, sütun2, …
FROM tabloAdı
WHERE koşulİfadesi;

Where İle Kullanabileceğimiz Operatörler

=Eşittir
>Büyüktür
<Küçüktür
>=Büyük Eşit
<= Küçük Eşit
<>Eşit Değil (Bunun yerine != Yada WHERE NOT kullanılabilir.)
BETWEENBelirtilen bir aralığı ifade eder
LIKEBelrli bir pattern’e göre (Benzer anlamında kullanılabilir.)
INBir sütun için birden fazla olası durumu belirtir

NOT: WHERE ifadesi yalnızca SELECT ifadesi ile değil aynı zamanda UPDATE, DELETE gibi ifadelerle birliktede rahatlıkla kullanılabilir. Örneğin Maaşı 5000 TL olan personellerin isimlerini görmek isterseniz aşağıdaki gibi bir sorgu yazılabilir.

SELECT personelAdi FROM Personel WHERE (Maas = 5000);

AND Kullanımı

Syntax:

SELECT sütunAdı1, sütunAdı2, …
FROM tabloAdı
WHERE Koşul-1 AND Koşul-2 AND Koşul-3 … ;

Ayrıca bir sorgu içerisinde birden fazla koşul belirtirken programlama dillerinde olduğu gibi OR ve AND ifadeleri ile koşul ifadelerimizi güçlendirebiliriz.

OR Kullanımı

Örneğin kategori numarası 1 veya 3 olanların gösterilmesi WHERE ifadesine OR ifadesi ile sağlayabiliriz. Aynı zamanda operatör kullanımını da burada görebilirsiniz.

Syntax:

SELECT sütunAdı1, sütunAdı2, …
FROM tabloAdı
WHERE Koşul-1 OR Koşul-2 OR Koşul-3 … ;

NOT Kullanımı

Syntax:

SELECT sütunAdı1, sütunAdı2, …
FROM tabloAdı
WHERE NOT Koşulİfadesi ;

(https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_where_and ) Uygulama yapabilirsiniz..

Koşul ifadelerini farklı kombinasyonlarda kullanabilirsiniz. Örnek olarak aşağıdaki sorgu ve çıktısını inceleyebilir daha sonra aşağıdaki linkten farklı kombinasyonları deneyebilirsiniz.

SELECT * FROM Customers WHERE Country=’Germany’ AND (City=’Leipzig’ OR City=’Brandenburg’) ;

(https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_where_and_or)

ORDER BY Kullanımı

Order By sözcüğü yapılan sorguların sıralı bir şekilde gösterilmesi sağlar. Bu sıralama ölçütü varsayılan olarak ascending yani artan olarak tanımlıdır. (ASC) Sıralama ölçütünü descending yani azalan olarak değiştirmek için DESC anahtar kelimesi kullanılmaktadır.

Syntax:

--Artan Sıralama
SELECT sütunAdı1, sütunAdı2, …
FROM tabloAdı
ORDER BY sütunAdı1, sütunAdı2, …  ASC;
--Azalan Sıralama
SELECT sütunAdı1, sütunAdı2, …
FROM tabloAdı
ORDER BY sütunAdı1, sütunAdı2, …  DESC;

Yukarıdaki görselde görüldüğü gibi ORDER BY ifadesinden sonra iki farklı sütun ismi verildi. Bu sayede kategori id değerleri aynı olan veriler arasında ürün ismine göre bir sıralama yapıldı. Yani ilk belirtilen niteliğe göre sıralama yapıldıktan sonra aynı niteliği taşıyan veriler arasında farklı bir sütun başlığına / niteliğe göre bir sıralama daha yapıldı. Bu sayede verimizin okunabilirliği daha da artmış oldu.

INSERT INTO Kullanımı

Insert Into ifadesi veritabanında mevcut bulunan bir tabloya yeni bir satır veri eklenmesini sağlar.

Syntax:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Hasan','Güncelİrtibat','Merkez','Bursa','16100','Türkiye');

Bu komut ile müşteriler tablosuna kendi bilgilerimle yeni bir veri satırı eklemiş olduk.

NULL Operatörü

NULL operatörünü kullanarak tablo içerisindeki herhangibir alanın boş olup olmadığını kontrol edebiliriz.

Syntax:

SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;

Bu sorgu ile müşteriler tablosundan adres alanı boş olan müşterilerin ismini, iletişim ismini ve adreslerini görebiliriz. Tablodaki bir alanın boş olmadığının kontrolünü yapabilir ve bunu kullanarak WHERE şartları oluşturabiliriz. Bunun için WHERE TabloAlanı IS NOT NULL; ifadesini kullanmamız yeterli olacaktır.

UPDATE Kullanımı

Syntax:

PDATE tabloAdı
SET sütunAdı1 = Deger1, sütunAd2 = Deger2, …
WHERE Koşulİfadesi;

DELETE Kullanımı

Syntax:

DELETE FROM tabloAdı WHERE Koşulİfadesi;

ÖNEMLİ NOT

Update, Insert Into, Delete gibi ifadelerin kullanılması esnasında çok dikkatli olunması gerekir. Update ifadesi kullanılırken buradaki WHERE koşulu gözden kaçırılır ve yazılması unutulursa tablodaki tüm kayıtlar değiştirilecektir. Bu gerçek hayatta büyük sorunlara yol açabilir.

TOP – LIMIT – ROWNUM Kullanımı

Bu ifadeler döndürülecek kayıt sayısını belirtirken kullanılır. Büyük veritabanlarıyla çalışırken büyük kolaylıklar sağlamaktadırlar. Örneğin ilk 20 kayıt gösterilsin derseniz bunu top yada limit yada rownum ifadesiyle belirtmelisiniz. Bu ifadelerin hepsi aynı amaç için kullanılmaktadır. Tek farkı hepsi farklı veritabanı sistemleri için geçerlidir.

Top ifadesi SQL Server ve MS Access için,

LIMIT ifadesi MySQL için,

ROWNUM ifadesi ise Oracle veritabanı sistemleri için kullanılmaktadr.

SQL Server ve MS Access:

SELECT TOP sayı | percent sütunAdı(s)
FROM tabloAdı
WHERE Koşul ifadesi

MySQL

SELECT sütunAdı(s)
From tabloAdı
WHERE Koşul ifadesi
LIMIT sayı

MIN() ve MAX() Fonksiyonları

  • min() fonksiyonu seçilen sütundaki en küçük değeri gösterir.
  • Max() fonksiyonu seçilen sütundaki en büyük değeri gösterir.
– En küçük değer
SELECT MIN(sütunAdı)
FROM tabloAdı
WHERE Koşulİfadesi;

--En büyük değer
SELECT MAX(sütunAdı)
FROM tabloAdı
WHERE Koşulİfadesi;

COUNT() , AVG() ve SUM() Fonksiyonları

Count() fonksiyonu verilen şart ifadesiyle eşleşen satırların sayısını göstermektedir. AVG() fonksiyonu ortalama hesabı yapar ve SUM() fonksiyonu ise belirtilen şarta göre alanların toplamının değerini gösterir.

Syntax:

SELECT COUNT(sütunAdı)
FROM tabloAdı
WHERE Koşulİfadesi;

SELECT AVG(sütunAdı)
FROM tabloAdı
WHERE Koşulİfadesi;

SELECT SUM(sütunAdı)
FROM tabloAdı
WHERE Koşulİfadesi;

Group By İle Kullanım
Group By İle Kullanım

LIKE Operatörü

Where ifadesi ile birlikte kullanılarak belrli bir desen belirlenmesi ve bunun koşul olarak sağlanması durumunda verileri gösterir. Yani veriler arasında belirli bir pattern eşleşmesini arar. LIKE operatörü genellikle 2 farklı eleman ile kullanılmaktadır. Bunlar % (Yüzde karakteri) ve _ (alt çizgi) karakterleridir.

% (Yüzde İşareti)Sıfır, bir yada daha fazla karakteri temsil eder
_ (Alt Çizgi)Tek bir karakteri temsiz eder

Syntax:

SELECT sütunAd1, sütunAd2, …
FROM tabloAdı
WHERE SütunAdN LIKE desen;

Örnek Kullanım ve Açıklamaları

  • WHERE PersonelName LIKE ‘a%’ : a harfi ile başlayan…
  • WHERE PersonelName LIKE ‘%a’ : a harfi ile biten….
  • WHERE PersonelName LIKE ‘%or%’ : İçerisinde or kelimesi geçen….
  • WHERE PersonelName LIKE ‘_r%’ : İkinci harfi r olan….
  • WHERE PersonelName LIKE ‘a_%’ : a harfi ile başlayan ve en az 2 harfli olan….
  • WHERE PersonelName LIKE ‘a__%’ : a harfi ile başlayan ve en az 3 harfli olan…
  • WHERE PersonelName LIKE ‘h%n’ : h harfi ile başlayan ve n harfi ile biten….

Bir blog içerisinde konuyu fazla uzatmamak için daha ileri seviye Sql Sorgularını Gerçek Hayattan Örneklerle Kapsamlı ve Uygulamalı Sql Sorguları – 2 başlığı altında paylaşacağım. Yazının devamını okuyabilirsiniz.

Teşekkür ederim.

Bir yanıt yazın

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