İçeriğe geç
Yazılım Dilleri

SQL nedir? Veritabanı sorgulama dili rehberi

İlişkisel veritabanlarının evrensel sorgulama dilidir. Tablolarda veri filtreleme, ekleme, güncelleme, silme ve JOIN ile ilişkisel analiz yapmayı sağlar.

Webino App Ekibi Son güncelleme:
Bu sayfada · 22 başlık

SQL Hakkında Bilmen Gereken 5 Temel Soru

Ne İçin Kullanılır?

İlişkisel veritabanlarını yönetmek, verileri saklamak, filtrelemek, birleştirmek, güncellemek ve hızlı analiz raporları üretmek için kullanılan standart sorgu dilidir.

Neler Yapılır?

Müşteri sipariş raporları, kullanıcı yetkilendirme sorguları, bakiye hesaplamaları, stok takibi ve milyonlarca satırlık veriden saniyeler içinde özet çıkarma yapılır.

Nerede Kullanılır?

İstisnasız her backend uygulamasında, veritabanlarında (PostgreSQL, MySQL, SQL Server, Oracle, SQLite), iş zekası (PowerBI) ve veri analizinde kullanılır.

Nasıl & Nerede Çalıştırılır?

PostgreSQL, MySQL veya MSSQL veritabanı sunucusu kurulur; DBeaver, SSMS, pgAdmin veya terminal/VS Code üzerinden çalıştırılır.

Neden Önemlidir?

Verinin olduğu her yerde SQL vardır; programlama dilleri değişse bile 40 yıldır veriye ulaşmanın evrensel ve alternatifsiz anahtarıdır.

SQL ne için kullanılır?

Veri filtreleme ve raporlama (SELECT, WHERE)

➕

Yeni kayıt ekleme ve güncelleme (INSERT, UPDATE)

Farklı tabloları birleştirme (INNER / LEFT JOIN)

📊

Gruplama ve özet analizler (GROUP BY, COUNT, SUM)

SQL hakkında kısaca

SQL (Structured Query Language), 1970'lerin başında IBM araştırmacıları Donald D. Chamberlin ve Raymond F. Boyce tarafından Edgar F. Codd'un ilişkisel veritabanı modeli üzerine geliştirildi. İlk adı SEQUEL idi. 1986'da ANSI ve 1987'de ISO standardı haline gelerek modern veritabanlarının ortak dili oldu.

Artıları

  • İlişkisel veritabanlarının evrensel standardıdır; bir kez öğrenip MySQL, PostgreSQL, MSSQL ve SQLite'ta kullanabilirsin.
  • Büyük veri kümelerini birkaç satır bildirimsel (declarative) sorguyla filtreleyip özetleyebilir.
  • Arka yüz yazılımcıları, veri analistleri ve yapay zeka mühendisleri için temel zorunlu beceridir.

Eksileri

  • Farklı veritabanı motorları (MySQL, MSSQL, Oracle) standart SQL'e kendi özel fonksiyon ve sözdizimi eklerini katar.
  • Döngü veya ekran arayüzü çizmez; veriyi depolamak ve sorgulamak için programlama dilleriyle birlikte kullanılır.

Bilgisayarına nasıl kurulur?

Sayfadaki "Kendin dene" alanları için kurulum gerekmez. Kendi bilgisayarında çalışmak istediğinde bu adımları izle.

  1. 1

    Tarayıcıda hemen denemek için sqlfiddle.com veya sqliteonline.com açıp kodları yapıştırabilirsin.

  2. 2

    Bilgisayarına yerel veritabanı kurmak için MySQL veya MSSQL rehberlerimize bakabilirsin.

  3. 3

    Hafif ve kuruluma gerek olmayan SQLite ile terminalde dosya tabanlı çalışmak:

    Terminal
    sqlite3 veritabani.db
  4. 4

    Sorguları görsel arayüzle çalıştırmak için DBeaver veya MySQL Workbench kullanabilirsin.

Örneklerle adım adım öğren

Her derste kısa bir açıklama, kod ve kodun ekrana ne yazdığını göreceksin. " Kendin dene" ile kodu hemen değiştirip çalıştırabilirsin.

SQL Nerede ve Hangi Uygulamayla Çalıştırılır? (Kurulum ve Ayarlar)

SQL sorgularını çalıştırmak için bir veritabanı motoruna (SQLite, MySQL, PostgreSQL veya MSSQL) ve tabloları görsel olarak yöneteceğin bir arayüz aracına ihtiyacın vardır.

SQL Kurarken Yapılması Gereken Kritik Ayarlar

  • ✓

    1. Başlangıç İçin Kurulumsuz SQLite veya Tarayıcı Editörü

    SQL öğrenmeye ilk başladığında ağır sunucu kurulumlarıyla vakit kaybetmek yerine doğrudan tarayıcıdaki SQL editörümüzü veya tek dosyalık SQLite (DB Browser for SQLite) aracını kullan.

  • ✓

    2. MySQL Kurarken Port (3306) ve Root Şifresi Ayarı

    MySQL Installer kurulumunda "Server Only" ve "MySQL Workbench" seç. Belirlediğin root şifresini bir yere not et ve varsayılan 3306 portunu koru.

  • ✓

    3. İlk Veritabanını (CREATE DATABASE) ve Tabloyu Seçme (USE)

    MySQL veya MSSQL’de sorgu yazmadan önce hangi veritabanında çalıştığını USE okul_db; komutuyla seçmeyi veya sol panelden veritabanına çift tıklamayı unutma.

