SQL Cheatsheet: Temel ve İleri Seviye SQL Komutları Rehberi
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 = NULLyazmak çalışmaz. NULL karşılaştırması için her zamanIS NULLveyaIS NOT NULLkullan.
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? |
|---|---|
| INNER | Sadece eşleşenler |
| LEFT | Sol tablo tamamen + sağdan eşleşenler |
| RIGHT | Sağ tablo tamamen + soldan eşleşenler |
| FULL OUTER | Her iki tablo tamamen |
| CROSS | Her satır × her satır |
| SELF | Tablo 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:
WHEREile aggregate fonksiyon kullanamazsın. Gruplama sonrası filtreleme içinHAVINGkullan.
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
EXISTSgenellikleIN'den daha performanslıdır.EXISTSeş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:
| Tip | Açıklama | Örnek |
|---|---|---|
INT | Tam sayı | 42 |
BIGINT | Büyük tam sayı | 9999999999 |
VARCHAR(n) | Değişken uzunluklu metin | 'Merhaba' |
TEXT | Uzun metin | Blog içeriği |
DECIMAL(p,s) | Hassas ondalık | 19.99 |
BOOLEAN | True/False | TRUE |
DATE | Tarih | '2026-03-08' |
TIMESTAMP | Tarih + saat | '2026-03-08 03:55:00' |
JSON | JSON 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:
UPDATEveDELETEkomutları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ütunlar | Sı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'iWHERE kategori = 'X'sorgusunu hızlandırır ama sadeceWHERE fiyat > 100sorgusunu 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):
| Seviye | Dirty Read | Non-Repeatable Read | Phantom 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
| Komut | Ne Yapar? | Örnek |
|---|---|---|
SELECT DISTINCT | Tekrar eden satırları ele | SELECT DISTINCT sehir FROM musteriler |
WHERE ... IN (...) | Birden fazla değer kontrolü | WHERE id IN (1, 2, 3) |
BETWEEN a AND b | Aralık kontrolü (dahil) | WHERE fiyat BETWEEN 10 AND 100 |
LIKE '%abc%' | Metin içinde arama | WHERE ad LIKE '%Ali%' |
IS NULL | NULL kontrolü | WHERE telefon IS NULL |
COALESCE(a, b) | NULL ise alternatif değer | COALESCE(telefon, 'Yok') |
IFNULL(a, b) | MySQL'de NULL yerine değer | IFNULL(indirim, 0) |
COUNT(DISTINCT x) | Benzersiz sayım | COUNT(DISTINCT kategori) |
GROUP_CONCAT() | Değerleri birleştir | GROUP_CONCAT(ad SEPARATOR ', ') |
CAST(x AS tip) | Tip dönüşümü | CAST(fiyat AS SIGNED) |
CASE WHEN | Koşullu değer | CASE WHEN stok > 0 THEN 'Var' ELSE 'Yok' END |
NOW() | Şu anki tarih/saat | WHERE created_at > NOW() - INTERVAL 1 DAY |
LIMIT ... OFFSET | Sayfalama | LIMIT 10 OFFSET 20 |
ON DUPLICATE KEY UPDATE | Upsert (MySQL) | Varsa güncelle, yoksa ekle |
WITH ... AS | CTE tanımla | WITH cte AS (SELECT ...) SELECT * FROM cte |
EXPLAIN | Sorgu planını göster | EXPLAIN SELECT * FROM tablo |
Bu yazıyı beğendiniz mi?
Bültene abone olun ve yeni yazılardan ilk siz haberdar olun. Spam yok, söz.