Bu sayfada · 22 başlık
SQL Hakkında Bilmen Gereken 5 Temel Soru
İ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.
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.
İstisnasız her backend uygulamasında, veritabanlarında (PostgreSQL, MySQL, SQL Server, Oracle, SQLite), iş zekası (PowerBI) ve veri analizinde kullanılır.
PostgreSQL, MySQL veya MSSQL veritabanı sunucusu kurulur; DBeaver, SSMS, pgAdmin veya terminal/VS Code üzerinden çalıştırılır.
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
Tarayıcıda hemen denemek için sqlfiddle.com veya sqliteonline.com açıp kodları yapıştırabilirsin.
- 2
-
3
Hafif ve kuruluma gerek olmayan SQLite ile terminalde dosya tabanlı çalışmak:
Terminalsqlite3 veritabani.db -
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.
Webino App Tarayıcı İçi SQL Editörü (Sıfır Kurulum)
Hiçbir veritabanı sunucusu kurmadan gerçek SQLite motoru üzerinde SELECT, JOIN, INSERT ve GROUP BY sorgularını tarayıcıda çalıştır.
Aracı incele →MySQL + MySQL Workbench (Açık Kaynak Standart)
Web projelerinde en yaygın kullanılan ilişkisel veritabanı ve resmi görsel sorgu ekranıdır.
Aracı incele →SQL Server (MSSQL) + SSMS / DBeaver
Kurumsal .NET projeleri için Microsoft SQL Server Developer ve SSMS; çoklu veritabanı yönetimi içinse ücretsiz DBeaver kullanılır.
Aracı incele →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.
İlk SQL Kodunu Çalıştırma Komutları:
-- 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;
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.
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.

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
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.
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.

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
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.
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.

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
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.
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.

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.
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!
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.

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.
Kayıt silme: DELETE
DELETE FROM ile belirli koşula uyan satırları sileriz. WHERE unutulursa tablodaki tüm veriler silinir.
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.

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.
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.
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.

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
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.
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).

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
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
Temeller
Bu sayfadaki 8 dersi bitir: SELECT, WHERE, ORDER BY, INSERT, UPDATE, DELETE, GROUP BY ve JOIN.
-
2
İlişkisel tasarım
Primary Key, Foreign Key ve 1-N (bire-çok), N-N (çoka-çok) tablo ilişkilerini öğren.
-
3
İleri SQL
Alt sorgular (subquery), VIEW, INDEX ve veritabanı işlemlerini (Transactions) incele.
-
4
Bir motorda uzmanlaş
Web için PostgreSQL/MySQL, kurumsal sistemler için MSSQL veya mobil/yerel için SQLite seç.
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.
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.
- Tablo şemalarını (kategoriler, urunler) Primary ve Foreign Key ile tasarla.
- INSERT INTO ile her tabloya mantıklı test kayıtları ekle.
- Stok miktarı 10'un altında olan ürünleri WHERE ile filtrele.
- Ürünleri fiyata göre en yüksekten en düşüğe ORDER BY ile sırala.
- Bir ürünün stok adedini UPDATE ile güvenli şekilde güncelle.
- Gereksiz bir deneme kaydını DELETE FROM ile kaldır.
- Kategori bazında ürün adedini GROUP BY ve COUNT(*) ile raporla.
- İki tabloyu INNER JOIN ile birleştirerek ürün adını ve kategori adını tek sorguda listele.
Projen bitti mi? Bunları doğrula
- Primary Key ve Foreign Key ilişkilerini doğru kurdum.
- UPDATE ve DELETE sorgularında WHERE şartını eksiksiz kullandım.
- JOIN sorgusunda tablolar arasındaki eşleşme mantığını açıklayabiliyorum.
- Gruplama ve toplama fonksiyonlarını doğru sütunlarla çalıştırdım.
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.
- Alt sorgular (Subqueries) ve VIEW tanımları
- Veritabanı indeksleri (INDEX) ve sorgu optimizasyonu
- 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.
Şimdi sen yap
Bu içerik işine yaradı mı?
Görüşünü aşağıdan işaretleyebilir ve varsa notunu bırakabilirsin.