İçeriğe geç

SQL Cheatsheet: Temel ve İleri Seviye SQL Komutları Rehberi

T
Tolgahan
· · 0 dk okuma · 264 görüntülenme

SQL Cheatsheet: Temel ve İleri Seviye SQL Komutları Rehberi

SQL öğrenirken en çok ihtiyaç duyulan şey, "şu komutu nasıl yazıyorduk?" sorusuna hızlıca cevap bulmak. Bu rehber, [SQL Sıfırdan İleri Seviyeye](/kurslar/sql-sifirdan-ileri-seviyeye) kursumuzun tamamlayıcısı olarak hazırlandı. Temel SELECT'ten Window Functions'a, Transaction yönetiminden performans ipuçlarına kadar tüm SQL komutlarını örneklerle, kısa ve öz bir şekilde bulabileceğiniz kapsamlı bir kaynak.

Sayfayı yer imlerine ekle — sık sık döneceksin.


1. SELECT Temelleri

Veritabanından veri çekmenin başlangıç noktası. Her şey SELECT ile başlar.

-- Tüm sütunları getir
SELECT * FROM urunler;

-- Belirli sütunları getir
SELECT ad, fiyat, stok FROM urunler;

-- Tekrar eden değerleri ele (benzersiz kategoriler)
SELECT DISTINCT kategori FROM urunler;

-- Koşullu sorgulama
SELECT ad, fiyat FROM urunler WHERE fiyat > 100;

-- Sıralama (küçükten büyüğe)
SELECT ad, fiyat FROM urunler ORDER BY fiyat ASC;

-- Sıralama (büyükten küçüğe) + ilk 5 sonuç
SELECT ad, fiyat FROM urunler ORDER BY fiyat DESC LIMIT 5;

-- Takma ad (alias) kullanımı
SELECT ad AS urun_adi, fiyat * 1.20 AS kdv_dahil_fiyat FROM urunler;

💡 İpucu: Productionda SELECT * kullanma — sadece ihtiyacın olan sütunları çek. Performansı ciddi etkiler.


2. Filtreleme

WHERE ifadesini güçlendiren operatörler. Verini daraltmanın tüm yolları burada.

-- Birden fazla koşul (AND / OR)
SELECT * FROM urunler WHERE kategori = 'Elektronik' AND fiyat < 5000;
SELECT * FROM urunler WHERE kategori = 'Kitap' OR kategori = 'Müzik';

-- Koşulu tersine çevir (NOT)
SELECT * FROM urunler WHERE NOT kategori = 'Gıda';

-- Birden fazla değer kontrolü (IN)
SELECT * FROM urunler WHERE kategori IN ('Elektronik', 'Bilgisayar', 'Telefon');

-- Aralık kontrolü (BETWEEN — uç değerler dahil)
SELECT * FROM urunler WHERE fiyat BETWEEN 100 AND 500;

-- Metin arama (LIKE — % birden fazla karakter, _ tek karakter)
SELECT * FROM musteriler WHERE ad LIKE 'Ali%';       -- Ali ile başlayan
SELECT * FROM musteriler WHERE email LIKE '%@gmail%'; -- Gmail kullanıcıları
SELECT * FROM musteriler WHERE ad LIKE '_li';         -- 3 harfli, "li" ile biten

-- NULL kontrolü (= ile kontrol edilmez!)
SELECT * FROM musteriler WHERE telefon IS NULL;
SELECT * FROM musteriler WHERE telefon IS NOT NULL;

⚠️ Dikkat: WHERE telefon = NULL yazmak çalışmaz. NULL karşılaştırması için her zaman IS NULL veya IS NOT NULL kullan.


3. JOIN Türleri

Birden fazla tabloyu ilişkilendirmenin yolları. SQL'in en güçlü silahı.

-- INNER JOIN: Sadece her iki tabloda eşleşen kayıtları getirir
SELECT s.id, m.ad, u.ad AS urun
FROM siparisler s
INNER JOIN musteriler m ON s.musteri_id = m.id
INNER JOIN urunler u ON s.urun_id = u.id;

-- LEFT JOIN: Sol tablodaki tüm kayıtlar + sağda eşleşenler (yoksa NULL)
SELECT m.ad, s.id AS siparis_id
FROM musteriler m
LEFT JOIN siparisler s ON m.id = s.musteri_id;