SQL kurulum ayarları, eklentiler ve ilk çalıştırma ekranı şeması
SQL için önerilen kurulum onay kutuları, eklentiler ve ilk çalıştırma komutu özeti.
SQL sorgularını görsel tablolarla çalıştırmak için veritabanı yönetim araçları
SQL sorgularını görsel tablolarla çalıştırmak için veritabanı yönetim araçları.

İlk SQL Kodunu Çalıştırma Komutları:

SQL Kurulum & Çalıştırma
-- 1. Yeni bir veritabanı oluştur ve seç:
CREATE DATABASE okul_db;
USE okul_db;

-- 2. Öğrenciler tablosunu kur ve kayıt ekle:
CREATE TABLE ogrenciler (id INT PRIMARY KEY, ad VARCHAR(50), puan INT);
INSERT INTO ogrenciler VALUES (1, 'Elif', 95), (2, 'Can', 82);

-- 3. Puanı 85 üstü olanları sorgula:
SELECT ad, puan FROM ogrenciler WHERE puan >= 85;
1

Tablodan veri seçme: SELECT

SELECT komutu hangi sütunları istediğini, FROM ise hangi tablodan okuyacağını belirtir. * işareti tablodaki tüm sütunları getirir.

SQL
SELECT ad, bolum
FROM calisanlar;

▶ Sonuç

ad | bolum
Ahmet | Yazılım
Ayşe | Tasarım

Bu konuyu uygulayarak öğren

İlişkisel bir tablodan belirli sütunları veya tüm satırları SELECT sorgusuyla getirmek.

SQL bir programlama dili gibi satır satır çalışan komutlardan ziyade veritabanına ne istediğini söyleyen bildirimsel (declarative) bir sorgu dilidir. Tablolar satır ve sütunlardan oluşur. SELECT ifadesi hangi sütunları görmek istediğini, FROM ifadesi ise bu verinin hangi tabloda bulunduğunu belirtir.

SQL · Tablodan veri seçme: SELECT — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Tablodan veri seçme: SELECT

İlişkisel bir tablodan belirli sütunları veya tüm satırları SELECT sorgusuyla getirmek.

Kavramı kur

SQL bir programlama dili gibi satır satır çalışan komutlardan ziyade veritabanına ne istediğini söyleyen bildirimsel (declarative) bir sorgu dilidir. Tablolar satır ve sütunlardan oluşur. SELECT ifadesi hangi sütunları görmek istediğini, FROM ifadesi ise bu verinin hangi tabloda bulunduğunu belirtir.

Neden böyle çalışıyor?

Tüm sütunları tek seferde çekmek için yıldız (*) kullanılır; ancak büyük ve üretim ortamındaki veritabanlarında ihtiyacın olan sütunları tek tek yazmak performansı ve ağ trafiğini korur. SQL anahtar sözcüklerini büyük harfle yazma geleneği (SELECT, FROM) kodun okunabilirliğini artırır; küçük harfle yazsan da çalışır.

Çalışma sırası

Veritabanı motoru sorguyu aldığında bir çalıştırma planı (execution plan) çıkarır ve sonucu satırlar halinde döner. SELECT sonucunda tablonun orijinal verisi değişmez; yalnızca istediğin görünüm sana sunulur.

İkinci örnek · 1

SELECT anahtar sözcüğü sorgunun veri çekme işlemi olduğunu bildirir. Kodun tamamı yazılı derste bulunur.

Kod

SELECT ad, bolum
FROM calisanlar;

Beklenen sonucu oku

Motor tablodaki her satırı sırayla tarar ve belirtilen sütunları içeren bir sonuç kümesi üretir.

Beklenen çıktı: ad | bolum Ahmet | Yazılım Ayşe | Tasarım Mehmet | Pazarlama

Bir değeri sen değiştir

calisanlar tablosundan tüm sütunları (*) getiren sorguyu yaz. Yalnızca ad ve maas sütunlarını getirecek şekilde sorguyu düzenle.

Hata nereden gelir?

Sütun isimleri arasına virgül koymayı unutmak sözdizimi hatası verir; sütunları virgülle ayır.

Kendi çözümünü kur

Tablo adını musteriler yaparak ad ve sehir sütunlarını seçen bir sorgu kur. SELECT sonrasına getirmek istediğin sütun adlarını aralarına virgül koyarak yaz. Hedef tabloyu FROM sonrasında belirt.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

SELECT ad, maas
FROM calisanlar;

Kendini kontrol et

SELECT * neden üretim ortamlarında önerilmez? Yanıt: İhtiyaç duyulmayan fazla sütunları taşımak gereksiz ağ trafiği ve bellek yükü oluşturur; sütunları açıkça belirtmek daha güvenli ve hızlıdır.

Beklenen çıktı: ad | maas Ahmet | 65000 Ayşe | 52000 Mehmet | 48000

