SQL Temelleri: Veritabanı Sorgulamanın Anahtarları
Günümüzün veri odaklı dünyasında, veritabanları iş süreçlerinin ve uygulamaların kalbinde yer almaktadır. Bu veritabanlarıyla etkileşim kurmanın ve onlardan anlamlı bilgi çıkarmanın en yaygın ve güçlü yolu Yapısal Sorgu Dili veya daha bilinen adıyla SQL (Structured Query Language) kullanmaktır. Bu rehber, SQL'in temel prensiplerini ve en çok kullanılan komutlarını adım adım açıklayarak, veritabanı dünyasına sağlam bir giriş yapmanızı sağlamayı amaçlamaktadır.
SQL Nedir?
SQL, ilişkisel veritabanlarını yönetmek ve manipüle etmek için tasarlanmış standart bir dildir. Veritabanı yöneticileri, geliştiriciler ve veri analistleri, veritabanında veri oluşturmak, okumak, güncellemek ve silmek (CRUD işlemleri) için SQL kullanır. SQL, 1970'lerde IBM'de geliştirilmiş olup, günümüzde Oracle, MySQL, PostgreSQL, SQL Server gibi popüler veritabanı yönetim sistemlerinin tamamında desteklenmektedir.
SQL Komut Kategorileri
SQL komutları genellikle birkaç ana kategoriye ayrılır:
Bu rehberde, özellikle DDL ve DML komutlarına odaklanacağız.
DDL Komutları: Veritabanı Yapılarını Oluşturma ve Yönetme
1. CREATE TABLE: Yeni bir tablo oluşturmak için kullanılır.
Yukarıdaki örnekte `Ogrenciler` adında bir tablo oluşturduk. `OgrenciID` sütunu birincil anahtar (Primary Key) olarak tanımlanmıştır. `VARCHAR` metin verileri, `INT` tam sayılar ve `DATE`/`DATETIME` tarih/saat verileri için kullanılır. `NOT NULL` o sütunun boş bırakılamayacağını belirtir.
2. ALTER TABLE: Mevcut bir tablonun yapısını değiştirmek için kullanılır.
3. DROP TABLE: Bir tabloyu ve içindeki tüm verileri kalıcı olarak silmek için kullanılır. Dikkatli kullanılmalıdır!
DML Komutları: Verilerle Çalışma
1. INSERT INTO: Bir tabloya yeni veri eklemek için kullanılır.
İlk örnekte sütun adlarını belirterek, ikinci örnekte ise tüm sütunlara sırasıyla veri ekleyerek kullanılmıştır.
2. SELECT: Bir tablodan veri çekmek için kullanılır. SQL'in en sık kullanılan komutudur.
3. UPDATE: Mevcut bir tablodaki verileri güncellemek için kullanılır. WHERE koşulu ile kullanılmadığında, tablodaki tüm satırları güncelleyebilir, bu yüzden dikkatli olunmalıdır!
4. DELETE FROM: Bir tablodan veri silmek için kullanılır. WHERE koşulu ile kullanılmadığında, tablodaki tüm satırları silebilir!
Aggregate Fonksiyonları
Aggregate fonksiyonları, bir sütundaki değerler üzerinde hesaplamalar yapar ve tek bir sonuç döndürür. En yaygın olanları:
(Not: `DATEDIFF` fonksiyonu veritabanına göre değişebilir, bu genel bir örnek)
GROUP BY ve HAVING
GROUP BY ifadesi, sonuç kümesini belirli bir veya daha fazla sütuna göre gruplandırmak ve bu gruplar üzerinde aggregate fonksiyonları uygulamak için kullanılır.
HAVING ifadesi, GROUP BY ile oluşturulan grupları filtrelemek için kullanılır, WHERE ifadesinin gruplar üzerinde çalışan versiyonudur.
JOIN Operasyonları (Kısaca)
İlişkisel veritabanlarında veriler genellikle birden fazla tabloya dağılmıştır. Bu tabloları birleştirmek ve ilişkili verileri çekmek için JOIN operasyonları kullanılır. En yaygın JOIN türleri şunlardır:
Bu örnekte, `Ogrenciler`, `DersKayitlari` ve `Dersler` tablolarını birleştirerek öğrencilerin aldıkları dersleri listeledik.
Alt Sorgular (Subqueries)
Bir SQL sorgusunun başka bir SQL sorgusunun içine gömülmesiyle alt sorgular oluşturulur. Genellikle SELECT, INSERT, UPDATE ve DELETE deyimleriyle birlikte kullanılırlar.
(Not: Bu alt sorgu örneği tarih türüne göre yaş hesaplamada karmaşık olabilir, ancak temel mantığı gösterir.)
İndeksler ve Performans (Kısaca)
İndeksler, veritabanı tablolarından veri alma hızını artırmak için kullanılır. Tıpkı bir kitabın dizini gibi, belirli sütunlar üzerinde hızlı arama yapılmasını sağlarlar. Ancak, indeksler veri ekleme, güncelleme ve silme işlemlerinin maliyetini artırabilir, bu yüzden dikkatli tasarlanmaları gerekir.
Özet
Bu kapsamlı rehber, SQL'in temel taşlarını, yani DDL ve DML komutlarını, aggregate fonksiyonları, GROUP BY, HAVING ve JOIN operasyonlarının temellerini açıklamıştır. Veritabanı yönetim sistemleriyle etkileşim kurmak için bu temel bilgilere sahip olmak kritik öneme sahiptir. SQL öğrenmek, sadece bir dil öğrenmek değil, aynı zamanda veri mantığını ve veritabanı tasarım prensiplerini anlamaktır. Pratik yaparak ve farklı senaryolar üzerinde çalışarak SQL bilginizi pekiştirebilirsiniz.
Daha fazla bilgi ve pratik için W3Schools SQL Tutorial gibi kaynakları ziyaret edebilirsiniz.
Günümüzün veri odaklı dünyasında, veritabanları iş süreçlerinin ve uygulamaların kalbinde yer almaktadır. Bu veritabanlarıyla etkileşim kurmanın ve onlardan anlamlı bilgi çıkarmanın en yaygın ve güçlü yolu Yapısal Sorgu Dili veya daha bilinen adıyla SQL (Structured Query Language) kullanmaktır. Bu rehber, SQL'in temel prensiplerini ve en çok kullanılan komutlarını adım adım açıklayarak, veritabanı dünyasına sağlam bir giriş yapmanızı sağlamayı amaçlamaktadır.
SQL Nedir?
SQL, ilişkisel veritabanlarını yönetmek ve manipüle etmek için tasarlanmış standart bir dildir. Veritabanı yöneticileri, geliştiriciler ve veri analistleri, veritabanında veri oluşturmak, okumak, güncellemek ve silmek (CRUD işlemleri) için SQL kullanır. SQL, 1970'lerde IBM'de geliştirilmiş olup, günümüzde Oracle, MySQL, PostgreSQL, SQL Server gibi popüler veritabanı yönetim sistemlerinin tamamında desteklenmektedir.
“SQL, bir veritabanıyla konuşmanın evrensel dilidir.”
SQL Komut Kategorileri
SQL komutları genellikle birkaç ana kategoriye ayrılır:
- Veri Tanımlama Dili (DDL - Data Definition Language): Veritabanı yapılarını (tablolar, indeksler, görünümler vb.) oluşturmak, değiştirmek veya silmek için kullanılır.
- Veri İşleme Dili (DML - Data Manipulation Language): Veritabanındaki verileri sorgulamak, eklemek, güncellemek veya silmek için kullanılır.
- Veri Kontrol Dili (DCL - Data Control Language): Veritabanı kullanıcılarına izinler vermek veya kaldırmak için kullanılır.
- İşlem Kontrol Dili (TCL - Transaction Control Language): İşlemleri yönetmek için kullanılır (COMMIT, ROLLBACK, SAVEPOINT).
Bu rehberde, özellikle DDL ve DML komutlarına odaklanacağız.
DDL Komutları: Veritabanı Yapılarını Oluşturma ve Yönetme
1. CREATE TABLE: Yeni bir tablo oluşturmak için kullanılır.
Kod:
CREATE TABLE Ogrenciler (
OgrenciID INT PRIMARY KEY,
Ad VARCHAR(50) NOT NULL,
Soyad VARCHAR(50) NOT NULL,
DogumTarihi DATE,
KayitTarihi DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. ALTER TABLE: Mevcut bir tablonun yapısını değiştirmek için kullanılır.
Kod:
ALTER TABLE Ogrenciler
ADD COLUMN Eposta VARCHAR(100);
ALTER TABLE Ogrenciler
DROP COLUMN KayitTarihi;
ALTER TABLE Ogrenciler
ALTER COLUMN Ad VARCHAR(75);
3. DROP TABLE: Bir tabloyu ve içindeki tüm verileri kalıcı olarak silmek için kullanılır. Dikkatli kullanılmalıdır!
Kod:
DROP TABLE Ogrenciler;
DML Komutları: Verilerle Çalışma
1. INSERT INTO: Bir tabloya yeni veri eklemek için kullanılır.
Kod:
INSERT INTO Ogrenciler (OgrenciID, Ad, Soyad, DogumTarihi, Eposta)
VALUES (1, 'Ayşe', 'Yılmaz', '2000-01-15', 'ayse.yilmaz@example.com');
INSERT INTO Ogrenciler VALUES (2, 'Mehmet', 'Demir', '1999-05-20', 'mehmet.demir@example.com');
2. SELECT: Bir tablodan veri çekmek için kullanılır. SQL'in en sık kullanılan komutudur.
- Tüm Sütunları Seçme:
Kod:SELECT * FROM Ogrenciler;
- Belirli Sütunları Seçme:
Kod:SELECT Ad, Soyad, Eposta FROM Ogrenciler;
- WHERE Koşulu ile Filtreleme: Belirli kriterlere uyan satırları seçmek için kullanılır.
Kod:SELECT * FROM Ogrenciler WHERE DogumTarihi < '2000-01-01'; SELECT Ad, Soyad FROM Ogrenciler WHERE Soyad = 'Yılmaz' AND OgrenciID = 1;
- ORDER BY ile Sıralama: Sonuç kümesini belirli bir sütuna göre artan (ASC) veya azalan (DESC) sırada sıralamak için kullanılır.
Kod:SELECT Ad, Soyad, DogumTarihi FROM Ogrenciler ORDER BY DogumTarihi DESC; -- En yaşlıdan en gence SELECT Ad, Soyad FROM Ogrenciler ORDER BY Soyad ASC, Ad ASC; -- Soyada göre, aynı soyad içinde ada göre sırala
- LIMIT (veya TOP/FETCH NEXT) ile Sınırlandırma: Belirli sayıda satır döndürmek için kullanılır (Veritabanı sistemine göre farklılık gösterebilir: MySQL/PostgreSQL için LIMIT, SQL Server için TOP/FETCH NEXT).
Kod:SELECT * FROM Ogrenciler ORDER BY OgrenciID LIMIT 5; -- İlk 5 öğrenciyi getir
3. UPDATE: Mevcut bir tablodaki verileri güncellemek için kullanılır. WHERE koşulu ile kullanılmadığında, tablodaki tüm satırları güncelleyebilir, bu yüzden dikkatli olunmalıdır!
Kod:
UPDATE Ogrenciler
SET Eposta = 'ayse.yeni@example.com'
WHERE OgrenciID = 1;
UPDATE Ogrenciler
SET DogumTarihi = '1998-10-10'
WHERE Ad = 'Mehmet' AND Soyad = 'Demir';
4. DELETE FROM: Bir tablodan veri silmek için kullanılır. WHERE koşulu ile kullanılmadığında, tablodaki tüm satırları silebilir!
Kod:
DELETE FROM Ogrenciler
WHERE OgrenciID = 2;
DELETE FROM Ogrenciler
WHERE DogumTarihi < '1999-01-01';
Aggregate Fonksiyonları
Aggregate fonksiyonları, bir sütundaki değerler üzerinde hesaplamalar yapar ve tek bir sonuç döndürür. En yaygın olanları:
- COUNT(): Satır sayısını döndürür.
Kod:SELECT COUNT(*) FROM Ogrenciler; -- Tablodaki toplam öğrenci sayısı SELECT COUNT(Eposta) FROM Ogrenciler; -- E-postası olan öğrenci sayısı (NULL'ları saymaz)
- SUM(): Sayısal bir sütundaki değerlerin toplamını döndürür.
- AVG(): Sayısal bir sütundaki değerlerin ortalamasını döndürür.
- MIN(): Sayısal veya metinsel bir sütundaki en küçük değeri döndürür.
- MAX(): Sayısal veya metinsel bir sütundaki en büyük değeri döndürür.
Kod:
SELECT AVG(DATEDIFF(CURRENT_DATE, DogumTarihi)/365) AS OrtalamaYas FROM Ogrenciler; -- Öğrencilerin ortalama yaşı (yaklaşık)
SELECT MIN(DogumTarihi) AS EnGencOgrenciDogumTarihi FROM Ogrenciler;
GROUP BY ve HAVING
GROUP BY ifadesi, sonuç kümesini belirli bir veya daha fazla sütuna göre gruplandırmak ve bu gruplar üzerinde aggregate fonksiyonları uygulamak için kullanılır.
Kod:
-- Her bir doğum yılına göre öğrenci sayısını bulalım
SELECT YEAR(DogumTarihi) AS DogumYili, COUNT(OgrenciID) AS OgrenciSayisi
FROM Ogrenciler
GROUP BY DogumYili
ORDER BY DogumYili;
Kod:
-- 2'den fazla öğrencisi olan doğum yıllarını getir
SELECT YEAR(DogumTarihi) AS DogumYili, COUNT(OgrenciID) AS OgrenciSayisi
FROM Ogrenciler
GROUP BY DogumYili
HAVING COUNT(OgrenciID) > 2
ORDER BY DogumYili;
JOIN Operasyonları (Kısaca)
İlişkisel veritabanlarında veriler genellikle birden fazla tabloya dağılmıştır. Bu tabloları birleştirmek ve ilişkili verileri çekmek için JOIN operasyonları kullanılır. En yaygın JOIN türleri şunlardır:
- INNER JOIN: Her iki tabloda da eşleşen kaydı olan satırları döndürür.
- LEFT JOIN (LEFT OUTER JOIN): Sol tablodaki tüm kayıtları ve sağ tablodaki eşleşen kayıtları döndürür. Sağ tabloda eşleşme yoksa NULL döndürür.
- RIGHT JOIN (RIGHT OUTER JOIN): Sağ tablodaki tüm kayıtları ve sol tablodaki eşleşen kayıtları döndürür. Sol tabloda eşleşme yoksa NULL döndürür.
- FULL JOIN (FULL OUTER JOIN): Her iki tablodaki tüm kayıtları döndürür. Eşleşme olmayan yerlerde NULL doldurur.
Kod:
SELECT O.Ad, O.Soyad, D.DersAdi
FROM Ogrenciler O
INNER JOIN DersKayitlari DK ON O.OgrenciID = DK.OgrenciID
INNER JOIN Dersler D ON DK.DersID = D.DersID;
Alt Sorgular (Subqueries)
Bir SQL sorgusunun başka bir SQL sorgusunun içine gömülmesiyle alt sorgular oluşturulur. Genellikle SELECT, INSERT, UPDATE ve DELETE deyimleriyle birlikte kullanılırlar.
Kod:
-- Ortalama yaştan daha yaşlı olan öğrencileri bul
SELECT Ad, Soyad, DogumTarihi
FROM Ogrenciler
WHERE DogumTarihi < (SELECT AVG(DogumTarihi) FROM Ogrenciler);
İndeksler ve Performans (Kısaca)
İndeksler, veritabanı tablolarından veri alma hızını artırmak için kullanılır. Tıpkı bir kitabın dizini gibi, belirli sütunlar üzerinde hızlı arama yapılmasını sağlarlar. Ancak, indeksler veri ekleme, güncelleme ve silme işlemlerinin maliyetini artırabilir, bu yüzden dikkatli tasarlanmaları gerekir.
Özet
Bu kapsamlı rehber, SQL'in temel taşlarını, yani DDL ve DML komutlarını, aggregate fonksiyonları, GROUP BY, HAVING ve JOIN operasyonlarının temellerini açıklamıştır. Veritabanı yönetim sistemleriyle etkileşim kurmak için bu temel bilgilere sahip olmak kritik öneme sahiptir. SQL öğrenmek, sadece bir dil öğrenmek değil, aynı zamanda veri mantığını ve veritabanı tasarım prensiplerini anlamaktır. Pratik yaparak ve farklı senaryolar üzerinde çalışarak SQL bilginizi pekiştirebilirsiniz.
Daha fazla bilgi ve pratik için W3Schools SQL Tutorial gibi kaynakları ziyaret edebilirsiniz.