-- RIGHT JOIN: Sağ tablodaki tüm kayıtlar + solda eşleşenler
SELECT s.id, m.ad
FROM siparisler s
RIGHT JOIN musteriler m ON s.musteri_id = m.id;

-- FULL OUTER JOIN: Her iki tablodaki tüm kayıtlar (MySQL'de desteklenmez)
SELECT m.ad, s.id
FROM musteriler m
FULL OUTER JOIN siparisler s ON m.id = s.musteri_id;

-- CROSS JOIN: Kartezyen çarpım — her satır birbiriyle eşleşir
SELECT r.renk, b.beden
FROM renkler r
CROSS JOIN bedenler b;

-- SELF JOIN: Tabloyu kendisiyle birleştir (hiyerarşi, çalışan-yönetici)
SELECT c.ad AS calisan, y.ad AS yonetici
FROM calisanlar c
LEFT JOIN calisanlar y ON c.yonetici_id = y.id;

JOIN görsel özet:

JOIN TürüNe Getirir?
INNERSadece eşleşenler
LEFTSol tablo tamamen + sağdan eşleşenler
RIGHTSağ tablo tamamen + soldan eşleşenler
FULL OUTERHer iki tablo tamamen
CROSSHer satır × her satır
SELFTablo kendisiyle

4. Aggregate Fonksiyonlar

Verileri grupla, özetle, say. Raporlama ve analiz için olmazsa olmaz.

-- Temel aggregate fonksiyonlar
SELECT
    COUNT(*) AS toplam_urun,           -- Toplam satır sayısı
    COUNT(DISTINCT kategori) AS kategori_sayisi, -- Benzersiz kategori sayısı
    SUM(fiyat) AS toplam_fiyat,        -- Toplam
    AVG(fiyat) AS ortalama_fiyat,      -- Ortalama
    MIN(fiyat) AS en_ucuz,             -- Minimum
    MAX(fiyat) AS en_pahali            -- Maksimum
FROM urunler;

-- GROUP BY: Kategoriye göre grupla
SELECT kategori, COUNT(*) AS urun_sayisi, AVG(fiyat) AS ort_fiyat
FROM urunler
GROUP BY kategori;

-- HAVING: Grup sonuçlarını filtrele (WHERE gruplardan önce, HAVING sonra çalışır)
SELECT kategori, COUNT(*) AS urun_sayisi
FROM urunler
GROUP BY kategori
HAVING COUNT(*) > 10;

⚠️ Dikkat: WHERE ile aggregate fonksiyon kullanamazsın. Gruplama sonrası filtreleme için HAVING kullan.


5. Subquery'ler (Alt Sorgular)

Bir sorgunun içinde başka bir sorgu çalıştır. Karmaşık filtreleme ve karşılaştırmalar için.

-- WHERE'de subquery: Ortalama fiyatın üstündeki ürünler
SELECT ad, fiyat FROM urunler
WHERE fiyat > (SELECT AVG(fiyat) FROM urunler);

-- IN subquery: Sipariş vermiş müşteriler
SELECT ad FROM musteriler
WHERE id IN (SELECT DISTINCT musteri_id FROM siparisler);

-- EXISTS subquery: Siparişi olan müşteriler (IN'den performanslı olabilir)
SELECT ad FROM musteriler m
WHERE EXISTS (SELECT 1 FROM siparisler s WHERE s.musteri_id = m.id);

-- FROM subquery (türetilmiş tablo): Kategori bazlı en pahalı ürün
SELECT k.kategori, k.max_fiyat
FROM (
    SELECT kategori, MAX(fiyat) AS max_fiyat
    FROM urunler
    GROUP BY kategori
) k
WHERE k.max_fiyat > 1000;

💡 İpucu: Çok sayıda kayıt karşılaştırmasında EXISTS genellikle IN'den daha performanslıdır. EXISTS eşleşmeyi bulduğu anda durur.


6. String Fonksiyonları

Metin verileri üzerinde işlem yapmak için kullanılan fonksiyonlar.

-- Birleştirme
SELECT CONCAT(ad, ' ', soyad) AS tam_ad FROM musteriler;

-- Büyük/küçük harf dönüşümü
SELECT UPPER(ad) AS buyuk, LOWER(email) AS kucuk FROM musteriler;

-- Metin kesme (SUBSTRING — pozisyon 1'den başlar)
SELECT SUBSTRING(telefon, 1, 3) AS alan_kodu FROM musteriler;

-- Boşluk temizleme
SELECT TRIM('   Merhaba   ') AS temiz;          -- 'Merhaba'
SELECT LTRIM('   Sol') AS sol_temiz;              -- 'Sol'

-- Uzunluk
SELECT ad, LENGTH(ad) AS harf_sayisi FROM musteriler;

-- Metin değiştirme
SELECT REPLACE(telefon, '-', '') AS temiz_telefon FROM musteriler;

-- Pozisyon bulma (bulamazsa 0 döner)
SELECT INSTR(email, '@') AS at_pozisyonu FROM musteriler;

7. Tarih Fonksiyonları

Tarih ve zaman verileriyle çalışmak. SQL'de tarih işlemleri her zaman işe yarar.

-- Şu anki tarih ve zaman
SELECT NOW() AS simdi;                          -- 2026-03-08 03:55:00
SELECT CURDATE() AS bugun;                      -- 2026-03-08
SELECT CURTIME() AS saat;                       -- 03:55:00

-- Tarih formatlama (MySQL)
SELECT DATE_FORMAT(created_at, '%d/%m/%Y') AS tarih FROM siparisler;
SELECT DATE_FORMAT(created_at, '%d %M %Y') AS uzun_tarih FROM siparisler;

-- Tarih farkı (gün olarak)
SELECT DATEDIFF(NOW(), created_at) AS gun_once FROM siparisler;

-- Tarih ekleme/çıkarma
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY) AS bir_hafta_sonra;
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH) AS gecen_ay;

-- Tarih parçaları
SELECT
    YEAR(created_at) AS yil,
    MONTH(created_at) AS ay,
    DAY(created_at) AS gun,
    DAYNAME(created_at) AS gun_adi
FROM siparisler;

-- Son 30 günün siparişleri
SELECT * FROM siparisler
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY);

