Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
NULL ve Predicate'ler: Üç Değerli Mantık, LIKE, IN, BETWEEN ve COALESCE
SQL'de karşılaştırmanın üç sonucu var: TRUE, FALSE ve UNKNOWN; bu yüzden = NULL hiçbir row bulmaz, NOT bir nullable column'da NULL row'ları da eler ve NOT IN listesindeki tek bir NULL sonucu boşaltır. COALESCE ile ISNULL'ın tip farkını, NULLIF ile sıfıra bölme korumasını, LIKE'ta escape ve baştaki %'nin index'e etkisini ve BETWEEN'in tarih aralığında son günü kaçırmasını gerçek çıktılarla gösteriyoruz.
SELECT, WHERE ve ORDER BY: Mantıksal Sorgu İşleme Sırası, TOP ve OFFSET/FETCH
SQL sorguyu FROM, WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY, TOP sırasıyla değerlendirir; bu yüzden SELECT'teki alias WHERE'de görünmez ama ORDER BY'da görünür. SELECT * ve DISTINCT'in bedelini, ORDER BY'sız sıranın garanti olmadığını, TOP WITH TIES'ı, OFFSET/FETCH ile sayfalamada tie-breaker olmadan bir index eklemenin bile sayfayı değiştirdiğini ve keyset pagination'ı gösteriyoruz.
Constraint'ler ve Şema Değişikliği: PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, DEFAULT ve ALTER TABLE
Constraint'ler, veriye hangi yoldan yazılırsa yazılsın uygulanan kurallardır; SQL Server'da UNIQUE column tek NULL kabul eder, SQL:2023'ün NULLS NOT DISTINCT seçeneği yok, çözüm filtered unique index. İsimli constraint'leri, IDENTITY ile SEQUENCE farkını, ON DELETE CASCADE ile NO ACTION'ı, CHECK'in NULL'ı geçirmesini, ALTER TABLE ile güvenli şema değişikliğini ve WITH NOCHECK'in constraint'i untrusted yapıp planı nasıl bozduğunu gösteriyoruz.
SQL Veri Tipleri ve CREATE TABLE: Sayılar, Metin, Tarih/Saat ve Collation'daki Türkçe İ Tuzağı
Para için DECIMAL, insan dilindeki metin için NVARCHAR (ya da UTF-8 collation'lı VARCHAR), zaman için UTC'de DATETIME2 seç; Türkçe veride Latin1 collation UPPER('i')'yi 'I' yapar ve 'ince' araması İnce Memed'i bulamaz. FLOAT toplam hatasını, VARCHAR'da sessizce kaybolan İ ve ğ harflerini, DATETIME'ın 23:59:59.999'u ertesi güne yuvarlamasını, collation çakışması hatasını ve kendi schema'nla CREATE TABLE'ı gerçek çıktılarla gösteriyoruz.
SQL Lab'ı: SQL Server 2025'i Docker'da Çalıştırmak, VS Code MSSQL Eklentisi ve Bookstore Örnek Veritabanı
SQL Server 2025'i mcr.microsoft.com/mssql/server:2025-latest image'ıyla, parolayı environment variable'da tutarak ve volume ile Docker'da çalıştırıyor; sqlcmd, VS Code mssql eklentisi ve SSMS 22 ile bağlanıyor, seri boyunca kullanacağımız 10 table'lık Bookstore veritabanını yüklüyoruz. Edition seçimi, Apple Silicon'da Rosetta emülasyonu ve TrustServerCertificate'in yalnız lab için olduğu da işleniyor.
SQL Nedir? İlişkisel Model, ANSI/ISO SQL Standardı ve T-SQL Lehçesi
SQL bir ürün değil, Codd'un ilişkisel modeline dayanan ve ISO/IEC 9075 ile tanımlanan declarative bir dil; SQL Server onun T-SQL lehçesini konuşur. Table, row, column ve key kavramlarını, döngü yerine set-based düşünmeyi logical read sayılarıyla, DDL/DML/DCL/TCL ailelerini ve FETCH FIRST'ün SQL Server, PostgreSQL ve MySQL'deki farklı davranışını gerçek çıktılarla gösteriyoruz.
EF Core ile LINQ Sorguları: SQL Çevirisi, Client Evaluation ve IQueryable Tuzağı
EF Core'da LINQ sorgusunun SQL'e çevrilişini adım adım izliyoruz: deferred execution, ToQueryString ve LogTo, filtreleme, sıralama ve sayfalama, projection, First/Single/Find farkı, son Select'te izin verilen client evaluation ve sessizce bütün tabloyu çeken IEnumerable tuzağı.