Yeni Başlayanlar İçin SQL ve SQL Sorgularına Giriş

Fatih Küçükkarakurt

Fatih Küçükkarakurt

11 min read

SQL yolculuğuna hazır mısınız? Sizin için SQL hakkında bir kılavuz hazırladım. SQL eğitimi konusunda adım adım ilerleyeceğimiz bir kılavuz olacak.

Daha önceki makalelerimi okuduysanız, konuları projeler ve örnekler üzerinden anlatmanın daha akılda kalıcı olduğunu düşündüğümü biliyorsunuzdur. Bunun için, SQL eğitimine başlarken yine bir örnekten yararlanmak istiyorum.

Bahçenize gömülü olan bir defineyi çıkarmak için kürek kullanırsınız. Eğer SQL eğitiminde bahsedeceğimiz veri ve veri yapılarını, bu örnekteki define olarak düşünürsek, kazmak için kullandığınız kürek, SQL olurdu.

Bu basit ama akılda kalıcı bir örnek. Konuya bu şekilde bakarsak, SQL konusunu daha kolay anlayabileceğimizi düşünüyorum. Peki, SQL tam olarak nedir? Sözlüğe bağlı kalmamız gerekirse, SQL, Yapılandırılmış Sorgu Dili (Structured Query Language) anlamına geliyor. SQL, veritabanlarındaki yapılandırılmış verilerle etkileşimde bulunmak için kullanılan ve her yerde bulunan bir dildir. Çoğu veri uygulayıcısı (veri mühendisleri, veri analistleri, iş analistleri ve veri bilimcileri), günlük işlerinde, veri tabanlarıyla ölçeklenebilir ve verimli bir şekilde iletişim kurabilmek için SQL kullanırlar.

Neden SQL Kullanmalısınız

SQL, verileri veritabanı sistemlerinde depolamak için vazgeçilmez olduğunu kanıtlamıştır. Facebook, Amazon ve Google gibi teknoloji devi şirketler, SQL ile çalışıyor. Ayrıca SQL, StackOverflow'un 2020 geliştirici anketinde en çok kullanılan üçüncü teknoloji olarak karşımıza çıktı. İş başvurularında çoğunlukla SQL'in bir gereklilik olduğunu görürsünüz. SQL'in en önemli gereksinimlerden biri olması hevesli veri bilimcileri için sürpriz olmamalı. Bunlara ek olarak SQL, verilerle çalışırken kullanılan basit programlama dillerinden biridir. Bu yüzden, veri analistliği, veri bilimi gibi alanlarda kariyer hedefleyenler için SQL, öğrenilmesi gereken önemli dillerden biridir.

SQL Çeşitleri

SQL ismini daha önce, PostgreSQL, MySQL, Oracle & SQL Server isimleriyle beraber duymuş olabilirsiniz. Bunlar SQL'in farklı versiyonlarıdır. Söz dizimlerinde küçük farklılıklara sahiptirler fakat büyük ölçüde benzerdirler. SQL çeşitlerinde yer alan bu farklılıklar, günlük konuşma dilimizdeki lehçelere benzerler. Bunu Türkçe bilen birisinin, Orta Asya'daki bir Türk lehçesini anlayabilmesine benzetebilirsiniz.

Bu SQL eğitiminde, örnek olması açısından MySQL kullanacağım. Ama merak etmeyin, MySQL'de ustalaştıktan sonra yeni bir SQL çeşidi öğrenmek, oldukça kolay olacaktır. Öncelikle SQL'i yerel sistemimize kuracağız ve ardından, Netflix veri kümesini kullanarak bazı işlemler yapacağız.

MySQL'i kurarak başlayalım.

Mac için MySQL Nasıl Kurulur?

  1. Öncelikle MySQL indirme sayfasına gidin.
  2. Mac için, işletim sistemini 'macOS' seçin. Ardından 'DMG Archive' indirme seçeneğini seçin. Bir sonraki ekranda, indirmeyi başlatmak için 'No thanks, just start my download' seçeneğine tıklayabilirsiniz.
Mac için SQL Kurulumu
  1. İndirme işlemi tamamlandığında, indirilen dosyayı açın ve kuruluma devam edin. Aşağıdaki ekranı görmelisiniz.
