class PostgreSQL ve SQL Sorguları: Temel ve İleri Düzey Komutlar extends Post

@created_at( "2025-01-20 07:00" )
# ## PostgreSQL Nedir? PostgreSQL, açık kaynaklı ve güçlü bir ilişkisel veritabanı yönetim sistemidir (RDBMS). SQL (Structured Query Language) kullanarak veriler üzerinde işlem yapmamıza olanak tanır. Ayrıca JSON, XML gibi veri tiplerini de destekler ve genişletilebilir yapısıyla dikkat çeker. --- ## Temel SQL Komutları ### 1. **Veritabanı Yönetimi Komutları** #### Veritabanı Oluşturma:
CREATE DATABASE ogrenci_veritabani;
Bu komut "ogrenci_veritabani" adında bir veritabanı oluşturur. #### Veritabanına Bağlanma:
\c ogrenci_veritabani;
pgAdmin'de bir veritabanına bağlanmak için sağ tıklayıp "Connect" seçeneğini kullanabilirsiniz. #### Veritabanı Silme:
DROP DATABASE ogrenci_veritabani;
--- ### 2. **Tablo Yönetimi Komutları** #### Tablo Oluşturma:
CREATE TABLE ogrenciler (
    id SERIAL PRIMARY KEY,
    ad VARCHAR(100) NOT NULL,
    soyad VARCHAR(100) NOT NULL,
    yas INTEGER,
    kayit_tarihi DATE DEFAULT CURRENT_DATE
);
- **SERIAL**: Otomatik artan birincil anahtar oluşturur. - **DEFAULT**: Varsayılan bir değer ayarlar. #### Tabloya Sütun Ekleme:
ALTER TABLE ogrenciler ADD COLUMN email VARCHAR(255);
#### Tabloya Sütun Silme:
ALTER TABLE ogrenciler DROP COLUMN email;
#### Tabloyu Silme:
DROP TABLE ogrenciler;
--- ### 3. **Veri İşleme Komutları** #### Veri Ekleme:
INSERT INTO ogrenciler (ad, soyad, yas)
VALUES ('Ahmet', 'Yılmaz', 20);
#### Çoklu Veri Ekleme:
INSERT INTO ogrenciler (ad, soyad, yas)
VALUES
('Ayşe', 'Kara', 22),
('Mehmet', 'Çelik', 23);
#### Veri Güncelleme:
UPDATE ogrenciler
SET yas = 21
WHERE ad = 'Ahmet';
#### Veri Silme:
DELETE FROM ogrenciler
WHERE soyad = 'Kara';
--- ### 4. **Veri Sorgulama Komutları** #### Tüm Verileri Getirme:
SELECT * FROM ogrenciler;
#### Belirli Sütunları Getirme:
SELECT ad, soyad FROM ogrenciler;
#### Koşullu Sorgular:
SELECT * FROM ogrenciler
WHERE yas > 20;
#### Sıralama:
SELECT * FROM ogrenciler
ORDER BY yas DESC;
- **ASC**: Artan sıralama (varsayılan). - **DESC**: Azalan sıralama. #### Veri Sayısını Alma:
SELECT COUNT(*) FROM ogrenciler;
#### Gruplama:
SELECT yas, COUNT(*) FROM ogrenciler
GROUP BY yas;
#### Like ile Arama:
SELECT * FROM ogrenciler
WHERE ad LIKE 'A%';
- **`%`**: Sıfır veya daha fazla karakter. - **`_`**: Tek bir karakter. --- ## İleri Düzey Komutlar ### 1. **Join (Birleştirme)** #### İç Birleştirme (Inner Join):
SELECT o.ad, o.soyad, s.ders_adi
FROM ogrenciler o
INNER JOIN sinavlar s ON o.id = s.ogrenci_id;
- Bu sorgu, "ogrenciler" tablosu ile "sinavlar" tablosunu "id" ve "ogrenci_id" üzerinden birleştirir. #### Sol Birleştirme (Left Join):
SELECT o.ad, o.soyad, s.ders_adi
FROM ogrenciler o
LEFT JOIN sinavlar s ON o.id = s.ogrenci_id;
### 2. **Alt Sorgular (Subqueries)**
SELECT ad, soyad
FROM ogrenciler
WHERE yas = (SELECT MAX(yas) FROM ogrenciler);
### 3. **Trigger (Tetikleyici)** #### Trigger Fonksiyonu:
CREATE OR REPLACE FUNCTION log_ekle()
RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO log_tablosu (islem, tarih)
    VALUES ('Yeni öğrenci eklendi', NOW());
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
#### Trigger Oluşturma:
CREATE TRIGGER yeni_ogrenci_ekleme
AFTER INSERT ON ogrenciler
FOR EACH ROW
EXECUTE FUNCTION log_ekle();
### 4. **Görünümler (Views)** #### Görünüm Oluşturma:
CREATE VIEW aktif_ogrenciler AS
SELECT * FROM ogrenciler
WHERE yas > 18;
#### Görünüm Kullanma:
SELECT * FROM aktif_ogrenciler;
--- ## Performans İpuçları 1. **Dizin (Index) Kullanımı:** Sorgu performansını artırmak için dizin oluşturabilirsiniz:
CREATE INDEX idx_yas ON ogrenciler(yas);
2. **ANALYZE ve EXPLAIN Komutları:** Sorgu optimizasyonu için kullanılır:
EXPLAIN ANALYZE SELECT * FROM ogrenciler WHERE yas > 20;
3. **Tablo Bölümlendirme (Partitioning):** Büyük tabloları bölümlere ayırarak performansı artırabilirsiniz. ---