Ayrıntılı ders, alıştırmalar ve çözümler
Tablodaki tüm sütunları tek seferde seçmek için hangi karakter kullanılır?

2

Koşullu filtreleme: WHERE

WHERE ile yalnızca belirli kriterlere uyan satırları getiririz. Metin değerleri tek tırnak içine yazılır.

SQL
SELECT ad, maas
FROM calisanlar
WHERE maas > 50000;

▶ Sonuç

ad | maas
Ahmet | 65000

Bu konuyu uygulayarak öğren

Tablodaki binlerce satır arasından yalnızca belirli koşullara uyan verileri WHERE ile filtrelemek.

Veritabanında her zaman tablonun tamamına ihtiyaç duymayız. Belirli bir kullanıcının bilgilerini getirmek, stokta tükenen ürünleri bulmak veya belirli bir tarihten sonraki kayıtları listelemek için WHERE filtresi kullanılır.

SQL · Koşullu filtreleme: WHERE — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Koşullu filtreleme: WHERE

Tablodaki binlerce satır arasından yalnızca belirli koşullara uyan verileri WHERE ile filtrelemek.

Kavramı kur

Veritabanında her zaman tablonun tamamına ihtiyaç duymayız. Belirli bir kullanıcının bilgilerini getirmek, stokta tükenen ürünleri bulmak veya belirli bir tarihten sonraki kayıtları listelemek için WHERE filtresi kullanılır.

Neden böyle çalışıyor?

WHERE ifadesi FROM satırından sonra yazılır. Koşulda büyüktür (>), küçüktür (<), eşit (=) veya eşit değil (!=) gibi karşılaştırma işleçleri kullanılır. Birden çok koşulu AND (ve) veya OR (veya) ile bağlayabilirsin.

Çalışma sırası

Metinsel ve tarihsel değerler SQL'de tek tırnak içine ('...') yazılır. Sayısal değerlerde ise tırnak kullanılmaz. Tırnak işaretini unutmak SQL motorunun metni bir sütun adı sanmasına yol açar.

İkinci örnek · 1

SELECT ad, maas seçilecek sütunları listeler. Kodun tamamı yazılı derste bulunur.

Kod

SELECT ad, maas
FROM calisanlar
WHERE maas > 50000;

Beklenen sonucu oku

Sonuç kümesine yalnızca şartı sağlayan satırlar eklenir.

Beklenen çıktı: ad | maas Ahmet | 65000 Ayşe | 52000

Bir değeri sen değiştir

Maaşı 60000'den büyük çalışanları filtrele. Bölümü yalnızca 'Yazılım' olanları getiren bir metin filtresi yaz.

Hata nereden gelir?

Metin değerlerini tırnaksız yazmak hataya sebep olur; tek tırnak kullan.

Kendi çözümünü kur

AND işleci kullanarak hem Yazılım bölümünde olan hem de maaşı 50000 üzerinde olanları seç. Metin filtresinde tek tırnak kullan: WHERE bolum = 'Yazılım'. İki koşulu AND ile birleştir.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

SELECT ad, bolum, maas
FROM calisanlar
WHERE bolum = 'Yazılım' AND maas > 50000;

Kendini kontrol et

WHERE bolum = 'Yazılım' AND maas > 50000 sorgusunda her iki şart da sağlanmalı mıdır? Yanıt: Evet; AND işleci bağlı olduğu tüm koşulların aynı anda doğru olmasını zorunlu kılar.

Beklenen çıktı: ad | bolum | maas Ahmet | Yazılım | 65000

Ayrıntılı ders, alıştırmalar ve çözümler
Belirli bir koşula uyan satırları filtrelemek için hangi ifade kullanılır?

3

Sıralama ve sınırlama: ORDER BY & LIMIT

Sonuçları artan (ASC) veya azalan (DESC) sıraya koyar. LIMIT ise sadece ilk birkaç kaydı getirir.

SQL
SELECT ad, maas
FROM calisanlar
ORDER BY maas DESC
LIMIT 2;

▶ Sonuç

ad | maas
Ahmet | 65000
Ayşe | 52000

Bu konuyu uygulayarak öğren

Sorgu sonuçlarını belirli bir ölçüte göre sıralamak ve en üstteki kayıtları LIMIT ile sınırlandırmak.

İlişkisel veritabanları kayıtları disk üzerinde rastgele veya ekleme sırasına göre saklar; sen açıkça sıralama istemedikçe sonuçların belirli bir sırada geleceği garanti edilemez. Sıralama yapmak için ORDER BY kullanılır.

SQL · Sıralama ve sınırlama: ORDER BY & LIMIT — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Sıralama ve sınırlama: ORDER BY & LIMIT

Sorgu sonuçlarını belirli bir ölçüte göre sıralamak ve en üstteki kayıtları LIMIT ile sınırlandırmak.

Kavramı kur

İlişkisel veritabanları kayıtları disk üzerinde rastgele veya ekleme sırasına göre saklar; sen açıkça sıralama istemedikçe sonuçların belirli bir sırada geleceği garanti edilemez. Sıralama yapmak için ORDER BY kullanılır.

Neden böyle çalışıyor?