Mac için SQL Yükleme Ekranı
  1. Yapılandırma sayfasında,Use Strong Password Encryption kullanın. MySQL sunucusuna erişmek için gerekli olacak bir şifre oluşturmanız istenecektir.
  2. Kuruluma devam edin.
  3. Gerekli kurulumlar yapıldıktan sonra MySQL Workbench'i indirin. Ben bu makalede MySQL Workbench 8.0.20 versiyonunu kullanıyorum. MySQL Workbench, MySQL ile çalışmak için bir grafik kullanıcı arayüzüdür. Bu indirme sayfasında, işletim sistemi olarak 'macOS'u seçin ve indirmeye başlayarak gerekli kurulumu yapın.
  4. Kurulumu tamamladığınızda, uygulamalarınızda arasında bulunması gereken MySQLWorkbench'i açın.

Windows için MySQL Nasıl Kurulur?

  1. Öncelikle MySQL indirme sayfasına gidin.
Windows için MySQL Nasıl Kurulur?
  1. İşletim sistemini Microsoft Windows olarak seçin. Ardından MySQL Installer MSI indirme seçeneğini seçin . Bir sonraki ekranda, No thanks, just start my downloadseçeneğine tıklamanız, indirmek için yeterlidir.
  2. İndirme işlemi tamamlandığında, indirilen dosyayı açın ve kuruluma devam edin.
  3. Select Product and Features sekmesine gelin. Available Products sütununda yer alan bazı ögeleri, Products/Features to be Installed sütununa taşıyın. a. MySQLServer 8.0.22 b. MySQL Workbench 8.0.22 c. MySQL Shell 8.0.22
Windows için MySQL Kurulum Ekranı
  1. Bu işlemlerden sonra kuruluma devam edin.
  2. Authentication Method sayfasında, use Strong Password Encryption for Authentication öğesini seçin. Ardından, Accounts and Roles sekmesinde, parolayı MySQL Root Parolası'na girin. Bu şifre daha sonra veri tabanınıza erişmek için kullanılacaktır.
Windows için MySQL Kurulum Ekranı 2
  1. Varsayılan ayarlarla kuruluma devam edin. Son sayfada, eğitimin geri kalan bölümleri için MySQL Workbench'i kullanacağımızdan, Start MySQL Workbench after setup'ı işaretlediğinizden emin olun.
Windows için MySQL Kurulum Sonu Ekranı

Tebrikler artık cihazınızda gerekli olan her şey hazır.

MySQL Workbench'in ana ekranında yer alan Local Instance 3306ya tıklayın. Daha önce oluşturduğunuz parola istenecektir. Bu parolayı girdikten sonra, MySQL Workbench ile karşılaşmış olmanız gerekir.

MySQL Workbench Ana Ekranı

MySQL ile Şema oluşturmak

Artık MySQL Workbench'in ana ekranındayız, SQL'deki ilk sorgumuz için hazırız. Bunun için öncelikle, new_schema adında bir şema oluşturalım. Basitçe ifade etmek gerekirse, SQL'deki bir şema bir tablolar koleksiyonudur. Şemaları klasörler olarak ve tabloları bu klasörler içindeki elektronik tablo dosyaları olarak düşünebilirsiniz.

Bunu yapmak için aşağıdaki sorguyu çalıştırabiliriz:

CREATE SCHEMA new_schema;

SQL'de the; isteğe bağlı olarak bir SQL komut dosyasının sonunu temsil etmek için kullanılır. Ardından, Query > Execute (All or Selection (Tümü ve Seçim)) seçeneğine giderek sorguyu çalıştırın. Mac kullanıcıları için kısayol Command + Enter'dır. Şemanın görünmesi için, şema paneline sağ tıklayın ve "Refresh" e basın.

MySQL Şema Oluşturma
MySQL Şema Oluşturma Refresh

Verileri MySQL'e yükleme

Artık bir şema oluşturduğumuza göre, şema içinde bir tablo oluşturmaya hazırız. Bu örnekte, Netflix başlıklarıyla ilgili verileri içeren bir CSV dosyası üzerinde çalışacağız. Dosyayı bu bağlantıdan indirdikten sonra , aşağıdaki talimatları kullanarak MySQL Workbench Table Import Wizard'ı kullanabilirsiniz.

  1. new_schema'ya sağ tıklayın ve Table Data Import Wizard'ı seçin.
