SQL’e İlk Adım

Hatice Ebrar Alıcı
7 min readJul 16, 2021

--

Herkese merhaba, bu yazımda giriş düzeyinde veritabanı mantığının ana dili olarak nitelendirebileceğimiz SQL dilinden bahsedip PostgreSQL üzerinde uygulamalar ele alacağım.

Structured Query Language(SQL) , herhangi bir veri tabanı ortamında verileri yönetmek ve tasarlamak için kullanılan yapısal bir sorgu dilidir. Verilerin belirli kriterlere göre sunulması işlemine sorgu denir. Sorgu işlemi ise SQL ile hızlı bir şekilde yapılabilmektedir. SQL ile veritabanımızda bulunan tablolardaki verileri çekip görüntüleyebilir, yeni tablolar yaratabilir veya var olan tablolar üzerinde çeşitli düzenlemeler yaparak analizler yapılabiliriz.

SQL’ in temel amacı verilerin ve veri kümelerinin yapılacak olan iş doğrultusunda modellenmesidir. Günümüzde, dünya çapında kullanılan birçok veri tabanı SQL ile ilişiklidir. Bu veri tabanlarına:

  • MySql
  • Microsoft SQL Server
  • Oracle
  • PostgreSQL örnek olarak verilebilir

Gerekli tanım ve bilgilerle SQL hakkında genel bir çerçeve çizmiş olduk. Şimdi DVD Rental database ile temel SQL sorgularını uygulamalı olarak ele alacağız.

DVD Rental database, bir DVD kiralama şirketinin 15 tablodan oluşan veritabanıdır. Bu tabloları diyagram olarak ele alırsak:

- actor: Ad ve soyadı dahil olmak üzere aktör verilerini içerir.
- film: Başlık, yayın yılı, uzunluk, derecelendirme vb. gibi film verilerini içerir.
- film_actor: Filmler ve oyuncular arasındaki ilişkileri içerir.
- category: Filmin kategori verilerini içerir.
- film_category: Filmler ve kategoriler arasındaki ilişkileri içerir.
- store: Yönetici personeli ve adres dahil mağaza verilerini içerir.
- inventory: Mağazaların envanter verilerini içerir.
- rental: Kiralama verilerini içerir.
- payment: Müşterilerin ödemelerini içerir.
- staff: Personel verilerini içerir.
- customer: Müşterilerin verilerini içerir.
- adress: Personel ve müşteriler için adres verilerini içerir.
- city: Şehir adlarını içerir.
- country: Ülke adlarını içerir.
- language : Filmin dilini içerir.

İlk olarak bu tablolar üzerinde temel SQL komutlarını ele alacağız. Sonrasında belirlediğimiz amaçlar doğrultusunda yeni tablolar elde edeceğiz.

SELECT : Select ifadesi, bir veritabanından veri seçmek için kullanılır.

select * from film;

Görüldüğü gibi DVD Rental veritabanından film tablosuna erişmiş olduk.

SELECT DISTINCT : Tablonun içerisindeki farklı değerleri döndürmek için kullanılır.

WHERE: Yalnızca belirli bir koşulu karşılayan kayıtları çıkarmak için kullanılır. Yani kayıtları filtrelemek için kullanılır diyebiliriz. Where ile kullanabileceğimiz operatörler:

select * from customer where store_id <> 1;

Görüldüğü gibi where komutu ile customer tablosundan store_id nin 1 e eşit olmadığı gözlemleri getirmiş olduk.

AND, OR ve NOT Operatörleri: AND ve OR operatörleri, kayıtları birden fazla koşula göre filtrelemek için kullanılır.

  • And operatörü ile ayrılan tüm koşullar, doğru ise kayıt görüntülenir.
  • Or operatörü ile ayrılan koşullardan birisi sağlandığında kayıt görüntülenir.
  • Not operatörü girilen koşullar doğru değilse bir kayıt görüntüler.
select * from film where rental_rate < 1 and rental_duration = 3;

Böylece rental_rate < 1 ve rental_duration = 3 olduğu kayıtlara erişmiş olduk.

ORDER BY: Sonuç kümesini artan veya azalan düzende sıralamak için kullanılır. Varsayılan olarak kayıtları artan düzende sıralar. Azalan kayıtları sıralamak için DESC anahtar sözcüğünü kullanabilirsiniz.

select * from actor order by first_name ;

Görüldüğü gibi order by, first_name sütununu alfabetik olarak artan şekilde (yani A dan Z ye doğru) sıraladı. Eğer seçilen sütun sayısal değerlerden oluşsa idi büyükten küçüğe doğru bir sıralama yapacaktı.

AGGREGATE FUNCTIONS:

  • MIN() and MAX(): Min() fonksiyonu seçilen sütunun en küçük değerini döndürür. Max() fonksiyonu ise seçilen sütunun en büyük değerini döndürür.
  • COUNT(): Belirtilen ölçütlerle eşleşen satır sayısını döndürür.
  • AVG(): Sayısal bir sütunun ortalama değerini döndürür.
  • SUM(): Sayısal bir sütunun değerlerinin toplamını döndürür.