ORDER BY varsayılan olarak artan (ASC - A'dan Z'ye, küçükten büyüğe) sıralar. Azalan sıralama (Z'den A'ya, büyükten küçüğe) için sütun adının yanına DESC yazılır.

Çalışma sırası

Web sayfalarında sayfalama yaparken veya en yüksek puanlı ilk kayıtları alırken LIMIT kullanılır. ORDER BY ve LIMIT birlikte kullanıldığında en iyi/en son kayıtları kolayca alırsın.

İkinci örnek · 1

FROM calisanlar tablosu taranır. Kodun tamamı yazılı derste bulunur.

Kod

SELECT ad, maas
FROM calisanlar
ORDER BY maas DESC
LIMIT 2;

Beklenen sonucu oku

Gereksiz satırlar elenerek hafif bir sonuç döner.

Beklenen çıktı: ad | maas Ahmet | 65000 Ayşe | 52000

Bir değeri sen değiştir

Çalışanları ada göre alfabetik (A-Z) sıralayan sorguyu yaz. En düşük maaş alan ilk çalışanı bulmak için ORDER BY maas ASC LIMIT 1 kullan.

Hata nereden gelir?

LIMIT sözcüğünü ORDER BY'dan önce yazmak sözdizimi hatasıdır; LIMIT daima en sonda yer alır.

Kendi çözümünü kur

Fiyatı en yüksek 5 ürünü getiren örnek bir sorgu kur. Alfabetik sıralama için ORDER BY ad ASC veya sadece ORDER BY ad yazabilirsin.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

SELECT ad, maas
FROM calisanlar
ORDER BY maas ASC
LIMIT 1;

Kendini kontrol et

ORDER BY yazılmazsa dönen kayıtların sırası garanti midir? Yanıt: Hayır; ilişkisel veritabanlarında ORDER BY belirtilmedikçe satır sırası tamamen tanımsızdır.

Beklenen çıktı: ad | maas Mehmet | 48000

Ayrıntılı ders, alıştırmalar ve çözümler
Kayıtları azalan (büyükten küçüğe) sırada listelemek için ne yazılır?

4

Yeni kayıt ekleme: INSERT INTO

INSERT INTO ile tabloya yeni bir satır ekleriz. Belirtilen sütunlar ile VALUES içindeki değerler sırayla eşleşir.

SQL
INSERT INTO calisanlar (ad, bolum, maas)
VALUES ('Mehmet', 'Pazarlama', 48000);

▶ Sonuç

1 satır başarıyla eklendi.

Bu konuyu uygulayarak öğren

Veritabanındaki bir tabloya INSERT INTO komutuyla yeni veri satırları eklemek.

Bir web sitesinde yeni bir üye kaydolduğunda veya sepete yeni ürün eklendiğinde arka planda INSERT INTO sorgusu çalışır. Bu komut tabloya yeni bir satır ekler.

SQL · Yeni kayıt ekleme: INSERT INTO — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Yeni kayıt ekleme: INSERT INTO

Veritabanındaki bir tabloya INSERT INTO komutuyla yeni veri satırları eklemek.

Kavramı kur

Bir web sitesinde yeni bir üye kaydolduğunda veya sepete yeni ürün eklendiğinde arka planda INSERT INTO sorgusu çalışır. Bu komut tabloya yeni bir satır ekler.

Neden böyle çalışıyor?

Sözdiziminde önce tablo adı ve parantez içinde doldurulacak sütunlar yazılır; ardından VALUES sözcüğü ve sırayla eklenecek değerler verilir. Sütun sırası ile değerler sırası birebir eşleşmelidir.

Çalışma sırası

Genellikle otomatik artan birincil anahtar (Primary Key / id) sütunu elle yazılmaz; veritabanı motoru yeni bir numara atar.

İkinci örnek · 1

INSERT INTO calisanlar hedef tablonun calisanlar olduğunu belirtir. Kodun tamamı yazılı derste bulunur.

Kod

INSERT INTO calisanlar (ad, bolum, maas)
VALUES ('Zeynep', 'Finans', 51000);

Beklenen sonucu oku

Tabloya 1 yeni satır eklenir.

Beklenen çıktı: 1 satır başarıyla eklendi.

Bir değeri sen değiştir

Kendi adın, departmanın ve belirlediğin maaşla yeni bir çalışan ekle. Aynı anda iki satır eklemek için VALUES (...), (...) yazımını dene.

Hata nereden gelir?

Sütun sayısı ile VALUES içindeki değer sayısının uyuşmaması hataya yol açar.

Kendi çözümünü kur

Sadece ad ve bolum sütunlarını dolduran bir INSERT yaz. Birden çok satır eklerken VALUES sonrasında parantezli grupları virgülle ayırabilirsin.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

INSERT INTO calisanlar (ad, bolum, maas)
VALUES ('Can', 'Yazılım', 58000);

Kendini kontrol et

Otomatik artan id sütunu neden INSERT sorgusunda genelde yazılmaz? Yanıt: Veritabanı motoru her yeni satıra benzersiz bir kimliği otomatik olarak kendisi verir.

Beklenen çıktı: 1 satır başarıyla eklendi.