MySQL Table Data Import Wizard
  1. Select File to Import'a gelin ve indirdiğiniz netflix_titles.csv dosyasını bulun.
  2. Sonraki adımda Create new table'ı seçin. Burada new_schema'ı seçin ve tabloyu netflix_titles olarak adlandırın. drop table if it exist seçeneğini işaretleyin.
MySQL Table Data Import Drop Table If It Exist
  1. Configure import settings sayfasında, Field Type'ın verilere göre sizin için otomatik olarak yapılandırıldığını unutmayın.
  2. Buradan, verilerin tamamen içe aktarıldığına dair bir onay görene kadar next'i tıklayın.
MySQL Table Data Import Data

MySQL Kullanarak Soruları Cevaplama

Artık hazırlık çalışmasını bitirdiğimize göre, MySQL kullanarak Hello World demeye hazırız. Bu örnek için, Kaggle'ın bu veri kümesini kullanarak Netflix'teki filmler ve TV programları hakkında bazı işlemler yapmak için SQL kullanacağız.

Bahsettiğimiz bu veri kümesi aşağıdaki tabloyu içeriyor.

ColumnDescription
Show_IDHer Film/TV programı için benzersiz bir kimlik
TypeBaşlığın bir film mi yoksa bir TV programı mı olduğunu belirtir
TitleFilmin/TV programının başlığı
DirectorBaşlığın Yönetmeni
CastBaşlığın oyuncularının listesi
CountryBaşlığın üretildiği ülke
Date AddedEkleme Tarihi
Release YearÇıkış Tarihi
RatingDeğerlendirme
DurationSüresi

Artık tablonun doğru bir şekilde içe aktarılıp aktarılmadığını kontrol etmek için tüm tabloyu sorgulayabiliriz.

Bunun için aşağıdaki sorguyu çalıştırmamız yeterlidir.

SELECT * FROM new_schema.netflix_titles;

Bu sorgu, new_schema adlı şemada bulunan netflix_titles adlı tablodan tüm sütunları seçmek anlamına gelir.

Ayrıca burada bilmeniz gereken bazı noktalar var:

  • SELECT, hangi sütunların seçileceğini belirtmek için kullanılan bir anahtar sözcüktür.
  • *, tüm sütunların seçildiğini belirtmek için kullanılır.
  • FROM, veri kaynağını belirtmek için kullanılan bir anahtar sözcüktür.
  • ., new_schema ve netflix_titles arasındaki ilişkiyi belirtmek için kullanılır. Burada new_schema.netflix_titles gibi bir kullanım, netflix_title'ın new_schema'da var olduğu anlamını taşır.
  • ;, isteğe bağlı olarak bir sorgu komut dosyasını sonlandırmak için kullanılır.
MySQL Table Data Import Data SELECT FROM

Artık aşağıdaki gibi soruları cevaplayabiliriz:

  • 2018 yılında hangi Netflix başlıkları yayınlandı?
  • Netflix'teki en eski başlık nedir?
  • Netflix'te bir dizinin (filmlerin değil) ortalama sezon sayısı nedir?
  • Her bir yönetmenin Netflix'teki toplam gösterim süresi ne kadardır?
  • Netflix başlıklarının yayınlanma yılı dağılımı nasıldır?

Hazırsanız başlayalım!

  1. 2018 yılında hangi Netflix başlıkları yayınlandı? Bu soruyu cevaplamak için aşağıdaki sorguyu çalıştırabiliriz.
SELECT * FROM new_schema.netflix_titles
WHERE release_year = 2018;

Bu sorgu, new_schema adlı şemada bulunan netflix_titles adlı tablodan tüm sütunları seçmek anlamına gelir. Ancak, yalnızca release_year'ın 2018 olduğu veri satırlarını seçiyoruz.

Burada, WHERE'in yalnızca kriterleri karşılayan belirli satırları içermek ve uymayanları hariç tutmak için kullanılan bir anahtar kelime olduğuna dikkat edin.

