Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
62 yazı bulundu
SQL Server 2025 ile T-SQL'e Gelenler: REGEXP Function'ları, Native JSON Tipi, || Operatörü, PRODUCT ve CURRENT_DATE
Veritabanı SERİ 18

SQL Server 2025 ile T-SQL'e Gelenler: REGEXP Function'ları, Native JSON Tipi, || Operatörü, PRODUCT ve CURRENT_DATE

SQL Server 2025, RE2 tabanlı REGEXP_LIKE/REPLACE/SUBSTR/INSTR/COUNT/MATCHES/SPLIT_TO_TABLE, native json tipi, JSON_ARRAYAGG/JSON_OBJECTAGG, || operatörü, PRODUCT, CURRENT_DATE, UNISTR ve BASE64 getirdi. Regex'in collation'ı yok saymasını, sabit önekli pattern'in index seek'ini, preview fuzzy function'ları ve REGEXP_LIKE'ın compatibility level 170 gereksinimini gerçek çıktılarla gösteriyoruz.

8 Kas 2026 13 dk 0
SQL Server 2022 ile T-SQL'e Gelenler: IS DISTINCT FROM, GREATEST/LEAST, WINDOW, GENERATE_SERIES, DATE_BUCKET ve JSON Function'ları
Veritabanı SERİ 17

SQL Server 2022 ile T-SQL'e Gelenler: IS DISTINCT FROM, GREATEST/LEAST, WINDOW, GENERATE_SERIES, DATE_BUCKET ve JSON Function'ları

SQL Server 2022, NULL-güvenli karşılaştırma için IS DISTINCT FROM, GREATEST/LEAST, GENERATE_SERIES, DATETRUNC, DATE_BUCKET, karakterli TRIM, sıralı STRING_SPLIT, JSON_OBJECT/JSON_ARRAY ve APPROX_PERCENTILE_CONT getirdi. Her birini önce/sonra koduyla deniyor ve 150 seviyesinde GENERATE_SERIES, WINDOW ve TRIM LEADING'in neden çalışmadığını gerçek hata mesajlarıyla gösteriyoruz.

8 Kas 2026 12 dk 0
Aynı Sorgu Dört Lehçede: SQL Server, PostgreSQL, MySQL ve SQLite Arasındaki Farklar
Veritabanı SERİ 16

Aynı Sorgu Dört Lehçede: SQL Server, PostgreSQL, MySQL ve SQLite Arasındaki Farklar

Aynı Bookstore sorguları SQL Server, PostgreSQL, MySQL ve SQLite'ta farklı syntax ve farklı sonuç verir: MySQL'de || bir OR'dur ve 7 / 2 3.5000 eder, PostgreSQL büyük-küçük harfe duyarlıdır. Sayfalamayı, string birleştirmeyi, identity ve RETURNING'i, upsert'i, tarih function'larını, quoting'i, boolean'ı, NULL sıralamasını ve LATERAL'ı dört engine'de gerçek çıktılarla karşılaştırıyoruz.

8 Kas 2026 14 dk 0
INSERT, UPDATE, DELETE ve MERGE: OUTPUT, Upsert ve WHERE'siz UPDATE'e Karşı Güvenli Çalışma
Veritabanı SERİ 15

INSERT, UPDATE, DELETE ve MERGE: OUTPUT, Upsert ve WHERE'siz UPDATE'e Karşı Güvenli Çalışma

T-SQL'in UPDATE ... FROM'u bir hedef row'a birden çok kaynak row eşleşince hata vermez ve hangi değeri yazacağı belirsizdir; MERGE ise 8672 hatasıyla durur. Çok satırlı INSERT'i, OUTPUT ile yeni id'leri, standart correlated UPDATE'i, DELETE ile TRUNCATE'in log farkını, MERGE tuzaklarını, açık upsert'i ve @@ROWCOUNT kontrollü güvenli çalışmayı gerçek çıktılarla anlatıyoruz.

8 Kas 2026 14 dk 0
Window Function'lar 2: Running Total, ROWS vs RANGE Frame'leri, LAG/LEAD ve Gaps and Islands
Veritabanı SERİ 14

Window Function'lar 2: Running Total, ROWS vs RANGE Frame'leri, LAG/LEAD ve Gaps and Islands

ORDER BY'lı bir window aggregate'in varsayılan frame'i RANGE UNBOUNDED PRECEDING'dir; aynı değerli row'lar aynı toplamı alır ve SQL Server worktable kullanır. Kümülatif toplamı, ROWS ile RANGE'in logical read farkını, eksik günlerle hareketli ortalamayı, LAG/LEAD'i, LAST_VALUE tuzağını, PERCENTILE_CONT ile medyanı ve gaps and islands'ı Bookstore verisinde gerçek çıktıyla gösteriyoruz.

8 Kas 2026 16 dk 0
Window Function'lar 1: OVER, PARTITION BY, ROW_NUMBER, RANK ve Grup Başına Top-N
Veritabanı SERİ 13

Window Function'lar 1: OVER, PARTITION BY, ROW_NUMBER, RANK ve Grup Başına Top-N

Window function, GROUP BY gibi hesap yapar ama row'ları çökertmez; sonucu her row'un yanına yazar. OVER ve PARTITION BY'ı, ROW_NUMBER, RANK, DENSE_RANK ve NTILE'ın eşitliklerdeki farkını, WHERE'de neden kullanılamadığını, CTE ile grup başına top-N'i, eşitlik kararını ve ROW_NUMBER ile güvenli duplicate silmeyi Bookstore verisinde gerçek çıktıyla gösteriyoruz.