Ayrıntılı ders, alıştırmalar ve çözümler
Tabloya yeni satır ekleyen komut hangisidir?

5

Kayıt güncelleme: UPDATE

UPDATE ile tablodaki mevcut veriyi değiştiririz. WHERE koşulu yazılmazsa tablodaki TÜM satırlar değişir!

SQL
UPDATE calisanlar
SET maas = 55000
WHERE ad = 'Ayşe';

▶ Sonuç

1 satır güncellendi.

Bu konuyu uygulayarak öğren

Mevcut bir kaydın değerlerini UPDATE komutuyla güvenli bir şekilde değiştirmek.

Kullanıcı şifresini değiştirdiğinde, ürün fiyatı güncellendiğinde veya sipariş durumu güncellendiğinde UPDATE komutu kullanılır. Bu işlem mevcut satırın sütun değerlerini günceller.

SQL · Kayıt güncelleme: UPDATE — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Kayıt güncelleme: UPDATE

Mevcut bir kaydın değerlerini UPDATE komutuyla güvenli bir şekilde değiştirmek.

Kavramı kur

Kullanıcı şifresini değiştirdiğinde, ürün fiyatı güncellendiğinde veya sipariş durumu güncellendiğinde UPDATE komutu kullanılır. Bu işlem mevcut satırın sütun değerlerini günceller.

Neden böyle çalışıyor?

UPDATE sözcüğünden sonra tablo adı, SET ifadesinden sonra ise değiştirilecek sütun ve yeni değeri yazılır: SET maas = 55000. Birden çok sütunu güncellemek için aralarına virgül konur.

Çalışma sırası

EN KRİTİK KURAL: UPDATE sorgusuna mutlaka WHERE koşulu eklenmelidir! WHERE yazmayı unutursan tablodaki istisnasız BÜTÜN satırların o sütunu değişir.

İkinci örnek · 1

UPDATE calisanlar güncellenecek tabloyu hedefler. Kodun tamamı yazılı derste bulunur.

Kod

UPDATE calisanlar
SET maas = 55000
WHERE id = 2;

Beklenen sonucu oku

Motor sadece hedeflenen satırı günceller.

Beklenen çıktı: 1 satır güncellendi.

Bir değeri sen değiştir

id değeri 1 olan çalışanın departmanını 'Yönetim' olarak güncelle. Hem departmanı hem de maaşı tek bir UPDATE ile güncellemek için virgül kullan.

Hata nereden gelir?

WHERE koşulunu unutmak tablodaki tüm satırları ezer; çalıştırmadan önce WHERE var mı mutlaka iki kez kontrol et.

Kendi çözümünü kur

WHERE koşulunu ad sütununa göre düzenle. Birden çok sütun için: SET bolum = 'Yönetim', maas = 70000 WHERE id = 1;

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

UPDATE calisanlar
SET bolum = 'Yönetim', maas = 70000
WHERE id = 1;

Kendini kontrol et

UPDATE sorgusunda WHERE unutulursa ne olur? Yanıt: Tablodaki tüm satırlar istisnasız güncellenir ve geri alınması zor veri kaybı yaşanır.

Beklenen çıktı: 1 satır güncellendi.

Ayrıntılı ders, alıştırmalar ve çözümler
UPDATE komutunda WHERE unutulursa ne olur?

6

Kayıt silme: DELETE

DELETE FROM ile belirli koşula uyan satırları sileriz. WHERE unutulursa tablodaki tüm veriler silinir.

SQL
DELETE FROM calisanlar
WHERE id = 3;

▶ Sonuç

1 satır silindi.

Bu konuyu uygulayarak öğren

Tablodaki gereksiz veya silinmesi istenen satırları DELETE FROM ile kontrollü şekilde kaldırmak.

Veritabanında artık ihtiyaç duyulmayan kayıtları silmek için DELETE FROM kullanılır. Bu komut belirtilen tablodan satırları kalıcı olarak kaldırır.

SQL · Kayıt silme: DELETE — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Kayıt silme: DELETE

Tablodaki gereksiz veya silinmesi istenen satırları DELETE FROM ile kontrollü şekilde kaldırmak.

Kavramı kur

Veritabanında artık ihtiyaç duyulmayan kayıtları silmek için DELETE FROM kullanılır. Bu komut belirtilen tablodan satırları kalıcı olarak kaldırır.

Neden böyle çalışıyor?

Tıpkı UPDATE gibi DELETE komutunda da WHERE koşulu hayati önem taşır. WHERE yazmadan DELETE FROM calisanlar; yazarsan tablodaki tüm satırlar silinir ve tablo bomboş kalır!

Çalışma sırası

DELETE satırları siler; tablonun kendisi, sütun yapısı ve ayarları korunur. Tabloyu tamamen sistemden yok etmek için DROP TABLE kullanılır.

İkinci örnek · 1

DELETE FROM calisanlar tablodan satır silineceğini belirtir. Kodun tamamı yazılı derste bulunur.

Kod

DELETE FROM calisanlar
WHERE id = 3;

Beklenen sonucu oku

Silinen satır sayısı sonuç olarak döner.

Beklenen çıktı: 1 satır silindi.

Bir değeri sen değiştir