Eşittir operatörü (=) yerine, büyüktür (>), küçüktür (<), en az (>=), en çok (<=) ve eşit değildir (<>) gibi diğer operatörleri de kullanabilirsiniz. Örneğin, 2018'den sonra çıkan netflix başlıklarını bulmak istiyorsak,

SELECT * FROM new_schema.netflix_titles
WHERE release_year > 2018;

Diğer bir örnek olarak, yalnızca 2018'den önce veya 2018'de yayınlanan Netflix içeriklerini seçmek için aşağıdaki gibi bir sorgu çalıştırabilirsiniz,

SELECT * FROM new_schema.netflix_titles
WHERE release_year <= 2018;

2018 dışında herhangi bir yılda yayınlanan Netflix içeriklerini seçmek isterseniz, sorgunuz şöyle olmalıdır,

SELECT * FROM new_schema.netflix_titles
WHERE release_year <> 2018;

Peki, 2018 ile 2019 arasında yayınlanan Netflix başlıklarını bulmak isterseniz ne yapmanız gerekir? İşte burada BETWEEN ve AND operatörlerini kullanabiliriz.

SELECT * FROM new_schema.netflix_titles
WHERE release_year BETWEEN 2018 AND 2019;

Peki ya sadece 2016, 2017 ve 2019'da yayınlanan başlıkları öğrenmek istersek ne yapmamız gerekir? Bunu yapmak için IN adında yeni bir operatöre ihtiyacımız var. Öğeleri çevrelemek için süslü parantezler () ve IN anahtar sözcüğünden sonraki öğeleri ayırmak için virgül , kullandığımıza dikkat edin.

SELECT * FROM new_schema.netflix_titles
WHERE release_year IN (2016, 2017, 2019);

Şimdi de, Netflix'teki en eski başlığı bulmaya çalışalım. Bunu yapmak için, satırları yayınlanma yılının azalan sırasına göre düzenlememiz gerekecek.

  1. Netflix'teki en eski başlık nedir? Buna aşağıdaki sorguyu kullanarak cevap verebiliriz.
SELECT title, release_year
FROM new_schema.netflix_titles
ORDER  BY release_year **ASC**;

Bu sorguyu çalıştırırsanız, 'Pioneers: First Women Filmmakers' filminin 1925'te gösterime girdiğini görmelisiniz.

Yukarıdaki sorgu, tüm başlıkları, ilgili release_year'ı bulmak ve sonuçları release_year'ın artan sırasına göre düzenlemek için çalışır.

Bu sorguda ORDER BY anahtar sözcüğünün sonuçları sıraladığını unutmayın. Sonuçları artan sırada sıralamak için, sıralanacak sütunun adının ardından ASC anahtar kelimesini kullanırız. Azalan sıralama için DES anahtar sözcüğü kullanılır.

Örneğin, bu veri kümesinde bulunan Netflix'teki en son içeriği hızlı bir şekilde bulmak için aşağıdaki sözdizimini kullanabiliriz:

SELECT title, release_year
FROM new_schema.netflix_titles
ORDER  BY release_year **DESC**;

Artık yalnızca belirli satırları seçip, nasıl sıralayacağımızı öğrendiğimize göre, yalnızca seçilen satırlardan özet verileri bulmaya devam edelim.

  1. Netflix'te bir dizinin (filmlerin değil) ortalama sezon sayısı nedir? İşte bunu cevaplayacak sorgu şudur:
SELECT  AVG(duration) AS ‘average_show_duration’
FROM new_schema.netflix_titles
WHERE  type = 'TV Show';

Bu sorgu, TV Şovu türündeki tüm netflix_title'larının ortalama süresini bulmak ve sonuç sütununu average_show_duration olarak yeniden adlandırmak için döndürülür. Cevap 1.78 sezon olacaktır.

Burada dikkat edilmesi hususlar ise şunlardır:

  • AVG(), TV şovlarının ortalama süresini bulmak için kullanılan bir anahtar kelimedir.
  • TV Şovu dizesini açıp kapatmak için tek tırnak işareti () kullanılır.
  • AS, ortaya çıkan sütunu yeniden adlandırmak için kullanılan bir anahtar sözcüktür.