8. Window Functions (Pencere Fonksiyonları)

Satır satır sonuç döndürürken gruplama da yapabilen ileri seviye fonksiyonlar. GROUP BY'dan farkı: satırları daraltmaz, her satır korunur.

-- ROW_NUMBER: Her satıra sıra numarası ver
SELECT ad, fiyat,
    ROW_NUMBER() OVER (ORDER BY fiyat DESC) AS sira
FROM urunler;

-- RANK: Aynı değere aynı sıra, sonraki sırayı atlar (1,2,2,4)
SELECT ad, fiyat,
    RANK() OVER (ORDER BY fiyat DESC) AS sira
FROM urunler;

-- DENSE_RANK: Aynı değere aynı sıra, sıra atlamaz (1,2,2,3)
SELECT ad, fiyat,
    DENSE_RANK() OVER (ORDER BY fiyat DESC) AS sira
FROM urunler;

-- PARTITION BY: Grup içinde sıralama (her kategoride en pahalı)
SELECT kategori, ad, fiyat,
    ROW_NUMBER() OVER (PARTITION BY kategori ORDER BY fiyat DESC) AS kategori_sirasi
FROM urunler;

-- LAG / LEAD: Önceki ve sonraki satıra eriş
SELECT ay, gelir,
    LAG(gelir, 1) OVER (ORDER BY ay) AS onceki_ay,
    LEAD(gelir, 1) OVER (ORDER BY ay) AS sonraki_ay,
    gelir - LAG(gelir, 1) OVER (ORDER BY ay) AS degisim
FROM aylik_gelirler;

-- Kümülatif toplam
SELECT tarih, tutar,
    SUM(tutar) OVER (ORDER BY tarih) AS kumulatif_toplam
FROM odemeler;

💡 İpucu: Window Functions sıralama, karşılaştırma ve kümülatif hesaplamalarda GROUP BY'ın yapamadığını yapar. İleri seviye raporlamanın olmazsa olmazı.


9. DDL (Data Definition Language)

Veritabanı yapısını tanımlayan komutlar: tablo oluştur, değiştir, sil.