Bölümü 'Stajyer' olan tüm çalışanları silen bir sorgu yaz. Silme sorgusu yazmadan önce aynı koşulu SELECT ile çalıştırıp hangi satırların silineceğini önceden gör.

Hata nereden gelir?

WHERE koşulunu yazmayı unutmak tüm tabloyu boşaltır.

Kendi çözümünü kur

Belirli bir tarihten eski kayıtları silmek için büyüktür/küçüktür işleci kullan. Güvenlik kuralı: DELETE yazmadan önce SELECT * FROM calisanlar WHERE ... ile silinecekleri listele.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

DELETE FROM calisanlar
WHERE bolum = 'Stajyer';

Kendini kontrol et

DELETE FROM tablo; ile DROP TABLE tablo; arasındaki temel fark nedir? Yanıt: DELETE satırları silip tablo yapısını korur; DROP ise tablonun yapısını tamamen yok eder.

Beklenen çıktı: 1 satır silindi.

Ayrıntılı ders, alıştırmalar ve çözümler
DELETE FROM tablo; komutu ne yapar?

7

Gruplama ve özet analizler: GROUP BY & COUNT

Birden çok satırı belirli bir sütuna göre gruplamak için GROUP BY kullanılır. COUNT satır sayısını, SUM toplamı, AVG ortalamayı verir.

SQL
SELECT bolum, COUNT(*) AS kisi_sayisi
FROM calisanlar
GROUP BY bolum;

▶ Sonuç

bolum | kisi_sayisi
Yazılım | 2
Tasarım | 1

Bu konuyu uygulayarak öğren

Tablodaki satırları ortak özelliklere göre gruplayarak COUNT, SUM, AVG gibi toplu hesaplamalar yapmak.

Tek tek satırları okumak yerine "Hangi bölümde kaç çalışan var?", "Toplam ciro ne kadar?" veya "Kategori bazında ortalama fiyat nedir?" gibi sorular için toplama (aggregate) fonksiyonları kullanılır.

SQL · Gruplama ve özet analizler: GROUP BY & COUNT — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Gruplama ve özet analizler: GROUP BY & COUNT

Tablodaki satırları ortak özelliklere göre gruplayarak COUNT, SUM, AVG gibi toplu hesaplamalar yapmak.

Kavramı kur

Tek tek satırları okumak yerine "Hangi bölümde kaç çalışan var?", "Toplam ciro ne kadar?" veya "Kategori bazında ortalama fiyat nedir?" gibi sorular için toplama (aggregate) fonksiyonları kullanılır.

Neden böyle çalışıyor?

GROUP BY, belirtilen sütundaki aynı değerlere sahip satırları tek bir grupta toplar. COUNT(*) gruptaki satır sayısını, SUM(sutun) toplamını, AVG(sutun) ortalamasını, MAX/MIN ise en büyük/en küçük değeri verir.

Çalışma sırası

AS sözcüğü ile hesaplanan yeni değere takma ad (alias) vererek sonuç tablosunda sütun başlığını anlaşılır kılabilirsin: COUNT(*) AS kisi_sayisi.

İkinci örnek · 1

FROM calisanlar tablosu taranır. Kodun tamamı yazılı derste bulunur.

Kod

SELECT bolum, COUNT(*) AS kisi_sayisi
FROM calisanlar
GROUP BY bolum;

Beklenen sonucu oku

Sonuçta her bölüm ve karşısındaki kişi sayısı listelenir.

Beklenen çıktı: bolum | kisi_sayisi Yazılım | 2 Tasarım | 1 Pazarlama | 1

Bir değeri sen değiştir

Her bölümün ortalama maaşını (AVG(maas)) hesaplayan sorgu yaz. Tüm şirketteki toplam maaş giderini hesaplamak için GROUP BY olmadan SUM(maas) çalıştır.

Hata nereden gelir?

SELECT listesinde toplama fonksiyonu olmayan sütunları GROUP BY içine eklemeyi unutmak hataya yol açar.

Kendi çözümünü kur

Her bölümdeki en yüksek maaşı MAX(maas) ile bul. Ortalama için AVG(maas), takma ad için AS ortalama_maas yaz.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

SELECT bolum, AVG(maas) AS ortalama_maas
FROM calisanlar
GROUP BY bolum;

Kendini kontrol et

GROUP BY bolum sorgusunda SELECT ad, bolum, COUNT(*) yazılırsa ne sorun oluşabilir? Yanıt: ad sütunu gruplanmadığı ve toplama fonksiyonuna alınmadığı için hangi çalışanın adının basılacağı belirsizdir; SQL motoru hata verir.

Beklenen çıktı: bolum | ortalama_maas Yazılım | 61500 Tasarım | 52000 Pazarlama | 48000

Ayrıntılı ders, alıştırmalar ve çözümler
Satır sayısını hesaplayan SQL fonksiyonu hangisidir?

8

Tabloları birleştirme: INNER JOIN

İlişkisel veritabanlarının en büyük gücü farklı tabloları birbirine bağlamaktır. JOIN ile çalışan tablosu ile departman tablosunu ortak id üzerinden birleştiririz.