AVG(), seçilen satırların özet değerlerini bulmak için kullanılabilecek birçok toplama işlevinden yalnızca biridir. Kullanışlı toplama işlevlerinin diğer örnekleri ise şunlardır:

  • SUM(col_name), (col_name) içindeki tüm değerlerin toplamını bulmak için kullanılır.
  • MIN(col_name), (col_name) içindeki tüm değerlerin minimum değerini bulmak için kullanılır.
  • MAX(col_name), (col_name) içindeki tüm değerlerin maksimum değerini bulmak için kullanılır.
  • COUNT(col_name), (col_name)'deki satır sayısını bulmak için kullanılır.

Artık toplama işlevlerini öğrendiğimize göre, bir sonraki soruyu yanıtlamak için bunları uygulayabiliriz.

  1. Her bir yönetmenin Netflix'teki toplam gösterim süresi ne kadardır?
SELECT
director,
SUM(duration) AS total_screen_time_length
FROM new_schema.netflix_titles
WHERE type = 'Movie'
GROUP BY director;

Burada GROUP BY, aynı değerlere sahip satırları gruplamak için kullanılan bir anahtar sözcüktür. Tüm satırları aynı yönetmenle gruplandırır ve sürenin toplamını hesaplar.

Sıradaki SQL sorgusunu siz yapmaya çalışın. En uzun gösterim süresine sahip yönetmeni bulmak için sorguyu nasıl değiştiririz? Yardım almak için ikinci soruya bakabilirsiniz.

Bu veri setinde en uzun ekran süresine sahip yönetmen, Wolf of Wall Street'in ünlü yönetmeni Martin Scorsese'dir.

Eğer bunu oluşturduğunuz SQL sorgusu ile cevaplayabildiyseniz, sizi tebrik ediyorum.

Neredeyse tamamız. Bugün öğrendiğimiz tüm kavramları özetleyen bir soruyla makalemizi tamamlayabiliriz.

  1. Netflix başlıklarının yayınlanma yılının dağılımı nasıldır? Bu soru, Netflix'teki başlıkların yaşını anlamayı amaçlamaktadır ve verilerimizi bir araya getirip sıralamamızı gerektirmektedir. Bunu cevaplamak için aşağıdaki sorguyu kullanabilirsiniz.
SELECT
release_year,
COUNT(show_id) number_of_titles AS ‘number_of_titles’
FROM new_schema.netflix_titles
GROUP BY release_year
ORDER BY release_year ASC;

Yukarıdaki sorgu, her yıl yayınlanan (her biri bir başlığa karşılık gelen) show_id sayısını saymak için döndürülür ve sonuçları, yayınlanma yılının artan sırasına göre oluşturur. Bu sonuç ile çoğu Netflix başlığının 2017 ve 2018 yıllarında yayınlandığını göreceksiniz.

Özetleyelim

Özetlemek gerekirse, bu SQL sorgu ve SQL'e giriş makalesinde aşağıdaki soruların cevaplarını öğrenmiş olduk:

  • SQL, Mac ve Windows'a nasıl yüklenir?
  • SQL'de SELECT * FROM column nasıl kullanılır?
  • SQL'de WHERE anahtar sözcüğünü kullanarak bir kriteri karşılayan satırlar nasıl seçilir?
  • ORDER BY, ASCve DES anahtar sözcüklerini kullanarak sonuçları nasıl sıralayabilirim?
  • MIN, MAX, COUNT toplama işlevlerini kullanarak özet verileri nasıl bulabilirim?
  • Toplama işlevlerini ve GROUP BY anahtar sözcüğünü kullanarak farklı gruplar için özet verileri nasıl bulabilirim?

Bu makalede çok sayıda SQL içeriği ve örneği ele aldık. Eğer buraya kadar okudusanız, çok teşekkürler. SQL hakkında daha fazla bilgi edinmek isteyen, diğer programlama dillerini merak eden, teknoloji ve yazılıma meraklı biriyseniz, Anatoliacode Abone Listesine dahil olabilir ve en son yayınlanan makaleler hakkında e-mail bildirimleri alabilirsiniz.

Burası Anatoliacode.

Kendinize iyi bakın.

Anatoliacode Makale Aboneliği

Bize abone olarak tüm makaleleri ilk siz okuyabilirsiniz. Ayrıca asla reklam veya spam yapmıyoruz.