🏗️ Veri Mimarisinin Dört Ayağı: Oluşturmadan Sorgulamaya SQL Aşamaları

1. 🧱 Yapılandırma Aşaması (DDL - Data Definition Language)

Bu aşama, projenin temelini oluşturan veritabanının ve tabloların yapısını tanımladığımız yerdir.

A. Veritabanı Oluşturma

İlk olarak, tüm tablolarımızın içinde barınacağı çalışma alanını (veritabanını) oluştururuz.

  • Komut: CREATE DATABASE
    CREATE DATABASE ProjeVeriTabani;
    
  • Kullanım: Bu veritabanının aktif olarak kullanılacağını sisteme bildiririz.
    USE ProjeVeriTabani;
    

B. Tablo Yapılarını Oluşturma

Verileri organize edeceğimiz tabloları, her bir sütunun (alanın) veri tipini (metin, sayı, tarih) ve kısıtlamalarını (Primary Key, Not Null vb.) belirleyerek oluştururuz.

  • Komut: CREATE TABLE
    CREATE TABLE Musteriler (
        MusteriID INT PRIMARY KEY,
        Ad NVARCHAR(50) NOT NULL,
        Soyad NVARCHAR(50) NOT NULL,
        DogumTarihi DATE
    );
    

C. Yapıyı Değiştirme (Gerektiğinde)

Proje ilerledikçe, mevcut tablolara yeni sütunlar ekleme veya mevcut sütunların özelliklerini değiştirme ihtiyacı doğabilir.

  • Komut: ALTER TABLE
    ALTER TABLE Musteriler
    ADD EpostaAdresi NVARCHAR(100); -- Yeni bir sütun ekler
    

2. 📝 Veri Yönetimi Aşaması (DML - Data Manipulation Language)

Yapı hazırlandıktan sonra sıra, içine gerçek veriyi doldurmaya, yönetmeye ve güncel tutmaya gelir.

A. Veri Ekleme

Yeni kayıtları, oluşturduğumuz tablonun yapısına uygun olarak sisteme dahil ederiz.

  • Komut: INSERT
    INSERT INTO Musteriler (MusteriID, Ad, Soyad, DogumTarihi)
    VALUES (1, 'Ali', 'Yılmaz', '1985-05-10');
    

B. Veri Güncelleme

Mevcut verilerdeki hataları düzeltmek veya güncel bilgileri (adres, telefon vb.) kaydetmek için kullanılır. WHERE koşulu burada anahtardır.

  • Komut: UPDATE
    UPDATE Musteriler
    SET Soyad = 'Yılmazer'
    WHERE MusteriID = 1; -- Sadece ID'si 1 olan kaydı günceller
    

C. Veri Silme

Artık gerekmeyen veya geçersiz hale gelen kayıtları sistemden temizleriz. Yine, WHERE koşulu ile yanlışlıkla tüm veriyi silmekten kaçınırız.

  • Komut: DELETE
    DELETE FROM Musteriler
    WHERE DogumTarihi < '1970-01-01'; -- Belirtilen tarihten önce doğanları siler
    

3. 📊 Veri Sorgulama Aşaması (DQL - Data Query Language)

Veritabanının en çok kullanılan ve en kritik aşamasıdır. Burası, ham veriden anlamlı bilgiye ulaştığımız yerdir.

A. Temel Sorgulama ve Filtreleme

Belirli bir tablodan veri çekme ve istenilen koşullara göre filtreleme.

  • Komut: SELECT ve WHERE
    SELECT Ad, Soyad, EpostaAdresi
    FROM Musteriler
    WHERE Ad = 'Ali';
    

B. Gruplama ve Özetleme

Verileri gruplayarak özet istatistikler (toplam, ortalama, adet) çıkarma.

  • Komut: GROUP BY
    SELECT COUNT(*) AS ToplamMusteriSayisi
    FROM Musteriler;
    

C. Tabloları Birleştirme (JOIN)

Birden fazla tabloyu, aralarındaki ilişkisel anahtarları (foreign key) kullanarak birleştirme ve tek bir sonuç kümesinde sunma.

  • Komut: JOIN
    SELECT M.Ad, S.SiparisTarihi
    FROM Musteriler AS M
    INNER JOIN Siparisler AS S ON M.MusteriID = S.MusteriID;
    
    (Müşteri adı ve yaptığı siparişin tarihini birleştirerek getirir.)

D. Sıralama

Sorgu sonucunu belirlenen sütunlara göre düzenli bir şekilde gösterme.

  • Komut: ORDER BY
    SELECT *
    FROM Musteriler
    ORDER BY Soyad ASC, Ad DESC; -- Önce soyada artan, sonra ada azalan sırala
    

4. 🔒 İzinler ve Kontrol Aşaması (DCL & TCL)

Bu aşama, veritabanının güvenliğini ve veri bütünlüğünü sağlayan kısımdır.

A. Yetkilendirme (DCL - Data Control Language)

Kimlerin hangi tabloya erişebileceğini ve hangi işlemleri (okuma, yazma vb.) yapabileceğini belirleme.

  • Komut: GRANT (Yetki verme) ve REVOKE (Yetki geri alma)
    GRANT SELECT ON Musteriler TO 'AnalistKullanicisi';
    

B. İşlem Yönetimi (TCL - Transaction Control Language)

Veritabanında yapılan bir dizi işlemin (transaction) başarılı bir şekilde tek bir bütün olarak kaydedilmesini veya başarısız olursa geri alınmasını sağlama.

  • Komut: COMMIT (Kalıcı kaydetme) ve ROLLBACK (Geri alma)
    BEGIN TRANSACTION; -- İşlemleri başlat
    UPDATE Stok SET Miktar = Miktar - 5 WHERE UrunID = 101;
    INSERT INTO SatisLog VALUES (...);
    -- Eğer her iki işlem de başarılıysa:
    COMMIT;
    -- Eğer bir hata oluşursa:
    ROLLBACK; -- Her şeyi başlangıç durumuna geri al