SQL
SELECT calisanlar.ad, departmanlar.departman_adi
FROM calisanlar
INNER JOIN departmanlar ON calisanlar.departman_id = departmanlar.id;

▶ Sonuç

ad | departman_adi
Ahmet | Bilgi Teknolojileri
Ayşe | Ürün Tasarımı

Bu konuyu uygulayarak öğren

İlişkisel veritabanlarının temel özelliği olan farklı tabloları ortak anahtar üzerinden birleştirmek.

İyi tasarlanmış bir veritabanında veriler tekrar etmez. Çalışan bilgileri calisanlar tablosunda, departman bilgileri departmanlar tablosunda tutulur. calisanlar tablosundaki departman_id sütunu departmanlar tablosunun id sütununa bağlanır (Foreign Key).

SQL · Tabloları birleştirme: INNER JOIN — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.
Videoyla adım adım izle · 4:35

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Tabloları birleştirme: INNER JOIN

İlişkisel veritabanlarının temel özelliği olan farklı tabloları ortak anahtar üzerinden birleştirmek.

Kavramı kur

İyi tasarlanmış bir veritabanında veriler tekrar etmez. Çalışan bilgileri calisanlar tablosunda, departman bilgileri departmanlar tablosunda tutulur. calisanlar tablosundaki departman_id sütunu departmanlar tablosunun id sütununa bağlanır (Foreign Key).

Neden böyle çalışıyor?

İki tabloyu tek bir sorguda birleştirmek için INNER JOIN kullanılır. ON ifadesi ile hangi sütunların birbirine eşitleneceği belirtilir: ON calisanlar.departman_id = departmanlar.id.

Çalışma sırası

INNER JOIN yalnızca her iki tabloda da karşılığı olan eşleşen satırları getirir. Sol tablodaki tüm satırları eşleşme olmasa da getirmek için LEFT JOIN kullanılır.

İkinci örnek · 1

FROM calisanlar ana tablo olarak seçilir. Kodun tamamı yazılı derste bulunur.

Kod

SELECT calisanlar.ad, departmanlar.departman_adi
FROM calisanlar
INNER JOIN departmanlar ON calisanlar.departman_id = departmanlar.id;

Beklenen sonucu oku

Sorgu iki tablonun birleşmiş halinden istenen sütunları döndürür.

Beklenen çıktı: ad | departman_adi Ahmet | Bilgi Teknolojileri Ayşe | Ürün Tasarımı Mehmet | Kurumsal İletişim

Bir değeri sen değiştir

calisanlar ve projeler tablosunu INNER JOIN ile birleştirip kimin hangi projede çalıştığını listele. Tablo isimleri uzunsa AS c ve AS d şeklinde takma adlar (alias) tanımla.

Hata nereden gelir?

ON koşulunu yazmayı unutmak iki tablonun kartezyen çarpımını yaparak devasa ve anlamsız veri üretir.

Kendi çözümünü kur

LEFT JOIN kullanarak henüz bir projeye atanmamış çalışanları da listele. Tablo takma adı için: FROM calisanlar AS c INNER JOIN departmanlar AS d ON c.departman_id = d.id

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

SELECT c.ad, d.departman_adi
FROM calisanlar AS c
INNER JOIN departmanlar AS d ON c.departman_id = d.id;

Kendini kontrol et

INNER JOIN ile LEFT JOIN arasındaki temel fark nedir? Yanıt: INNER JOIN yalnızca her iki tabloda eşleşen kayıtları getirir; LEFT JOIN ise sol tablodaki tüm kayıtları, sağda eşleşme olmasa bile listeler.

Beklenen çıktı: ad | departman_adi Ahmet | Bilgi Teknolojileri Ayşe | Ürün Tasarımı Mehmet | Kurumsal İletişim

Ayrıntılı ders, alıştırmalar ve çözümler
İki tabloyu ortak anahtar üzerinden birleştiren komut hangisidir?

SQL öğrenirken sık yapılan hatalar

Bunlarla karşılaşırsan panik yapma; herkesin başına gelir.

UPDATE veya DELETE sorgusunda WHERE unutmak

WHERE yazmazsan tablodaki TÜM satırlar değişir veya silinir! Kritik sorguları çalıştırmadan önce mutlaka SELECT ile kontrol et.

Metin değerlerinde tırnak işaretini unutmak

SQL'de metinsel (VARCHAR, TEXT) ve tarih değerleri tek tırnak içine yazılır: WHERE bolum = 'Yazılım'. Sayılar tırnaksız yazılır.

NULL değerleri = NULL ile aramak

SQL'de bilinmeyen boş değerler için = NULL çalışmaz; IS NULL veya IS NOT NULL kullanılmalıdır.

Daha fazlası için Yaygın Yazılım Hataları sayfasına bak.

Sonraki adımlar: öğrenme yol haritası

SQL öğrenmeye devam etmek için bu sırayı izleyebilirsin.

  1. 1

    Temeller

    Bu sayfadaki 8 dersi bitir: SELECT, WHERE, ORDER BY, INSERT, UPDATE, DELETE, GROUP BY ve JOIN.

  2. 2

    İlişkisel tasarım

    Primary Key, Foreign Key ve 1-N (bire-çok), N-N (çoka-çok) tablo ilişkilerini öğren.

  3. 3

    İleri SQL

    Alt sorgular (subquery), VIEW, INDEX ve veritabanı işlemlerini (Transactions) incele.

  4. 4

    Bir motorda uzmanlaş

    Web için PostgreSQL/MySQL, kurumsal sistemler için MSSQL veya mobil/yerel için SQLite seç.