8 Kas 2026 14 dk 0
CTE, View ve Recursive Sorgular: WITH ile Okunabilir SQL ve Hiyerarşik Veri
Veritabanı SERİ 12

CTE, View ve Recursive Sorgular: WITH ile Okunabilir SQL ve Hiyerarşik Veri

CTE sorguyu isimli adımlarla yukarıdan aşağıya yazdırır ama SQL Server'da materialize edilmez; her referans yeniden çalışır. CTE zincirlerini, view'ı, SELECT * tuzağını, SCHEMABINDING ve WITH CHECK OPTION'ı, kategori ağacını gezen recursive CTE'yi, döngü korumasını ve MAXRECURSION'ı Bookstore verisinde gerçek çıktı ve logical read'lerle gösteriyoruz.

8 Kas 2026 18 dk 0
Subquery'ler ve Set Operator'leri: Correlated Subquery, EXISTS, NOT IN Tuzağı ve UNION/INTERSECT/EXCEPT
Veritabanı SERİ 11

Subquery'ler ve Set Operator'leri: Correlated Subquery, EXISTS, NOT IN Tuzağı ve UNION/INTERSECT/EXCEPT

Subquery bir sorgunun sonucunu başka bir sorguda kullanır; NOT IN ise listede tek bir NULL varsa hiç row döndürmez. Scalar subquery ve 512 hatasını, IN/ANY/ALL'u, correlated subquery'yi, derived table'ı, EXISTS ile NOT EXISTS'i ve UNION, UNION ALL, INTERSECT, EXCEPT'i Bookstore verisinde gerçek çıktı, logical read ve plan karşılaştırmasıyla anlatıyoruz.

8 Kas 2026 14 dk 0
GROUP BY ve Aggregate Function'lar: HAVING, Conditional Aggregation, GROUPING SETS ve ROLLUP
Veritabanı SERİ 10

GROUP BY ve Aggregate Function'lar: HAVING, Conditional Aggregation, GROUPING SETS ve ROLLUP

GROUP BY row'ları gruplara çökertir, aggregate'ler NULL'ı yok sayar ve SQL Server'da tam sayı column'un AVG'si tam sayı döner. COUNT(*) ile COUNT(column) farkını, WHERE ile HAVING'in yerini, STRING_AGG'yi, CASE ile conditional aggregation'ı, PIVOT karşılaştırmasını ve ROLLUP, CUBE, GROUPING SETS ile GROUPING()'i Bookstore verisinde gerçek çıktılarla gösteriyoruz.

8 Kas 2026 14 dk 0
SQL JOIN'ler 2: Self Join, Non-Equi Join, Semi/Anti Join ve CROSS APPLY ile LATERAL
Veritabanı SERİ 09

SQL JOIN'ler 2: Self Join, Non-Equi Join, Semi/Anti Join ve CROSS APPLY ile LATERAL

Aynı siparişin kalemlerini ve ödemelerini birlikte join'lemek toplamları çarpar (fan-out); çözüm önce gruplamak sonra join'lemek. CROSS JOIN ile rapor iskeleti, self join ile kategori ağacı, aralıkla non-equi join, EXISTS ile semi join, NOT EXISTS ile anti join (planı LEFT JOIN … IS NULL ile aynı) ve her müşterinin son üç siparişi için T-SQL CROSS/OUTER APPLY ile PostgreSQL ve MySQL'deki standart LATERAL'ı gerçek çıktılarla gösteriyoruz.

8 Kas 2026 13 dk 0
SQL JOIN'ler 1: INNER JOIN, LEFT/RIGHT/FULL OUTER JOIN ve ON ile WHERE Farkı
Veritabanı SERİ 08

SQL JOIN'ler 1: INNER JOIN, LEFT/RIGHT/FULL OUTER JOIN ve ON ile WHERE Farkı

Join'ler Venn diyagramı değil satır eşleştirmesidir: INNER JOIN eşleşen çiftleri, LEFT/RIGHT/FULL OUTER JOIN ayrıca korunan taraftaki eşleşmeyen row'ları NULL ile tutar. LEFT JOIN'in sağ table'ını WHERE'de filtrelemek join'i sessizce INNER'a çevirir; planda bunu Inner Join olarak görüyoruz. Yorumsuz kitaplar, siparişsiz müşteriler, FULL OUTER JOIN ile stok mutabakatı ve one-to-many join'in row'ları çoğaltmasını gerçek çıktılarla inceliyoruz.

8 Kas 2026 12 dk 0
Scalar Function'lar ve CASE: String, Tarih/Saat, Tip Dönüşümü ve Sargability
Veritabanı SERİ 07

Scalar Function'lar ve CASE: String, Tarih/Saat, Tip Dönüşümü ve Sargability

Scalar function'lar kullanışlıdır ama WHERE'de column'un üzerinde kullanılınca sorguyu sargable olmaktan çıkarır: 200.000 row'da YEAR()/MONTH() filtresi 402, aynı ayı yarı açık aralıkla soran sorgu 21 logical read yaptı. CONCAT/CONCAT_WS, LEN ile DATALENGTH, CAST/CONVERT/TRY_CAST, nvarchar parametrenin CONVERT_IMPLICIT ile index'i kaybettirmesi, DATEDIFF'in sınır sayması ve CASE'in tip ve ELSE tuzaklarını gösteriyoruz.

8 Kas 2026 13 dk 0
Blog Haritası