-- Tablo oluşturma
CREATE TABLE musteriler (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ad VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    telefon VARCHAR(20),
    bakiye DECIMAL(10, 2) DEFAULT 0.00,
    aktif BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Sütun ekleme
ALTER TABLE musteriler ADD COLUMN soyad VARCHAR(100) AFTER ad;

-- Sütun değiştirme
ALTER TABLE musteriler MODIFY COLUMN telefon VARCHAR(30);

-- Sütun silme
ALTER TABLE musteriler DROP COLUMN aktif;

-- Tablo silme (yapı + veri tamamen gider)
DROP TABLE IF EXISTS gecici_tablo;

-- Tüm verileri sil ama tabloyu koru (TRUNCATE — DELETE'den hızlı, geri alınamaz)
TRUNCATE TABLE log_kayitlari;

Sık kullanılan veri tipleri:

TipAçıklamaÖrnek
INTTam sayı42
BIGINTBüyük tam sayı9999999999
VARCHAR(n)Değişken uzunluklu metin'Merhaba'
TEXTUzun metinBlog içeriği
DECIMAL(p,s)Hassas ondalık19.99
BOOLEANTrue/FalseTRUE
DATETarih'2026-03-08'
TIMESTAMPTarih + saat'2026-03-08 03:55:00'
JSONJSON veri'{"key": "value"}'

10. DML (Data Manipulation Language)

Veri ekleme, güncelleme ve silme komutları.

-- Tekli kayıt ekleme
INSERT INTO musteriler (ad, email) VALUES ('Ahmet', 'ahmet@mail.com');

-- Çoklu kayıt ekleme
INSERT INTO musteriler (ad, email) VALUES
    ('Mehmet', 'mehmet@mail.com'),
    ('Ayşe', 'ayse@mail.com'),
    ('Fatma', 'fatma@mail.com');

-- Güncelleme (WHERE olmadan TÜM satırları günceller — dikkat!)
UPDATE musteriler SET bakiye = bakiye + 100 WHERE id = 1;

-- Birden fazla sütun güncelle
UPDATE urunler SET fiyat = fiyat * 1.10, updated_at = NOW()
WHERE kategori = 'Elektronik';

-- Silme (WHERE olmadan TÜM satırları siler — dikkat!)
DELETE FROM siparisler WHERE created_at < '2024-01-01';

-- UPSERT (varsa güncelle, yoksa ekle — MySQL)
INSERT INTO urunler (kod, ad, stok) VALUES ('A001', 'Kalem', 50)
ON DUPLICATE KEY UPDATE stok = stok + 50;

-- UPSERT (PostgreSQL)
INSERT INTO urunler (kod, ad, stok) VALUES ('A001', 'Kalem', 50)
ON CONFLICT (kod) DO UPDATE SET stok = urunler.stok + 50;

⚠️ Dikkat: UPDATE ve DELETE komutlarında WHERE unutma. WHERE olmadan çalıştırırsan tablodaki tüm satırlar etkilenir. Önce SELECT ile kontrol et.


11. Index (İndeks)

Sorguları hızlandıran veri yapıları. Doğru kullanımı performansı katlar.

-- Tekli index oluştur
CREATE INDEX idx_email ON musteriler(email);

-- Composite (bileşik) index — birden fazla sütun
CREATE INDEX idx_kategori_fiyat ON urunler(kategori, fiyat);

-- Unique index (benzersizlik garantisi + hız)
CREATE UNIQUE INDEX idx_unique_email ON musteriler(email);

-- Index silme
DROP INDEX idx_email ON musteriler;

-- Mevcut indexleri görüntüle
SHOW INDEX FROM musteriler;

Index ne zaman kullanılmalı?

✅ Kullan❌ Kullanma
WHERE'de sık kullanılan sütunlarÇok az kayıtlı tablolar
JOIN koşullarındaki sütunlarSık güncellenen sütunlar
ORDER BY / GROUP BY sütunlarıÇok fazla NULL içeren sütunlar
Yüksek kardinalite (benzersiz değer çok)Düşük kardinalite (cinsiyet, evet/hayır)

💡 İpucu: Composite index'te sütun sırası önemlidir. (kategori, fiyat) index'i WHERE kategori = 'X' sorgusunu hızlandırır ama sadece WHERE fiyat > 100 sorgusunu hızlandırmaz. Soldan sağa kuralı geçerlidir.


12. Transaction (İşlem Yönetimi)

Birden fazla SQL komutunu tek bir atomik birim olarak çalıştır. Ya hepsi başarılı olur, ya hiçbiri.

-- Temel transaction
START TRANSACTION;  -- veya BEGIN

UPDATE hesaplar SET bakiye = bakiye - 500 WHERE id = 1;  -- Gönderenden düş
UPDATE hesaplar SET bakiye = bakiye + 500 WHERE id = 2;  -- Alıcıya ekle

COMMIT;  -- Her şey başarılıysa onayla

-- Hata durumunda geri al
ROLLBACK;

-- SAVEPOINT: Kısmi geri alma noktası
START TRANSACTION;
INSERT INTO siparisler (musteri_id, tutar) VALUES (1, 250);
SAVEPOINT siparis_eklendi;

INSERT INTO siparis_detaylari (siparis_id, urun_id) VALUES (LAST_INSERT_ID(), 5);
-- Bir şeyler ters giderse sadece detayı geri al
ROLLBACK TO SAVEPOINT siparis_eklendi;

COMMIT;

Isolation Levels (İzolasyon Seviyeleri):

SeviyeDirty ReadNon-Repeatable ReadPhantom Read
READ UNCOMMITTED✅ Olabilir✅ Olabilir✅ Olabilir
READ COMMITTED✅ Olabilir✅ Olabilir
REPEATABLE READ✅ Olabilir
SERIALIZABLE
-- İzolasyon seviyesi ayarla
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

13. View ve CTE

Karmaşık sorguları sadeleştiren yapılar. Okunabilirliği ve yeniden kullanımı artırır.

-- VIEW: Sanal tablo oluştur (veriler fiziksel olarak saklanmaz)
CREATE VIEW aktif_musteriler AS
SELECT id, ad, email, bakiye
FROM musteriler
WHERE aktif = TRUE AND bakiye > 0;

-- View'ı kullan (normal tablo gibi sorgula)
SELECT * FROM aktif_musteriler WHERE bakiye > 1000;

-- View güncelle
CREATE OR REPLACE VIEW aktif_musteriler AS
SELECT id, ad, email, bakiye, created_at
FROM musteriler
WHERE aktif = TRUE;

-- View sil
DROP VIEW IF EXISTS aktif_musteriler;

-- CTE (Common Table Expression): Geçici isimlendirilmiş sorgu
WITH yuksek_harcama AS (
    SELECT musteri_id, SUM(tutar) AS toplam
    FROM siparisler
    GROUP BY musteri_id
    HAVING SUM(tutar) > 10000
)
SELECT m.ad, yh.toplam
FROM yuksek_harcama yh
JOIN musteriler m ON yh.musteri_id = m.id;

-- Birden fazla CTE
WITH
    aylik AS (
        SELECT DATE_FORMAT(created_at, '%Y-%m') AS ay, SUM(tutar) AS gelir
        FROM siparisler GROUP BY ay
    ),
    ortalama AS (
        SELECT AVG(gelir) AS ort_gelir FROM aylik
    )
SELECT a.ay, a.gelir, o.ort_gelir,
    CASE WHEN a.gelir > o.ort_gelir THEN 'Üstünde' ELSE 'Altında' END AS durum
FROM aylik a, ortalama o;

-- Recursive CTE: Hiyerarşik veriyi düzleştir (kategori ağacı, organizasyon şeması)
WITH RECURSIVE kategori_agaci AS (
    -- Kök düğüm (üst kategoriler)
    SELECT id, ad, ust_kategori_id, 0 AS derinlik
    FROM kategoriler
    WHERE ust_kategori_id IS NULL

    UNION ALL

    -- Alt kategorileri ekle
    SELECT k.id, k.ad, k.ust_kategori_id, ka.derinlik + 1
    FROM kategoriler k
    INNER JOIN kategori_agaci ka ON k.ust_kategori_id = ka.id
)
SELECT CONCAT(REPEAT('  ', derinlik), ad) AS kategori FROM kategori_agaci;

💡 İpucu: CTE, subquery'den okunabilirlik açısından çok daha üstün. Aynı sorguyu birden fazla yerde kullanıyorsan CTE tercih et.


14. Performans İpuçları

Sorguların neden yavaş çalıştığını anla ve hızlandır.

-- EXPLAIN: Sorgu planını incele (index kullanıyor mu? Full table scan mı?)
EXPLAIN SELECT * FROM urunler WHERE kategori = 'Elektronik';

-- EXPLAIN ANALYZE: Gerçek çalışma süresini göster (MySQL 8.0+)
EXPLAIN ANALYZE SELECT * FROM urunler WHERE fiyat > 100;

Performans kontrol listesi:

  • Index kullan: WHERE, JOIN, ORDER BY sütunlarında index olsun

  • SELECT \* yazma: Sadece ihtiyacın olan sütunları çek

  • N+1 probleminden kaçın: Döngü içinde sorgu çalıştırma → JOIN kullan

  • LIMIT kullan: Büyük tablolarda sayfalama yap

  • Subquery yerine JOIN: Çoğu durumda JOIN daha performanslı

  • LIKE '%abc' yapmaktan kaçın:** Başta % olursa index çalışmaz

-- Offset-based pagination (büyük offset'lerde yavaşlar)
SELECT * FROM urunler ORDER BY id LIMIT 20 OFFSET 40;

-- Cursor-based pagination (büyük veri setlerinde çok daha hızlı)
SELECT * FROM urunler WHERE id > 1000 ORDER BY id LIMIT 20;

-- Sorgu yerine COUNT optimizasyonu
SELECT SQL_CALC_FOUND_ROWS * FROM urunler LIMIT 20;
SELECT FOUND_ROWS();  -- Toplam sayıyı al (ek sorgu gerektirmez)

Özet

Bu cheatsheet'te SQL'in temel ve ileri seviye komutlarını 14 ana bölümde ele aldık:

  • SELECT + Filtreleme ile veri çekme ve daraltmanın tüm yollarını gördük

  • JOIN türleriyle tabloları birleştirmeyi, Aggregate fonksiyonlarla veri özetlemeyi öğrendik

  • Subquery ve CTE ile karmaşık sorguları yönetilebilir parçalara böldük

  • Window Functions ile satır bazlı analiz yapmayı keşfettik

  • DDL/DML ile veritabanı yapısını ve verileri yönetmeyi özetledik

  • Index, Transaction, View ile production seviye veritabanı yönetimini kapsadık

  • Performans ipuçları ile yavaş sorguları teşhis ve tedavi etmeyi gördük

Bu rehberi yer imlerine ekle ve ihtiyaç duydukça geri dön. Daha derinlemesine öğrenmek istersen [SQL Sıfırdan İleri Seviyeye](/kurslar/sql-sifirdan-ileri-seviyeye) kursumuzda her konuyu detaylıca, bol örnekle ve gerçek projelerle işliyoruz.


Sık Kullanılan SQL Kısayollar Tablosu

KomutNe Yapar?Örnek
SELECT DISTINCTTekrar eden satırları eleSELECT DISTINCT sehir FROM musteriler
WHERE ... IN (...)Birden fazla değer kontrolüWHERE id IN (1, 2, 3)
BETWEEN a AND bAralık kontrolü (dahil)WHERE fiyat BETWEEN 10 AND 100
LIKE '%abc%'Metin içinde aramaWHERE ad LIKE '%Ali%'
IS NULLNULL kontrolüWHERE telefon IS NULL
COALESCE(a, b)NULL ise alternatif değerCOALESCE(telefon, 'Yok')
IFNULL(a, b)MySQL'de NULL yerine değerIFNULL(indirim, 0)
COUNT(DISTINCT x)Benzersiz sayımCOUNT(DISTINCT kategori)
GROUP_CONCAT()Değerleri birleştirGROUP_CONCAT(ad SEPARATOR ', ')
CAST(x AS tip)Tip dönüşümüCAST(fiyat AS SIGNED)
CASE WHENKoşullu değerCASE WHEN stok > 0 THEN 'Var' ELSE 'Yok' END
NOW()Şu anki tarih/saatWHERE created_at > NOW() - INTERVAL 1 DAY
LIMIT ... OFFSETSayfalamaLIMIT 10 OFFSET 20
ON DUPLICATE KEY UPDATEUpsert (MySQL)Varsa güncelle, yoksa ekle
WITH ... ASCTE tanımlaWITH cte AS (SELECT ...) SELECT * FROM cte
EXPLAINSorgu planını gösterEXPLAIN SELECT * FROM tablo
Paylaş:
Son güncelleme: Apr 21, 2026

Yorumlar

Giriş yapın ve yorum bırakın.

Henüz yorum yok

Düşüncelerinizi paylaşan ilk siz olun!

Bu yazıyı beğendiniz mi?

Bültene abone olun ve yeni yazılardan ilk siz haberdar olun. Spam yok, söz.

İlgili Yazılar