Resmi kaynakW3Schools SQL Eğitimi
Uygulamalı Öğrenme

SQL Bilgini Pekiştir ve Uygulamaya Başla

Yalnızca teoride kalma! SQL için hazırladığımız adım adım 8 interaktif ders, tarayıcıda kod deneme atölyeleri ve seviye tespit sınavıyla kendini hemen geliştir.

Kod oyun alanı

SQL kodunu burada dene

Bir dersin kodunu seç ya da kendi kodunu yaz. Kodu editörde değiştir, sonra ▶ Çalıştır butonuna bas. Sonuç editördeki Output bölümünde görünür. Editör OneCompiler tarafından sağlanır.

Editör yükleniyor...

Sitenin dışında denemek istersen: SQLite, MySQL Workbench veya SQL Fiddle gibi araçlarla tarayıcıda hemen deneyebilirsin.

Bitirme projesi: İlişkisel mini mağaza veritabanı ve satış raporu

Kategoriler, ürünler ve siparişler için ilişkisel tablolar tasarla; örnek veriler ekle ve JOIN ile çoklu tablo satış raporu hazırla.

  1. Tablo şemalarını (kategoriler, urunler) Primary ve Foreign Key ile tasarla.
  2. INSERT INTO ile her tabloya mantıklı test kayıtları ekle.
  3. Stok miktarı 10'un altında olan ürünleri WHERE ile filtrele.
  4. Ürünleri fiyata göre en yüksekten en düşüğe ORDER BY ile sırala.
  5. Bir ürünün stok adedini UPDATE ile güvenli şekilde güncelle.
  6. Gereksiz bir deneme kaydını DELETE FROM ile kaldır.
  7. Kategori bazında ürün adedini GROUP BY ve COUNT(*) ile raporla.
  8. İki tabloyu INNER JOIN ile birleştirerek ürün adını ve kategori adını tek sorguda listele.

Projen bitti mi? Bunları doğrula

Temellerden sonra devam müfredatı

Bu modül başlangıç ve uygulamalı temel sağlar. Aşağıdaki konular ayrı derinleşme alanlarıdır; yalnızca bu sayfayı bitirmek bütün dili bildiğin anlamına gelmez.

  1. Alt sorgular (Subqueries) ve VIEW tanımları
  2. Veritabanı indeksleri (INDEX) ve sorgu optimizasyonu
  3. Transactions (ACID prensipleri) ve veri güvenliği
Bitirme projesi için referans çözüm

Önce kendi projen üzerinde çalış. Bu küçük başlangıç çözümünü inceleyip görevlerde istenen ek durumlarla geliştir.

SQL

-- Webino App SQL Bitirme Projesi: Mini Mağaza Şeması ve Raporlama

-- 1. Tabloların oluşturulması
CREATE TABLE kategoriler (
    id INT PRIMARY KEY,
    kategori_adi VARCHAR(50) NOT NULL
);

CREATE TABLE urunler (
    id INT PRIMARY KEY,
    ad VARCHAR(100) NOT NULL,
    fiyat DECIMAL(10,2) NOT NULL,
    stok INT NOT NULL,
    kategori_id INT,
    FOREIGN KEY (kategori_id) REFERENCES kategoriler(id)
);

-- 2. Örnek verilerin eklenmesi
INSERT INTO kategoriler (id, kategori_adi) VALUES (1, 'Elektronik'), (2, 'Kitap');

INSERT INTO urunler (id, ad, fiyat, stok, kategori_id) VALUES
(1, 'Kablosuz Kulaklık', 750.00, 15, 1),
(2, 'Mekanik Klavye', 1200.00, 8, 1),
(3, 'SQL Öğreniyorum', 180.00, 25, 2);

-- 3. Koşullu filtreleme (Stok azalanlar)
SELECT ad, stok FROM urunler WHERE stok < 10;

-- 4. Sıralama (En pahalı ürünler)
SELECT ad, fiyat FROM urunler ORDER BY fiyat DESC;

-- 5. Güvenli güncelleme
UPDATE urunler SET stok = 20 WHERE id = 2;

-- 6. Kategori bazında ürün sayısı (GROUP BY & COUNT)
SELECT k.kategori_adi, COUNT(u.id) AS urun_sayisi
FROM kategoriler AS k
LEFT JOIN urunler AS u ON k.id = u.kategori_id
GROUP BY k.kategori_adi;

Dosyayı SQLite, MySQL veya PostgreSQL üzerinde çalıştırabilirsin. Tablo ilişkilerini ve JOIN sorgularını inceleyerek kendi ek tablolarını bağla.

Örnek proje dosyalarını indirResmî öğrenme müfredatı

Şimdi sen yap

Bu içerik işine yaradı mı?

Görüşünü aşağıdan işaretleyebilir ve varsa notunu bırakabilirsin.