select sum(replacement_cost), count(film_id), min(replacement_cost), max(replacement_cost),avg(replacement_cost) from film;

Film tablosunda replacement_cost sütununun toplamının 19.984,minimumunun 9.99, maximumunun 29.99, ortalamasının 19.984 ve film_id sayısının 1000 olduğu bilgisine ulaşmış olduk.

JOIN

SQL’ de verilerin birbiriyle bağlanması (join) sıkça yapılan bir işlemdir. Join mantığını kümeler yardımı ile açıklamaya çalışacağım. SQL de beş farklı join türü vardır. Bunlar:

  • Inner Join
  • Left Join
  • Right Join
  • Full Join
  • Self Join dir.

Inner Join: Birleştirilmek istenen iki tablodaki ortak olan verileri getirir. Yani inner joini kümelerdeki kesişim işlemi gibi düşünebiliriz.

select city.city, country.country from city inner join country on city.country_id = country.country_id ;

Görüldüğü gibi city tablosunun city sütunu ile country tablosun country sütununda ortak olan verileri birleştirdi.

Left Join: Left join ile iki tablo birleştirildiğinde ilk tablo koşulsuz gelirken ikinci tablodan ise sadece ortak olan değerler gelir. Kümelerde sol tarafta olan küme olarak düşünülebilir.

select address.address , staff.first_name from address left join staff on address.address_id = staff.address_id ;

Birleştirme sonunda address tablosunun address sütununu koşulsuz getirirken, staff tablosunun first_name sütununda sadece ortak olan değerler geldi, geri kalanlar NULL olarak basıldı.

Right Join: Left joinin tersi olarak düşünülebilir. Bu sefer ikinci tablodaki değerler koşulsuz bir şekilde getirilirken birinci tablodakilerin ise sadece ortak olan değerleri gelir.

select staff.first_name, address.address from staff right join address on staff.address_id = address.address_id ;

Full Join: Sol (birinci tablo) veya sağ (ikinci) tablo kayıtlarında bir eşleşme olduğunda tüm kayıtları döndürür.

Self Join: Bir tablonun kendisiyle işleme tutulmasına Self Join denir. Tabloda aynı değerleri içeren farklı kayıtlar varsa o tablo için farklı takma isimler kullanılarak join işlemi gerçekleştirilir.

GROUP BY:

Aynı değerlere sahip satırları (her ülkedeki müşteri sayısını bulmak gibi) özet satırlarda gruplandırır. Sonuç kümesini bir veya daha fazla sütunla gruplandırmak için genellikle aggregate function (COUNT(), MAX(), MIN(), SUM(), AVG()) ile kullanılır.

select count(film_id), rental_duration from film group by rental_duration;

Görüldüğü gibi film tablosunda film_id lerinin sayısını rental_duration a göre gruplamış olduk. Örneğin bu tablodan rental_duration u 4 olan 203 film, 6 olan 212 film vardır yorumu çıkarılabilir.

Genel olarak temel SQL komutlarını uygulamalı olarak ele aldık. Şimdi bu komutları kullanarak DVD Rental database üzerinde belirlediğimiz amaçlar doğrultusunda yeni tablolar oluşturalım.

AMAÇ 1: Her film türü için ortalama kirayı azalan şekilde sıralamak.

Kullanılan tablolar film, category ve film_category

Tabloda da görüldüğü gibi her bir film türüne ait ortalama kira miktarlarını elde etmiş olduk.

Amaç 2: Her bir türü kaç farklı kullanıcının kiraladığını azalan şekilde sıralayarak öğrenmek.

Kullanılan tablolar → category, film_category, film, inventory, rental, customer

Tabloya baktığımızda örneğin comedy türünde film kiralayan 495 kullanıcı, action türünde film kiralayan 510 kullanıcı olduğu yorumunu yapabiliriz.

AMAÇ 3: Hangi ülkede ne kadar satış yapıldığını öğrenmek.

Kullanılan tablolar → country, city , address ,customer, payment

Tabloya bakarak, örneğin Brezilya’da toplam 2.919.19 birimlik bir satış yapıldığı yorumunu yapabiliriz.

AMAÇ 4: Ülkelerde kaç şehirde satış yapıldığını bulmak.

Kullanılacak tablolar → country ve city

Tabloya bakıldığında örneğin Türkiye’de 15 şehirde, Japonya’da 31 şehirde satış yapıldığı yorumunu yapabiliriz.

AMAÇ 5: Ülkelerde hangi şehirlerde satış yapıldığını bulmak.

Kullanılacak tablolar → country, city

Yine tabloya baktığımızda örneğin Algeria ülkesinde üç farklı şehirde (Bchar, Batna, Skikda) satış yapıldığı yorumunu yapabiliriz.

Sonuç olarak temel SQL komutları ile amacımız doğrultusunda yeni tablolar elde ettik.

--

--