text
1. Giriş: SQL Nedir ve Neden Önemlidir?
2. SQL’in Tarihçesi ve Gelişimi
3. İlişkisel Cebir: SQL’in Matematiksel Temeli
4. SQL Komutlarının Yaşam Döngüsü
5. SQL Komut Türleri
Veri Tanımlama Dili (DDL – Data Definition Language)
Veri İşleme Dili (DML – Data Manipulation Language)
Veri Sorgulama Dili (DQL – Data Query Language)
Veri Kontrol Dili (DCL – Data Control Language)
Görünüm Tanımlama Dili (VDL – View Definition Language)
6. Örneklerle SQL ve İlişkisel Cebir
7. Sorularınız
Yapısal Sorgulama Dili (SQL)
🧠 15.1. Giriş: SQL Nedir ve Neden Önemlidir?
SQL (Structure Query Language – Yapısal Sorgulama Dili), ilişkisel veritabanı yönetim
sistemlerinde (VTYS) verilerin tanımlanması, işlenmesi, sorgulanması ve yönetilmesi
amacıyla kullanılan standart bir bilgisayar dilidir.
🧠 Hatırlatma: SQL, sadece bir programlama dili değildir; aynı zamanda
veriyle iletişim kurmak için kullanılan yapısal bir araçtır.
Bu dil sayesinde:
Tablolar arasında ilişkiler kurabilir,
Veri ekleyebilir, güncelleyebilir, silebilir,
Karmaşık sorgularla raporlar oluşturabilirsiniz.
Bu bölümde kullanacağımız örnek veritabanı: sı[Link]
Bu veritabanı, MS Access 2016 ile oluşturulmuş olup, ANSI-92 SQL standardını
desteklemektedir.
Kullanmak için:
MS Access → Araçlar → Seçenekler → Tablolar/Sorgular → SQL Server Uyumlu (ANSI-92)
seçeneğini aktif hale getirin.
🧠 Şekil 15.1’de bu veritabanındaki tablolar arasındaki ilişkiler görsel olarak
sunulmuştur.
🧠 15.2. SQL’in Tarihçesi ve Gelişimi
SQL’in temelleri 1970’li yıllara dayanır. IBM’de çalışan Edgar F. Codd, ilişkisel veri modelini
ortaya attıktan sonra, bu modelin sorgulanması için bir dile ihtiyaç duyuldu. Bu ihtiyaç
doğrultusunda:
1974 yılında IBM tarafından SEQUEL adlı ilk sorgulama dili geliştirildi.
Daha sonra bu dil SQL adını aldı.
1986 yılında ANSI (American National Standards Institute) tarafından standart
hale getirildi.
1987 yılında da ISO (International Standards Organization) tarafından uluslararası
standart olarak kabul edildi.
🧠 Günümüzde yüzlerce farklı VTYS (MySQL, PostgreSQL, MS SQL Server,
Oracle, SQLite vb.) bu standardı temel alarak kendi SQL uzantılarını
geliştirmiştir.
🧠 15.3. İlişkisel Cebir: SQL’in Matematiksel Temeli
SQL, sadece bir yazılım dili değil; aynı zamanda matematiksel bir temele dayanır. Bu temel
İlişkisel Cebir (Relational Algebra) ile sağlanır.
🧠 İlişkisel Cebir, verilerin nasıl birleştirileceğini, seçileceğini, filtre
edileceğini ve dönüştürüleceğini tanımlayan matematiksel bir modeldir.
Temel İlişkisel Cebir Operasyonları:
Operasyon Sembol Açıklama
Birleşim ∪ İki kümenin tüm elemanlarını içeren yeni küme
Kesişim ∩ Her iki kümede de ortak olan elemanlar
Fark − Bir kümede olup diğerinde olmayan elemanlar
Dekart Çarpımı × İki tablonun tüm olası satır kombinasyonları
Seçim σ Belirli bir koşulu sağlayan satırların seçilmesi
İzdüşüm π Belirli sütunların seçilmesi
Doğal Birleşim ⋈ Ortak niteliklere göre tabloların birleştirilmesi
Bölme ÷ Bir kümenin başka bir küme tarafından bölünmesi
🧠 Bu operasyonlar SQL’deki SELECT, JOIN, WHERE, PROJECT gibi ifadelerin
temelini oluşturur.
🧠 15.4. SQL Komutlarının Yaşam Döngüsü
SQL komutu çalıştırıldığında şu aşamalardan geçer:
1. Sorgu Yazımı → Kullanıcı SQL komutunu yazar
2. Ayrıştırma (Parsing) → VTYS, komutu parçalar ve anlamlandırır
3. Anlamsal Kontrol → Tablo ve sütun isimleri kontrol edilir
4. Sorgu Optimizasyonu → En hızlı sonucu verecek şekilde yeniden düzenlenir
5. Sorgu Yürütme Planı → VTYS’nin izleyeceği yol haritası oluşturulur
6. Veriye Erişim ve Sonuç Döndürme → Veri işlenir ve kullanıcıya sunulur
🧠 Şekil 15.9, bu yaşam döngüsünü görsel olarak açıklamaktadır.
🧠 15.5. SQL Komut Türleri
SQL komutları işlevlerine göre 5 ana gruba ayrılır:
🔹 1. Veri Tanımlama Dili (DDL – Data Definition Language)
Veritabanı yapılarını oluşturmak ve yönetmek için kullanılır.
Komut Açıklama
CREATE Yeni tablo, görünüm veya veritabanı oluşturur
DROP Var olan tabloyu veya yapıyı siler
ALTER Tablo yapısını değiştirir (sütun ekler, siler, tür değiştirir)
🔹 2. Veri İşleme Dili (DML – Data Manipulation Language)
Veritabanındaki verileri eklemek, güncellemek ve silmek için kullanılır.
Komut Açıklama
INSERT Tabloya yeni veri ekler
UPDATE Mevcut veriyi günceller
DELETE Veriyi tablodan siler
🔹 3. Veri Sorgulama Dili (DQL – Data Query Language)
Veritabanından veri çekmek için kullanılır.
Komut Açıklama
SELECT Tablodan istenilen verileri çeker
🔹 4. Veri Kontrol Dili (DCL – Data Control Language)
Veri güvenliği ve erişim kontrolü için kullanılır.
Komut Açıklama
GRANT Kullanıcıya yetki verir
REVOKE Kullanıcının yetkisini alır
🔹 5. Görünüm Tanımlama Dili (VDL – View Definition Language)
Sanal tablolar (view) oluşturmak için kullanılır.
Komut Açıklama
CREATE VIEW Sanal tablo oluşturur
DROP VIEW Sanal tabloyu siler
🧠 Örneklerle SQL ve İlişkisel Cebir
🔸 Örnek 15.1 – Dekart Çarpımı
Şekil 15.2 öğrenci ve öğretmen Tabloları Anlık Durumu
öğrenci ve öğretmen tablolarının dekart çarpımı alındığında, her öğrenci ile her
öğretmenin birleştiği bir tablo elde edilir.
🧠 Şekil 15.3, bu çarpımın sonucunu göstermektedir.
🔸 Örnek 15.2 – Doğal Birleşim (Natural Join)
Şekil 15.4 sınavokumaları ve okumalar Tablosu Anlık Durumu
🧠 Şekil 15.6, bu birleşim sonucu oluşan tabloyu içerir.
sınavOkumaları ve okumalar tabloları okumaKodu = kod koşuluyla birleştirildiğinde,
sınavların hangi okumaya ait olduğu görülür.
🔸 Örnek 15.3 – İzdüşüm (Projection)
π kod, ad (okumalar) ifadesi, okumalar tablosundan sadece kod ve ad sütunlarını seçer.
🧠 Şekil 15.7, bu işlem sonucu oluşan tabloyu gösterir.
🔸 Örnek 15.4 – Seçim (Selection)
σ ağırlıkPuanı = 1 (okumalar) ifadesi, sadece ağırlık puanı 1 olan okumaları getirir.
🧠 Şekil 15.8, bu seçim sonucu oluşan tabloyu içerir.
🧠 Bölüm Sonu: Kavram Tekrarı
Kavuzım SQL Karşılığı Açıklama
Seçim (σ) WHERE Koşula uyan satırları getirir
İzdüşüm (π) SELECT sütun1, Belirli sütunları seçer
sütun2
Birleşim (∪) UNION İki sorgu sonucunu birleştirir
Kesişim (∩) INTERSECT Ortak satırları getirir
Fark (−) EXCEPT İlk sorguda olup ikincisinde
olmayanlar
Doğal Birleşim JOIN Ortak sütuna göre birleştirir
(⋈)
🧠 Bölüm Sonu: Problemler
Bu bölümdeki problemler, öğrencilerin ilişkisel cebir ve SQL arasındaki
bağlantıyı kurabilmeleri için tasarlanmıştır. Çözümleri için sı[Link]
veritabanı kullanılacaktır.
🧠 Problem 1: İlişkisel Cebir İfadesinin SQL Sorgusuna
Dönüştürülmesi
🔖 İfade:
π başlık, yıl (σ süre>120 (videolar) ∩ σ stüdyo='fox' (videolar))
🔍 Açıklama:
Bu ifade, videolar tablosunda:
süresi 120’den büyük olan ve
stüdyosu 'fox' olan videoların başlık ve yıl bilgilerini getirir.
🧠 SQL Karşılığı:
sql
SELECT başlık, yıl
FROM videolar
WHERE süre > 120 AND stüdyo = 'fox';
🧠 Problem 2: Verilen Sorguların İlişkisel Cebir
Gösterimleri
Aşağıdaki sorguları ilişkisel cebir kullanarak ifade edelim. Varsayılan tablolar:
kullanıcılar, öğrenciler, öğretmenler, sınavlar, öğrenciSınavları gibi ilişkisel
tablolar olduğunu kabul ediyoruz.
🔹 a. Şifresi tanımlanmamış olan kullanıcıların listesini bulunuz.
🧠 İlişkisel Cebir:
σ şifre IS NULL (kullanıcılar)
🧠 SQL:
sql
SELECT *
FROM kullanıcılar
WHERE şifre IS NULL;
🔹 b. Öğrenci olan kullanıcıların listesini bulunuz.
🧠 İlişkisel Cebir:
π kullanıcıAdı, ad, soyad (kullanıcılar ⋈ kullanıcıID = öğrenciID (öğrenciler))
🧠 SQL:
sql
SELECT [Link]ıcıAdı, [Link], [Link]
FROM kullanıcılar k
JOIN öğrenciler o ON [Link]ıcıID = o.öğrenciID;
🔹 c. Öğretmen olan kullanıcıların listesini bulunuz.
🧠 İlişkisel Cebir:
π kullanıcıAdı, ad, soyad (kullanıcılar ⋈ kullanıcıID = öğretmenID
(öğretmenler))
🧠 SQL:
sql
SELECT [Link]ıcıAdı, [Link], [Link]
FROM kullanıcılar k
JOIN öğretmenler o ON [Link]ıcıID = o.öğretmenID;
🔹 d. Öğrencilerin aldıkları sınavların listesini bulunuz.
🧠 İlişkisel Cebir:
π öğrenciID, sınavID, tarih, puan (öğrenciSınavları)
🧠 İsterseniz öğrenci adı ve sınav adı da eklenerek genişletilebilir: π
öğ[Link], sı[Link], tarih, puan (öğrenciSınavları ⋈ öğrenciID =
öğrenciler.öğrenciID ⋈ sınavID = sınavlar.sınavID)
🧠 SQL:
sql
SELECT [Link] AS öğrenciAdı, [Link] AS sınavAdı, [Link], [Link]
FROM öğrenciSınavları os
JOIN öğrenciler o ON os.öğrenciID = o.öğrenciID
JOIN sınavlar s ON os.sınavID = s.sınavID;
🧠 Problem 3: SQL Komutlarını İşlevlerine Göre
Gruplayınız
Komut Türü Açıklama
ALTER DDL (Veri Tanımlama) Tablo yapısını değiştirir
CREATE DDL Yeni tablo, veritabanı oluşturur
CREATE VIEW VDL (Görünüm Tanımlama) Sanal tablo (view) oluşturur
DELETE DML (Veri İşleme) Tablodan veri siler
DROP DDL Tablo veya yapıyı tamamen siler
Komut Türü Açıklama
GRANT DCL (Veri Kontrol) Kullanıcıya yetki verir
INSERT DML Tabloya veri ekler
REVOKE DCL Kullanıcının yetkisini alır
UPDATE DML Tablodaki veriyi günceller
🧠 Not: Bu komutların her biri, VTYS içinde farklı bir amaca hizmet eder.
Örneğin:
DDL → Veri yapısını yönetir (tablo oluşturma, silme, değiştirme)
DML → Veri üzerinde işlem yapar (ekleme, güncelleme, silme)
DCL → Güvenlik ve erişim kontrolünü sağlar
VDL → Sanal tablolar (view) oluşturur
🧠 Sonuç
Bu problemler, ilişkisel cebir ve SQL arasındaki doğrudan bağlantıyı kurmanıza yardımcı
olmak için tasarlanmıştır. SQL öğrenirken, her komutu matematiksel bir karşılığı olduğunu
düşünerek öğrenmek, hem kavramsal hem de uygulamalı düzeyde daha kalıcı olmasını
sağlar.
text
1. Giriş
2. Basit SELECT Komutu Yapısı
3. Aritmetik Operatörlerin Kullanımı
4. Tablodaki Her Şeyin Listelenmesi
5. AS Anahtar Kelimesi
6. INTO Anahtar Kelimesi
7. DISTINCT Anahtar Kelimesi
8. Sorularınız
18.1 Giriş 🧠
Veri Sorgulama Dili (Data Query Language – DQL) üç temel işlem grubu altında incelenir:
İşlem Türü Açıklama
Selection Tablodan belirli satırların seçilmesi
Projection Tablodan belirli sütunların seçilmesi
Join İki veya daha fazla tablonun birleştirilmesi
Bu işlemlerin tümü SELECT komutu ile gerçekleştirilir. Bu bölümde SELECT’in temel yapısı
ele alınacaktır.
18.2 Basit SELECT Komutu Yapısı 🧠
Genel Yapı:
sql
SELECT [DISTINCT] nitelikAdi [AS geciciAd]
FROM tabloAdi;
SELECT: Hangi sütunların listeleneceğini belirtir.
FROM: Hangi tablodan veri çekileceğini belirtir.
AS: Sütuna geçici isim vermek için kullanılır.
DISTINCT: Tekrar eden kayıtları çıkarır.
🔍 Not: SELECT ve FROM zorunludur, diğerleri *opsiyoneldir.
Örnek 18.1 – Tek Sütun Listeleme
sql
SELECT ad
FROM kullanici;
🖼️ Şekil 3: Sadece “ad” sütunu listelenmiştir.
Örnek 18.2 – Birden Fazla Sütun Listeleme
sql
SELECT ad, soyad
FROM kullanici;
🖼️ Şekil 4: “ad” ve “soyad” sütunları virgülle ayrılarak yazılır.
🔍 Sütun sırası SELECT’teki sıraya göre belirlenir.
18.3 Aritmetik Operatörlerin Kullanımı 🧠
Operatör Önceliği:
1. Parantez içi
2. Çarpma / Bölme
3. Toplama / Çıkarma
Örnek 18.3 – %20 Zam Hesabı
sql
SELECT kod, agirlik, agirlik + agirlik * 0.2 AS yeniAgirlik, ad
FROM okumalar;
🖼️ Şekil 6: Üçüncü sütun otomatik isimlendirilir (Expr!002).
🔍 NULL değer varsa sonuç NULL olur.
Örnek 18.4 – Parantez Kullanımı
sql
SELECT kod, agirlik, (agirlik + agirlik) * 0.2 AS yeniAgirlik, ad
FROM okumalar;
🖼️ Şekil 7: Parantez önceliği değiştirir.
Örnek 18.5 – Net Hesabı (3 Yanlış 1 Doğru Götürür)
sql
SELECT ogrenciKodu, tdogru - (tyanlis / 3) AS net
FROM ogrenciSinavlari;
🖼️ Şekil 8: NULL değerler net sonucu NULL yapar.
🔍 Bu durum NVL(), COALESCE() gibi fonksiyonlarla çözülür (Bkz. Bölüm 21).
Örnek 18.6 – String Birleştirme
sql
SELECT ad + ' ' + soyad AS tamAd
FROM kullanici;
🖼️ Şekil 10: + operatörü string birleştirmede kullanılabilir.
18.4 Tablodaki Her Şeyin Listelenmesi 🧠
Örnek 18.7 – Tüm Sütunlar
sql
SELECT *
FROM sinavlar;
🖼️ Şekil 11: Tüm sütunlar joker (*) karakteri ile çekilir.
⚠️ Büyük veri tabanlarında bu sorgu kilitlenmeye neden olabilir.
18.5 AS Anahtar Kelimesi 🧠
Kullanım Amacı:
Sütuna geçici başlık vermek
Boşluk içeren adlar için köşeli parantez kullanılır
Örnek 18.8
sql
SELECT kod AS [Sınav Kodu], ad AS sinavAdi
FROM sinavlar;
🖼️ Şekil 12: Başlıklar geçicidir, tablo yapısı değişmez.
Örnek 18.9 – Hesaplanan Alan
sql
SELECT kod, agirlik, (agirlik + agirlik) * 0.2 AS ARTIRILMIS, ad
FROM okumalar;
🖼️ Şekil 13: Hesaplanan sütun ARTIRILMIS olarak görünür.
18.6 INTO Anahtar Kelimesi 🧠
Amaç:
Sorgu sonucunu yeni tabloya kopyalamak
Hedef tablo yoksa oluşturulur, varsa içeriği değiştirilir
Örnek 18.10
sql
SELECT ad, yer
INTO deneme
FROM sinavlar;
🔍 deneme tablosu otomatik oluşturulur veya üzerine yazılır.
18.7 DISTINCT Anahtar Kelimesi 🧠
Amaç:
Tekrar eden kayıtları çıkarır, benzersiz değerleri listeler
Örnek 18.11
sql
SELECT DISTINCT ogretmenKodu AS ogretmen
FROM hazirlayan;
🖼️ Şekil 14: Yalnızca farklı öğretmen kodları listelenir.
🔍 Problemler – Film Veri Tabanı ([Link])
🖼️ Şekil 15: Tablo ilişkileri diyagramı (ERD) referans alınarak çözülmelidir.
Soru SQL Sorgusu
1 Filmlerin adlarını ve alış fiyatlarını listeleyin.
2 Filmlerin alış fiyatlarına %10 zam yapıldığında yeni fiyatları gösterin.
3 Tüm artistleri listeleyin.
Soru SQL Sorgusu
4 Artistlerin doğum tarihini “DoğumTa” başlığı altında listeleyin.
5 meslekler tablosundaki verileri meslekler2 tablosuna kopyalayın.
6 Kullanıcıların bulundukları şehirleri tekrar etmeyecek şekilde listeleyin.
🧠 Özet – Hızlı Bakış Tablosu
Komut / Terim Görevi
SELECT Sütun seçimi
FROM Tablo kaynağı
AS Geçici isim
DISTINCT Tekrarları sil
INTO Yeni tabloya kopyala
* Tüm sütunlar
NULL Hesaplamayı bozar
Parantez Öncelik değiştirir