{"id":34171,"date":"2025-11-12T06:31:07","date_gmt":"2025-11-12T03:31:07","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/"},"modified":"2025-11-12T06:31:07","modified_gmt":"2025-11-12T03:31:07","slug":"sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/","title":{"rendered":"SQL&#8217;e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye"},"content":{"rendered":"<p><body><\/p>\n<p>Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki, bu u\u00e7suz bucaks\u0131z veri okyanusunda kaybolmadan, tam da ihtiyac\u0131n\u0131z olan bilgiye h\u0131zla ula\u015fmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Bu kapsaml\u0131 rehber, Structured Query Language (SQL) ile s\u0131f\u0131rdan ba\u015flayarak bir veri kahraman\u0131 olman\u0131z i\u00e7in gereken t\u00fcm ad\u0131mlar\u0131 sunuyor. SQL&#8217;in temellerinden en ileri d\u00fczey tekniklerine kadar her \u015feyi \u00f6\u011frenerek, veritaban\u0131 y\u00f6netiminde uzmanla\u015facak ve analitik yeteneklerinizi zirveye ta\u015f\u0131yacaks\u0131n\u0131z.<\/p>\n<p>G\u00fcn\u00fcm\u00fczde her sekt\u00f6r, b\u00fcy\u00fck miktarda veri \u00fcretmekte ve bu veriyi depolamak, i\u015flemek ve analiz etmek zorunda kalmaktad\u0131r. Perakendeden finansa, sa\u011fl\u0131ktan teknolojiye kadar her alanda, al\u0131nan kararlar\u0131n temelini veriler olu\u015fturur. Bu ba\u011flamda, SQL (Structured Query Language), ili\u015fkisel veritaban\u0131 y\u00f6netim sistemleriyle (RDBMS) ileti\u015fim kurmak i\u00e7in kullan\u0131lan evrensel bir dil olarak \u00f6ne \u00e7\u0131kmaktad\u0131r. Peki, bu dili \u00f6\u011frenmek neden bu kadar kritik? \u00c7\u00fcnk\u00fc SQL, sadece veritaban\u0131nda saklanan bilgilere eri\u015fmenizi sa\u011flamakla kalmaz, ayn\u0131 zamanda bu verileri manip\u00fcle etme, d\u00f6n\u00fc\u015ft\u00fcrme ve anlaml\u0131 raporlar olu\u015fturma g\u00fcc\u00fcn\u00fc de elinize verir. \u015eirketler, m\u00fc\u015fteri davran\u0131\u015flar\u0131n\u0131 anlamak, envanterlerini y\u00f6netmek, finansal i\u015flemleri takip etmek ve operasyonel verimlili\u011fi art\u0131rmak i\u00e7in s\u00fcrekli olarak SQL yeteneklerine sahip profesyonellere ihtiya\u00e7 duyarlar.<\/p>\n<p>SQL bilmek, sadece bir teknik beceri olman\u0131n \u00f6tesinde, analitik d\u00fc\u015f\u00fcnme yetene\u011finizi geli\u015ftirir ve karma\u015f\u0131k sorunlara sistematik \u00e7\u00f6z\u00fcmler \u00fcretmenizi sa\u011flar. Bir i\u015fletmenin sat\u0131\u015f verilerini analiz ederek en \u00e7ok satan \u00fcr\u00fcnleri belirlemek, bir web sitesinin kullan\u0131c\u0131 etkile\u015fimlerini takip ederek m\u00fc\u015fteri deneyimini iyile\u015ftirmek veya bir \u00fcretim tesisinin envanterini optimize ederek maliyetleri d\u00fc\u015f\u00fcrmek gibi pek \u00e7ok senaryoda SQL, vazge\u00e7ilmez bir ara\u00e7t\u0131r. Ayr\u0131ca, SQL&#8217;in temel prensiplerini anlamak, NoSQL gibi di\u011fer veritaban\u0131 t\u00fcrleriyle \u00e7al\u0131\u015f\u0131rken bile size sa\u011flam bir temel sunar. Veri analisti, veri bilimcisi, yaz\u0131l\u0131m geli\u015ftiricisi, i\u015f zekas\u0131 uzman\u0131 veya veritaban\u0131 y\u00f6neticisi gibi pek \u00e7ok mesleki rol i\u00e7in SQL bilgisi, i\u015fe al\u0131m s\u00fcre\u00e7lerinde aranan en temel ve en de\u011ferli becerilerden biridir. Bu rehber boyunca, sadece SQL komutlar\u0131n\u0131 \u00f6\u011frenmekle kalmayacak, ayn\u0131 zamanda veritaban\u0131 tasar\u0131m prensiplerini, performans optimizasyonu tekniklerini ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz sorunlara nas\u0131l pratik \u00e7\u00f6z\u00fcmler \u00fcretece\u011finizi de ke\u015ffedeceksiniz. K\u0131sacas\u0131, SQL ustal\u0131\u011f\u0131na giden yolculu\u011funuz, sizi veri odakl\u0131 bir d\u00fcnyaya haz\u0131rlayacak ve kariyerinizde \u00f6nemli bir fark yaratacakt\u0131r.<\/p>\n<h2>SQL Temellerine Yolculuk: Veritaban\u0131 Nas\u0131l Olu\u015fturulur ve Veri Nas\u0131l Y\u00f6netilir?<\/h2>\n<p>SQL d\u00fcnyas\u0131na ilk ad\u0131m\u0131n\u0131z\u0131 atarken, veritaban\u0131 ve tablolar\u0131n ne oldu\u011funu anlamak hayati \u00f6nem ta\u015f\u0131r. \u0130li\u015fkisel Veritaban\u0131 Y\u00f6netim Sistemleri (RDBMS), verileri tablolar halinde d\u00fczenleyen ve bu tablolar aras\u0131nda ili\u015fkiler kuran bir yap\u0131d\u0131r. Her tablo, belirli bir konuyla ilgili bilgileri sat\u0131rlar (kay\u0131tlar) ve s\u00fctunlar (alanlar) halinde depolar. \u00d6rne\u011fin, bir &#8220;M\u00fc\u015fteriler&#8221; tablosunda m\u00fc\u015fteri ID&#8217;si, ad\u0131, soyad\u0131 ve e-posta adresi gibi s\u00fctunlar bulunabilir.<\/p>\n<p>SQL komutlar\u0131 genellikle d\u00f6rt ana kategoriye ayr\u0131l\u0131r: DDL (Veri Tan\u0131mlama Dili), DML (Veri \u0130\u015fleme Dili), DCL (Veri Kontrol Dili) ve TCL (\u0130\u015flem Kontrol Dili). Bu b\u00f6l\u00fcmde DDL ve DML komutlar\u0131na odaklanaca\u011f\u0131z, zira bunlar veritaban\u0131 yap\u0131lar\u0131n\u0131 olu\u015fturmak ve i\u00e7inde veri manip\u00fclasyonu yapmak i\u00e7in temel ta\u015flard\u0131r.<\/p>\n<h3>Veritaban\u0131 ve Tablo Olu\u015fturma (DDL Komutlar\u0131):<\/h3>\n<p>Yeni bir veritaban\u0131 olu\u015fturmak i\u00e7in <code>CREATE DATABASE<\/code> komutunu kullan\u0131r\u0131z. \u00d6rne\u011fin, bir e-ticaret uygulamas\u0131 i\u00e7in &#8216;ECommerceDB&#8217; ad\u0131nda bir veritaban\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\nCREATE DATABASE ECommerceDB;\n    <\/pre>\n<p><\/code><\/p>\n<p>Veritaban\u0131n\u0131 olu\u015fturduktan sonra, i\u00e7ine veri depolayaca\u011f\u0131m\u0131z tablolar\u0131 tan\u0131mlamam\u0131z gerekir. <code>CREATE TABLE<\/code> komutu, tablonun ad\u0131n\u0131, her s\u00fctunun ad\u0131n\u0131 ve veri tipini (\u00f6rne\u011fin, <code>INT<\/code> tam say\u0131lar i\u00e7in, <code>VARCHAR(255)<\/code> metinler i\u00e7in, <code>DATE<\/code> tarihler i\u00e7in) belirtmemizi sa\u011flar. A\u015fa\u011f\u0131da 'M\u00fc\u015fteriler' ve '\u00dcr\u00fcnler' tablolar\u0131n\u0131n nas\u0131l olu\u015fturuldu\u011funu g\u00f6rebilirsiniz:<\/p>\n<pre><code>\nUSE ECommerceDB; -- Bu komut, \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131m\u0131z veritaban\u0131n\u0131 se\u00e7er.\n\nCREATE TABLE Musteriler (\n    MusteriID INT PRIMARY KEY AUTO_INCREMENT,\n    Ad VARCHAR(50) NOT NULL,\n    Soyad VARCHAR(50) NOT NULL,\n    Email VARCHAR(100) UNIQUE,\n    KayitTarihi DATE DEFAULT CURRENT_DATE\n);\n\nCREATE TABLE Urunler (\n    UrunID INT PRIMARY KEY AUTO_INCREMENT,\n    UrunAdi VARCHAR(100) NOT NULL,\n    Fiyat DECIMAL(10, 2) NOT NULL,\n    StokAdedi INT DEFAULT 0\n);\n    <\/pre>\n<p><\/code><\/p>\n<p>Burada <code>PRIMARY KEY<\/code> her sat\u0131r\u0131 benzersiz \u015fekilde tan\u0131mlayan bir s\u00fctunu belirtirken, <code>AUTO_INCREMENT<\/code> bu s\u00fctunun her yeni kay\u0131t eklendi\u011finde otomatik olarak artmas\u0131n\u0131 sa\u011flar. <code>NOT NULL<\/code> bir s\u00fctunun bo\u015f b\u0131rak\u0131lamayaca\u011f\u0131n\u0131, <code>UNIQUE<\/code> ise o s\u00fctundaki de\u011ferlerin benzersiz olmas\u0131 gerekti\u011fini ifade eder. <code>DEFAULT<\/code> ise bir de\u011fer belirtilmedi\u011finde otomatik olarak atanacak varsay\u0131lan de\u011feri belirler.<\/p>\n<h3>Veri Ekleme, G\u00fcncelleme ve Silme (DML Komutlar\u0131):<\/h3>\n<p>Tablolar\u0131m\u0131z\u0131 olu\u015fturduktan sonra, onlara veri eklemeye ba\u015flayabiliriz. <code>INSERT INTO<\/code> komutu, belirtilen tabloya yeni bir sat\u0131r eklemek i\u00e7in kullan\u0131l\u0131r:<\/p>\n<pre><code>\nINSERT INTO Musteriler (Ad, Soyad, Email) VALUES\n('Ay\u015fe', 'Y\u0131lmaz', 'ayse.yilmaz@example.com'),\n('Can', 'Demir', 'can.demir@example.com');\n\nINSERT INTO Urunler (UrunAdi, Fiyat, StokAdedi) VALUES\n('Laptop', 12000.50, 50),\n('Ak\u0131ll\u0131 Telefon', 8500.00, 120);\n    <\/pre>\n<p><\/code><\/p>\n<p>Mevcut verileri de\u011fi\u015ftirmek istedi\u011fimizde <code>UPDATE<\/code> komutunu kullan\u0131r\u0131z. <code>WHERE<\/code> ko\u015fulu, hangi sat\u0131rlar\u0131n g\u00fcncellenece\u011fini belirtmek i\u00e7in kritik \u00f6neme sahiptir. E\u011fer <code>WHERE<\/code> ko\u015fulu kullan\u0131lmazsa, tablodaki t\u00fcm sat\u0131rlar g\u00fcncellenir ki bu genellikle istenmeyen bir durumdur:<\/p>\n<pre><code>\nUPDATE Urunler\nSET Fiyat = 12500.00, StokAdedi = 45\nWHERE UrunID = 1; -- Laptop'un fiyat\u0131n\u0131 ve stok adedini g\u00fcncelledik.\n    <\/pre>\n<p><\/code><\/p>\n<p>Son olarak, veritaban\u0131ndan veri silmek i\u00e7in <code>DELETE FROM<\/code> komutunu kullan\u0131r\u0131z. T\u0131pk\u0131 <code>UPDATE<\/code> komutunda oldu\u011fu gibi, <code>WHERE<\/code> ko\u015fulu olmadan kullan\u0131ld\u0131\u011f\u0131nda tablodaki t\u00fcm kay\u0131tlar silinecektir:<\/p>\n<pre><code>\nDELETE FROM Musteriler\nWHERE MusteriID = 2; -- ID'si 2 olan m\u00fc\u015fteriyi sildik.\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu temel DDL ve DML komutlar\u0131, bir veritaban\u0131 yap\u0131s\u0131 kurmak ve i\u00e7inde verileri y\u00f6netmek i\u00e7in ihtiyac\u0131n\u0131z olan ilk ad\u0131mlar\u0131 olu\u015fturur. Bu komutlar\u0131 pratik yaparak i\u00e7selle\u015ftirmek, SQL yolculu\u011funuzda sa\u011flam bir temel olu\u015fturman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h2>Veri \u00c7ekme Sanat\u0131: SELECT Sorgular\u0131yla \u0130htiya\u00e7 Duydu\u011funuz Bilgiyi Nas\u0131l Bulursunuz?<\/h2>\n<p>Veritaban\u0131nda depolanan verileri sorgulamak ve istedi\u011fimiz formatta almak, SQL'in en g\u00fc\u00e7l\u00fc ve en s\u0131k kullan\u0131lan y\u00f6nlerinden biridir. <code>SELECT<\/code> komutu, bu amaca hizmet eden temel ara\u00e7t\u0131r. Yaln\u0131zca istedi\u011finiz s\u00fctunlar\u0131 se\u00e7ebilir, belirli kriterlere uyan sat\u0131rlar\u0131 filtreleyebilir, sonu\u00e7lar\u0131 s\u0131ralayabilir ve hatta verileri grupland\u0131rarak \u00f6zet bilgiler elde edebilirsiniz. Bu b\u00f6l\u00fcm, <code>SELECT<\/code> sorgular\u0131n\u0131n inceliklerini ve veriyi nas\u0131l ustaca \u00e7ekece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.<\/p>\n<h3>Temel SELECT Sorgular\u0131 ve Filtreleme:<\/h3>\n<p>T\u00fcm s\u00fctunlar\u0131 almak i\u00e7in <code>*<\/code> karakterini kullan\u0131r\u0131z, ancak performans a\u00e7\u0131s\u0131ndan genellikle sadece ihtiyac\u0131m\u0131z olan s\u00fctunlar\u0131 belirtmek daha iyidir:<\/p>\n<pre><code>\n-- T\u00fcm \u00fcr\u00fcnlerin t\u00fcm bilgilerini getir\nSELECT * FROM Urunler;\n\n-- Sadece m\u00fc\u015fteri adlar\u0131n\u0131 ve e-postalar\u0131n\u0131 getir\nSELECT Ad, Email FROM Musteriler;\n    <\/pre>\n<p><\/code><\/p>\n<p>Belirli ko\u015fullara uyan verileri filtrelemek i\u00e7in <code>WHERE<\/code> yan t\u00fcmcesini kullan\u0131r\u0131z. Kar\u015f\u0131la\u015ft\u0131rma operat\u00f6rleri (<code>=, !=, >, <, >=, <=<\/code>), mant\u0131ksal operat\u00f6rler (<code>AND, OR, NOT<\/code>) ve \u00f6zel operat\u00f6rler (<code>LIKE, IN, BETWEEN, IS NULL<\/code>) ile g\u00fc\u00e7l\u00fc filtrelemeler yapabiliriz.<\/p>\n<pre><code>\n-- Fiyat\u0131 10000 TL'nin \u00fczerinde olan \u00fcr\u00fcnleri getir\nSELECT UrunAdi, Fiyat FROM Urunler WHERE Fiyat > 10000;\n\n-- Ad\u0131 'Ay\u015fe' olan veya email adresi '@example.com' ile biten m\u00fc\u015fterileri getir\nSELECT Ad, Soyad, Email FROM Musteriler WHERE Ad = 'Ay\u015fe' OR Email LIKE '%@example.com';\n\n-- Stok adedi 10 ile 100 aras\u0131nda olan \u00fcr\u00fcnleri getir\nSELECT UrunAdi, StokAdedi FROM Urunler WHERE StokAdedi BETWEEN 10 AND 100;\n    <\/pre>\n<p><\/code><\/p>\n<h3>Sonu\u00e7lar\u0131 S\u0131ralama ve S\u0131n\u0131rlama:<\/h3>\n<p>Sorgu sonu\u00e7lar\u0131n\u0131 belirli bir s\u00fctuna g\u00f6re s\u0131ralamak i\u00e7in <code>ORDER BY<\/code> yan t\u00fcmcesini kullan\u0131r\u0131z. Varsay\u0131lan olarak artan s\u0131rada (<code>ASC<\/code>) s\u0131ralan\u0131r, ancak azalan s\u0131rada (<code>DESC<\/code>) da s\u0131ralayabiliriz. Ayr\u0131ca, belirli say\u0131da sonu\u00e7 almak i\u00e7in <code>LIMIT<\/code> (MySQL\/PostgreSQL) veya <code>TOP<\/code> (SQL Server) kullanabiliriz.<\/p>\n<pre><code>\n-- \u00dcr\u00fcnleri fiyata g\u00f6re artan s\u0131rada s\u0131rala\nSELECT UrunAdi, Fiyat FROM Urunler ORDER BY Fiyat ASC;\n\n-- En pahal\u0131 3 \u00fcr\u00fcn\u00fc getir\nSELECT UrunAdi, Fiyat FROM Urunler ORDER BY Fiyat DESC LIMIT 3;\n    <\/pre>\n<p><\/code><\/p>\n<h3>Verileri Grupland\u0131rma ve \u00d6zetleme (Aggregate Fonksiyonlar):<\/h3>\n<p>Verileri grupland\u0131rarak \u00f6zet bilgiler elde etmek i\u00e7in <code>GROUP BY<\/code> yan t\u00fcmcesi ile birlikte toplama (aggregate) fonksiyonlar\u0131n\u0131 (<code>COUNT, SUM, AVG, MIN, MAX<\/code>) kullan\u0131r\u0131z. Bu fonksiyonlar, bir s\u00fctundaki de\u011ferler \u00fczerinde hesaplamalar yapar.<\/p>\n<pre><code>\n-- Toplam m\u00fc\u015fteri say\u0131s\u0131n\u0131 bul\nSELECT COUNT(MusteriID) AS ToplamMusteriSayisi FROM Musteriler;\n\n-- T\u00fcm \u00fcr\u00fcnlerin ortalama fiyat\u0131n\u0131 ve toplam stok adedini bul\nSELECT AVG(Fiyat) AS OrtalamaFiyat, SUM(StokAdedi) AS ToplamStok FROM Urunler;\n    <\/pre>\n<p><\/code><\/p>\n<p><code>GROUP BY<\/code> ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, bu fonksiyonlar her grup i\u00e7in ayr\u0131 ayr\u0131 hesaplan\u0131r. \u00d6rne\u011fin, farkl\u0131 \u00fcr\u00fcn kategorileri i\u00e7in ortalama fiyatlar\u0131 bulmak isteyebiliriz. (\u015eu an 'Kategori' s\u00fctunumuz yok, ekleyelim ve \u00f6rne\u011fi olu\u015ftural\u0131m):<\/p>\n<pre><code>\nALTER TABLE Urunler ADD COLUMN Kategori VARCHAR(50);\nUPDATE Urunler SET Kategori = 'Elektronik' WHERE UrunID IN (1, 2);\nUPDATE Urunler SET Kategori = 'Ev Aletleri' WHERE UrunID = 3; -- Yeni bir \u00fcr\u00fcn ekleyelim\nINSERT INTO Urunler (UrunAdi, Fiyat, StokAdedi, Kategori) VALUES ('Buzdolab\u0131', 15000.00, 30, 'Ev Aletleri');\n\n-- Her kategorideki \u00fcr\u00fcn say\u0131s\u0131n\u0131 ve ortalama fiyat\u0131n\u0131 bul\nSELECT Kategori, COUNT(UrunID) AS UrunSayisi, AVG(Fiyat) AS OrtalamaFiyat\nFROM Urunler\nGROUP BY Kategori;\n    <\/pre>\n<p><\/code><\/p>\n<p><code>HAVING<\/code> yan t\u00fcmcesi, <code>GROUP BY<\/code> ile olu\u015fturulan gruplar\u0131 filtrelemek i\u00e7in kullan\u0131l\u0131r, t\u0131pk\u0131 <code>WHERE<\/code>'in tekil sat\u0131rlar\u0131 filtrelemesi gibi. \u00d6rne\u011fin, sadece belirli bir say\u0131da \u00fcr\u00fcnden fazla olan kategorileri g\u00f6rmek isteyebiliriz:<\/p>\n<pre><code>\n-- Sadece 1'den fazla \u00fcr\u00fcn\u00fc olan kategorileri ve ortalama fiyatlar\u0131n\u0131 getir\nSELECT Kategori, COUNT(UrunID) AS UrunSayisi, AVG(Fiyat) AS OrtalamaFiyat\nFROM Urunler\nGROUP BY Kategori\nHAVING COUNT(UrunID) > 1;\n    <\/pre>\n<p><\/code><\/p>\n<aside class=\"expert-tip\">\n        Uzman \u0130pucu: Sorgular\u0131n\u0131zda <code>SELECT *<\/code> yerine her zaman ihtiyac\u0131n\u0131z olan s\u00fctunlar\u0131 belirtin. Bu, hem sorgu performans\u0131n\u0131 art\u0131r\u0131r hem de a\u011f \u00fczerindeki veri trafi\u011fini azalt\u0131r, \u00f6zellikle b\u00fcy\u00fck veritabanlar\u0131 ve \u00e7ok say\u0131da kullan\u0131c\u0131 s\u00f6z konusu oldu\u011funda fark yarat\u0131r.<br \/>\n    <\/aside>\n<h3>Vaka Analizi: E-ticaret Sitesi \u0130\u00e7in Sipari\u015f Analizi<\/h3>\n<p>Bir e-ticaret \u015firketi oldu\u011funuzu varsayal\u0131m. M\u00fc\u015fterilerinizin davran\u0131\u015flar\u0131n\u0131 anlamak i\u00e7in sipari\u015f verilerine ihtiyac\u0131n\u0131z var.<br \/>\n    \u00d6ncelikle, bir 'Sipari\u015fler' tablosu olu\u015ftural\u0131m:<\/p>\n<pre><code>\nCREATE TABLE Siparisler (\n    SiparisID INT PRIMARY KEY AUTO_INCREMENT,\n    MusteriID INT,\n    SiparisTarihi DATE,\n    ToplamTutar DECIMAL(10, 2),\n    Durum VARCHAR(50),\n    FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID)\n);\n\nINSERT INTO Siparisler (MusteriID, SiparisTarihi, ToplamTutar, Durum) VALUES\n(1, '2023-01-15', 2500.00, 'Tamamland\u0131'),\n(1, '2023-02-20', 120.00, 'Beklemede'),\n(3, '2023-01-25', 5000.00, 'Tamamland\u0131'), -- MusteriID 3 (Yeni m\u00fc\u015fteri ekleyelim: Veli Kara)\n(4, '2023-03-01', 800.00, 'Haz\u0131rlan\u0131yor'); -- MusteriID 4 (Yeni m\u00fc\u015fteri ekleyelim: Zeynep I\u015f\u0131k)\n\nINSERT INTO Musteriler (Ad, Soyad, Email, KayitTarihi) VALUES\n('Veli', 'Kara', 'veli.kara@example.com', '2023-01-01'),\n('Zeynep', 'I\u015f\u0131k', 'zeynep.isik@example.com', '2023-02-10');\n    <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi, birka\u00e7 analiz yapal\u0131m:<\/p>\n<ol>\n<li><strong>En \u00e7ok sipari\u015f veren m\u00fc\u015fteriyi bul:<\/strong><\/li>\n<pre><code>\nSELECT MusteriID, COUNT(SiparisID) AS SiparisSayisi\nFROM Siparisler\nGROUP BY MusteriID\nORDER BY SiparisSayisi DESC\nLIMIT 1;\n        <\/pre>\n<p><\/code><\/p>\n<li><strong>Ocak ay\u0131nda tamamlanan sipari\u015flerin toplam tutar\u0131n\u0131 bul:<\/strong><\/li>\n<pre><code>\nSELECT SUM(ToplamTutar) AS OcakAy\u0131ToplamTutar\nFROM Siparisler\nWHERE SiparisTarihi BETWEEN '2023-01-01' AND '2023-01-31'\nAND Durum = 'Tamamland\u0131';\n        <\/pre>\n<p><\/code>\n    <\/ol>\n<p>Bu \u00f6rnekler, <code>SELECT<\/code> sorgular\u0131n\u0131n ger\u00e7ek d\u00fcnya problemlerini \u00e7\u00f6zmek i\u00e7in ne kadar esnek ve g\u00fc\u00e7l\u00fc oldu\u011funu g\u00f6stermektedir. Verileri filtreleme, s\u0131ralama ve grupland\u0131rma yetene\u011fi, her veri analistinin olmazsa olmaz\u0131d\u0131r.<\/p>\n<h2>Birden Fazla Tabloyla Dans: JOIN \u0130\u015flemleriyle \u0130li\u015fkisel Veriyi Nas\u0131l Birle\u015ftirirsiniz?<\/h2>\n<p>Ger\u00e7ek d\u00fcnya veritabanlar\u0131 genellikle birden fazla, birbiriyle ili\u015fkili tablodan olu\u015fur. \u00d6rne\u011fin, bir 'M\u00fc\u015fteriler' tablonuz ve bir 'Sipari\u015fler' tablonuz olabilir; bu tablolar\u0131 bir <code>MusteriID<\/code> s\u00fctunu ile birbirine ba\u011flayabilirsiniz. \u0130\u015fte bu noktada, farkl\u0131 tablolardaki verileri bir araya getirmek i\u00e7in <code>JOIN<\/code> i\u015flemlerine ihtiya\u00e7 duyar\u0131z. <code>JOIN<\/code>'ler, ili\u015fkisel veritabanlar\u0131n\u0131n g\u00fcc\u00fcn\u00fc ortaya koyan ve karma\u015f\u0131k sorgular olu\u015fturman\u0131z\u0131 sa\u011flayan temel bir SQL \u00f6zelli\u011fidir.<\/p>\n<p><code>JOIN<\/code> i\u015flemleri, iki veya daha fazla tablodaki sat\u0131rlar\u0131, belirtilen bir ko\u015ful (genellikle iki tablo aras\u0131ndaki ortak bir s\u00fctun) e\u015fle\u015fti\u011finde birle\u015ftirir. Farkl\u0131 <code>JOIN<\/code> t\u00fcrleri vard\u0131r ve her biri farkl\u0131 senaryolara hizmet eder:<\/p>\n<h3>INNER JOIN: Ortak Kay\u0131tlar\u0131 Bulma<\/h3>\n<p><code>INNER JOIN<\/code>, iki tabloda da e\u015fle\u015fen kay\u0131tlara sahip sat\u0131rlar\u0131 d\u00f6nd\u00fcr\u00fcr. E\u011fer bir tabloda e\u015fle\u015fen kay\u0131t yoksa, o sat\u0131r sonu\u00e7 k\u00fcmesine dahil edilmez. Bu, en yayg\u0131n kullan\u0131lan <code>JOIN<\/code> t\u00fcr\u00fcd\u00fcr.<\/p>\n<pre><code>\n-- M\u00fc\u015fteri bilgilerini ve o m\u00fc\u015fterinin sipari\u015flerini birle\u015ftir\nSELECT\n    M.Ad,\n    M.Soyad,\n    S.SiparisID,\n    S.SiparisTarihi,\n    S.ToplamTutar\nFROM\n    Musteriler AS M -- 'Musteriler' tablosuna 'M' takma ad\u0131 verdik.\nINNER JOIN\n    Siparisler AS S -- 'Siparisler' tablosuna 'S' takma ad\u0131 verdik.\nON\n    M.MusteriID = S.MusteriID; -- E\u015fle\u015fme ko\u015fulu\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, sadece sipari\u015f vermi\u015f olan m\u00fc\u015fterilerin adlar\u0131n\u0131, soyadlar\u0131n\u0131 ve sipari\u015f detaylar\u0131n\u0131 listeler. E\u011fer bir m\u00fc\u015fteri hi\u00e7 sipari\u015f vermediyse veya bir sipari\u015fin <code>MusteriID<\/code>'si <code>Musteriler<\/code> tablosunda yoksa, bu kay\u0131tlar sonu\u00e7ta yer almaz.<\/p>\n<h3>LEFT JOIN (LEFT OUTER JOIN): Sol Tablodaki T\u00fcm Kay\u0131tlar\u0131 Getirme<\/h3>\n<p><code>LEFT JOIN<\/code>, sol taraftaki tablodan t\u00fcm kay\u0131tlar\u0131 ve sa\u011f taraftaki tablodan e\u015fle\u015fen kay\u0131tlar\u0131 d\u00f6nd\u00fcr\u00fcr. Sa\u011f tabloda e\u015fle\u015fme bulunamazsa, ilgili s\u00fctunlar i\u00e7in <code>NULL<\/code> de\u011ferleri d\u00f6nd\u00fcr\u00fcl\u00fcr. Bu, bir tablonun t\u00fcm kay\u0131tlar\u0131n\u0131 g\u00f6rmek ve varsa di\u011fer tablodan e\u015fle\u015fen bilgileri de eklemek istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>\n-- T\u00fcm m\u00fc\u015fterileri ve varsa sipari\u015f bilgilerini getir\nSELECT\n    M.Ad,\n    M.Soyad,\n    S.SiparisID,\n    S.SiparisTarihi,\n    S.ToplamTutar\nFROM\n    Musteriler AS M\nLEFT JOIN\n    Siparisler AS S\nON\n    M.MusteriID = S.MusteriID;\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, t\u00fcm m\u00fc\u015fterileri listeler. E\u011fer bir m\u00fc\u015fteri hi\u00e7 sipari\u015f vermediyse, <code>SiparisID<\/code>, <code>SiparisTarihi<\/code> ve <code>ToplamTutar<\/code> s\u00fctunlar\u0131 i\u00e7in <code>NULL<\/code> de\u011ferleri g\u00f6receksiniz. Bu, \"Hangi m\u00fc\u015fterilerimiz hi\u00e7 sipari\u015f vermedi?\" gibi sorular\u0131 yan\u0131tlamak i\u00e7in m\u00fckemmeldir:<\/p>\n<pre><code>\nSELECT M.Ad, M.Soyad\nFROM Musteriler AS M\nLEFT JOIN Siparisler AS S\nON M.MusteriID = S.MusteriID\nWHERE S.SiparisID IS NULL;\n    <\/pre>\n<p><\/code><\/p>\n<h3>RIGHT JOIN (RIGHT OUTER JOIN): Sa\u011f Tablodaki T\u00fcm Kay\u0131tlar\u0131 Getirme<\/h3>\n<p><code>RIGHT JOIN<\/code>, <code>LEFT JOIN<\/code>'in tam tersidir. Sa\u011f taraftaki tablodan t\u00fcm kay\u0131tlar\u0131 ve sol taraftaki tablodan e\u015fle\u015fen kay\u0131tlar\u0131 d\u00f6nd\u00fcr\u00fcr. Sol tabloda e\u015fle\u015fme bulunamazsa, ilgili s\u00fctunlar i\u00e7in <code>NULL<\/code> de\u011ferleri d\u00f6nd\u00fcr\u00fcl\u00fcr.<\/p>\n<pre><code>\n-- T\u00fcm sipari\u015fleri ve varsa m\u00fc\u015fteri bilgilerini getir (Left Join ile ayn\u0131 sonu\u00e7lar\u0131 verebilir, pratik kullan\u0131mda Left Join daha s\u0131k tercih edilir)\nSELECT\n    M.Ad,\n    M.Soyad,\n    S.SiparisID,\n    S.SiparisTarihi,\n    S.ToplamTutar\nFROM\n    Musteriler AS M\nRIGHT JOIN\n    Siparisler AS S\nON\n    M.MusteriID = S.MusteriID;\n    <\/pre>\n<p><\/code><\/p>\n<h3>FULL OUTER JOIN: Her \u0130ki Tablodaki T\u00fcm Kay\u0131tlar\u0131 Getirme (MySQL'de do\u011frudan desteklenmez, UNION ile taklit edilir)<\/h3>\n<p><code>FULL OUTER JOIN<\/code>, hem sol hem de sa\u011f tablodaki t\u00fcm sat\u0131rlar\u0131, e\u015fle\u015fenleri birle\u015ftirerek, e\u015fle\u015fmeyenler i\u00e7in ise <code>NULL<\/code> de\u011ferleriyle d\u00f6nd\u00fcr\u00fcr. MySQL do\u011frudan <code>FULL OUTER JOIN<\/code>'i desteklemedi\u011fi i\u00e7in, <code>LEFT JOIN<\/code> ve <code>RIGHT JOIN<\/code> sonu\u00e7lar\u0131n\u0131 <code>UNION<\/code> kullanarak birle\u015ftirerek bu etkiyi taklit edebiliriz. Bu, her iki tablodaki t\u00fcm veriyi, e\u015fle\u015fme olsun ya da olmas\u0131n, g\u00f6rmek istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code>\n-- MySQL'de FULL OUTER JOIN taklidi:\nSELECT M.Ad, M.Soyad, S.SiparisID\nFROM Musteriler AS M\nLEFT JOIN Siparisler AS S ON M.MusteriID = S.MusteriID\nUNION\nSELECT M.Ad, M.Soyad, S.SiparisID\nFROM Musteriler AS M\nRIGHT JOIN Siparisler AS S ON M.MusteriID = S.MusteriID;\n    <\/pre>\n<p><\/code><\/p>\n<aside class=\"expert-tip\">\n        Uzman \u0130pucu: \u00c7ok say\u0131da tabloyu birle\u015ftirmek (Multi-table JOINs), sorgular\u0131n\u0131z\u0131n performans\u0131n\u0131 ciddi \u015fekilde etkileyebilir. Gereksiz JOIN'lerden ka\u00e7\u0131n\u0131n ve her zaman do\u011fru <code>JOIN<\/code> tipini kulland\u0131\u011f\u0131n\u0131zdan emin olun. Ayr\u0131ca, JOIN ko\u015fulunda kullan\u0131lan s\u00fctunlar \u00fczerinde indeksler olu\u015fturmak performans\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<br \/>\n    <\/aside>\n<h3>Vaka Analizi: \u00dcr\u00fcnlerin Sipari\u015f Detaylar\u0131n\u0131 ve M\u00fc\u015fteri Bilgilerini Birle\u015ftirme<\/h3>\n<p>Bir e-ticaret uygulamas\u0131nda, hangi \u00fcr\u00fcn\u00fcn hangi sipari\u015flerde, hangi m\u00fc\u015fteriler taraf\u0131ndan sipari\u015f edildi\u011fini g\u00f6rmek isteyebiliriz. Bunun i\u00e7in 'SiparisDetay' tablosuna ihtiyac\u0131m\u0131z var:<\/p>\n<pre><code>\nCREATE TABLE SiparisDetay (\n    SiparisDetayID INT PRIMARY KEY AUTO_INCREMENT,\n    SiparisID INT,\n    UrunID INT,\n    Adet INT,\n    BirimFiyat DECIMAL(10, 2),\n    FOREIGN KEY (SiparisID) REFERENCES Siparisler(SiparisID),\n    FOREIGN KEY (UrunID) REFERENCES Urunler(UrunID)\n);\n\nINSERT INTO SiparisDetay (SiparisID, UrunID, Adet, BirimFiyat) VALUES\n(1, 1, 1, 12000.50), -- Sipari\u015f 1 (Musteri 1 - Ay\u015fe Y\u0131lmaz), Urun 1 (Laptop)\n(1, 2, 1, 8500.00),  -- Sipari\u015f 1 (Musteri 1 - Ay\u015fe Y\u0131lmaz), Urun 2 (Ak\u0131ll\u0131 Telefon)\n(3, 1, 2, 12000.50), -- Sipari\u015f 3 (Musteri 3 - Veli Kara), Urun 1 (Laptop)\n(4, 3, 1, 15000.00); -- Sipari\u015f 4 (Musteri 4 - Zeynep I\u015f\u0131k), Urun 3 (Buzdolab\u0131)\n    <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi, bu \u00fc\u00e7 tabloyu birle\u015ftirerek kapsaml\u0131 bir rapor olu\u015ftural\u0131m:<\/p>\n<pre><code>\nSELECT\n    M.Ad AS MusteriAdi,\n    M.Soyad AS MusteriSoyadi,\n    S.SiparisID,\n    S.SiparisTarihi,\n    U.UrunAdi,\n    SD.Adet,\n    SD.BirimFiyat,\n    (SD.Adet * SD.BirimFiyat) AS SatirToplam\nFROM\n    Musteriler AS M\nINNER JOIN\n    Siparisler AS S ON M.MusteriID = S.MusteriID\nINNER JOIN\n    SiparisDetay AS SD ON S.SiparisID = SD.SiparisID\nINNER JOIN\n    Urunler AS U ON SD.UrunID = U.UrunID\nORDER BY\n    S.SiparisTarihi DESC, M.Ad;\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, hangi m\u00fc\u015fterinin hangi tarihte, hangi \u00fcr\u00fcnden ka\u00e7 adet ve ne kadara sipari\u015f verdi\u011fini g\u00f6steren detayl\u0131 bir \u00e7\u0131kt\u0131 sunar. <code>JOIN<\/code>'ler sayesinde, ili\u015fkisel veritaban\u0131n\u0131n t\u00fcm potansiyelini kullanarak karma\u015f\u0131k i\u015f senaryolar\u0131na y\u00f6nelik raporlar ve analizler olu\u015fturabilirsiniz. Unutmay\u0131n, pratik yapmak, <code>JOIN<\/code> mant\u0131\u011f\u0131n\u0131 anlaman\u0131n ve ustala\u015fman\u0131n en iyi yoludur.<\/p>\n<h2>SQL Yetkinli\u011finizi Bir \u00dcst Seviyeye Ta\u015f\u0131ma: \u0130leri D\u00fczey Teknikler Nelerdir?<\/h2>\n<p>SQL'in temel DDL, DML ve <code>SELECT<\/code>\/<code>JOIN<\/code> yeteneklerine hakim olmak harika bir ba\u015flang\u0131\u00e7t\u0131r, ancak ger\u00e7ek \"veri kahraman\u0131\" olmak i\u00e7in daha ileri d\u00fczey teknikleri bilmek ve uygulamak gerekir. Bu b\u00f6l\u00fcmde, sorgular\u0131n\u0131z\u0131 daha g\u00fc\u00e7l\u00fc, veritaban\u0131 y\u00f6netimini daha verimli hale getirecek, okunabilirli\u011fi art\u0131racak ve performans\u0131 optimize edecek y\u00f6ntemleri inceleyece\u011fiz.<\/p>\n<h3>Alt Sorgular (Subqueries) ve Ortak Tablo \u0130fadeleri (CTE'ler - WITH Clause)<\/h3>\n<p>Alt sorgular, ba\u015fka bir sorgu i\u00e7inde yer alan sorgulard\u0131r. Tek bir de\u011fer, bir sat\u0131r, bir s\u00fctun veya hatta tam bir tablo d\u00f6nd\u00fcrebilirler. \u00d6zellikle karma\u015f\u0131k filtreleme veya veri kar\u015f\u0131la\u015ft\u0131rmalar\u0131 yapmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131rlar. \u00d6rne\u011fin, ortalama fiyat\u0131n \u00fczerindeki \u00fcr\u00fcnleri bulmak i\u00e7in bir alt sorgu kullanabiliriz:<\/p>\n<pre><code>\nSELECT UrunAdi, Fiyat\nFROM Urunler\nWHERE Fiyat > (SELECT AVG(Fiyat) FROM Urunler);\n    <\/pre>\n<p><\/code><\/p>\n<p>Ancak, \u00e7ok fazla i\u00e7 i\u00e7e ge\u00e7mi\u015f alt sorgular okunabilirli\u011fi ve performans\u0131 olumsuz etkileyebilir. \u0130\u015fte bu noktada Ortak Tablo \u0130fadeleri (CTE'ler), yani <code>WITH<\/code> clause devreye girer. CTE'ler, karma\u015f\u0131k sorgular\u0131 daha k\u00fc\u00e7\u00fck, okunabilir ve y\u00f6netilebilir par\u00e7alara ay\u0131rman\u0131za olanak tan\u0131r. Bir CTE, ana sorgu i\u00e7inde ge\u00e7ici bir sonu\u00e7 k\u00fcmesi tan\u0131mlar:<\/p>\n<pre><code>\nWITH OrtalamaFiyatCTE AS (\n    SELECT AVG(Fiyat) AS OrtalamaFiyatDegeri FROM Urunler\n)\nSELECT UrunAdi, Fiyat\nFROM Urunler, OrtalamaFiyatCTE\nWHERE Urunler.Fiyat > OrtalamaFiyatCTE.OrtalamaFiyatDegeri;\n    <\/pre>\n<p><\/code><\/p>\n<p>CTE'ler ayr\u0131ca \u00f6zyinelemeli (recursive) sorgular olu\u015fturmak i\u00e7in de kullan\u0131labilir, bu da hiyerar\u015fik verileri (\u00f6rne\u011fin, bir organizasyon \u015femas\u0131 veya par\u00e7a-alt par\u00e7a ili\u015fkileri) sorgulamak i\u00e7in \u00e7ok g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<h3>G\u00f6r\u00fcn\u00fcmler (Views), Sakl\u0131 Yordamlar (Stored Procedures) ve Fonksiyonlar (Functions)<\/h3>\n<ul>\n<li><strong>G\u00f6r\u00fcn\u00fcmler (Views):<\/strong> Bir g\u00f6r\u00fcn\u00fcm, sanal bir tablodur. Ger\u00e7ekte veri depolamaz, ancak bir veya daha fazla tablodan veri \u00e7ekmek i\u00e7in kullan\u0131lan bir <code>SELECT<\/code> sorgusunun kaydedilmi\u015f halidir. G\u00f6r\u00fcn\u00fcmler, karma\u015f\u0131k sorgular\u0131 basitle\u015ftirmek, verilere eri\u015fimi k\u0131s\u0131tlamak (g\u00fcvenlik) ve veri ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131 sa\u011flamak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<pre><code>\nCREATE VIEW MusteriSiparisDetaylari AS\nSELECT\n    M.Ad, M.Soyad,\n    S.SiparisID, S.SiparisTarihi, S.ToplamTutar,\n    U.UrunAdi, SD.Adet, SD.BirimFiyat\nFROM\n    Musteriler AS M\nINNER JOIN Siparisler AS S ON M.MusteriID = S.MusteriID\nINNER JOIN SiparisDetay AS SD ON S.SiparisID = SD.SiparisID\nINNER JOIN Urunler AS U ON SD.UrunID = U.UrunID;\n\n-- G\u00f6r\u00fcn\u00fcm\u00fc sorgulama:\nSELECT * FROM MusteriSiparisDetaylari WHERE Ad = 'Ay\u015fe';\n        <\/pre>\n<p><\/code><\/p>\n<li><strong>Sakl\u0131 Yordamlar (Stored Procedures):<\/strong> Sakl\u0131 yordamlar, bir veya daha fazla SQL ifadesinden olu\u015fan ve veritaban\u0131 sunucusunda depolanan \u00f6nceden derlenmi\u015f kod bloklar\u0131d\u0131r. Tekrar eden g\u00f6revleri otomatikle\u015ftirmek, performans art\u0131\u015f\u0131 sa\u011flamak, a\u011f trafi\u011fini azaltmak ve g\u00fcvenlik katman\u0131 eklemek i\u00e7in idealdirler. Parametre alabilir ve de\u011fer d\u00f6nd\u00fcrebilirler.<\/li>\n<pre><code>\nDELIMITER \/\/\nCREATE PROCEDURE GetCustomerOrders(IN customerId INT)\nBEGIN\n    SELECT S.SiparisID, S.SiparisTarihi, S.ToplamTutar\n    FROM Siparisler AS S\n    WHERE S.MusteriID = customerId;\nEND \/\/\nDELIMITER ;\n\n-- Sakl\u0131 yordam\u0131 \u00e7a\u011f\u0131rma:\nCALL GetCustomerOrders(1);\n        <\/pre>\n<p><\/code><\/p>\n<li><strong>Fonksiyonlar (Functions):<\/strong> Fonksiyonlar da sakl\u0131 yordamlara benzer \u015fekilde veritaban\u0131nda depolanan kod bloklar\u0131d\u0131r, ancak genellikle bir veya daha fazla giri\u015f de\u011feri al\u0131r ve tek bir \u00e7\u0131k\u0131\u015f de\u011feri d\u00f6nd\u00fcr\u00fcrler. Sorgular\u0131n <code>SELECT<\/code> veya <code>WHERE<\/code> yan t\u00fcmcelerinde kullan\u0131labilirler.<\/li>\n<pre><code>\nDELIMITER \/\/\nCREATE FUNCTION CalculateOrderTotal(orderId INT) RETURNS DECIMAL(10, 2) READS SQL DATA\nBEGIN\n    DECLARE total DECIMAL(10, 2);\n    SELECT SUM(Adet * BirimFiyat) INTO total\n    FROM SiparisDetay\n    WHERE SiparisID = orderId;\n    RETURN total;\nEND \/\/\nDELIMITER ;\n\n-- Fonksiyonu kullanma:\nSELECT CalculateOrderTotal(1);\n        <\/pre>\n<p><\/code>\n    <\/ul>\n<h3>\u0130\u015flemler (Transactions) ve Veri B\u00fct\u00fcnl\u00fc\u011f\u00fc (ACID \u00d6zellikleri)<\/h3>\n<p>Veritaban\u0131 i\u015flemleri (transactions), bir veya daha fazla SQL ifadesini atomik bir birim olarak ele alman\u0131z\u0131 sa\u011flar. Yani, ya t\u00fcm ifadeler ba\u015far\u0131yla tamamlan\u0131r (commit) ya da hi\u00e7bir ifade tamamlanmaz ve t\u00fcm de\u011fi\u015fiklikler geri al\u0131n\u0131r (rollback). Bu, \u00f6zellikle finansal i\u015flemler gibi veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fcn kritik oldu\u011fu durumlarda hayati \u00f6neme sahiptir. \u0130\u015flemler, ACID (Atomicity, Consistency, Isolation, Durability) \u00f6zelliklerini garanti eder.<\/p>\n<pre><code>\nSTART TRANSACTION;\n\n-- Bir m\u00fc\u015fterinin bakiyesini g\u00fcncelle\nUPDATE Musteriler SET Bakiye = Bakiye - 100 WHERE MusteriID = 1;\n\n-- Bir sipari\u015f olu\u015ftur\nINSERT INTO Siparisler (MusteriID, SiparisTarihi, ToplamTutar, Durum) VALUES (1, CURRENT_DATE, 100, 'Tamamland\u0131');\n\n-- E\u011fer her \u015fey yolunda gittiyse, de\u011fi\u015fiklikleri kal\u0131c\u0131 hale getir\nCOMMIT;\n\n-- E\u011fer bir hata olu\u015fursa, t\u00fcm de\u011fi\u015fiklikleri geri al\n-- ROLLBACK;\n    <\/pre>\n<p><\/code><\/p>\n<h3>Performans Optimizasyonu (\u0130ndeksler)<\/h3>\n<p>B\u00fcy\u00fck tablolarda sorgu performans\u0131, indeksler sayesinde \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131labilir. \u0130ndeksler, t\u0131pk\u0131 bir kitab\u0131n dizini gibi \u00e7al\u0131\u015f\u0131r; veritaban\u0131n\u0131n belirli bir s\u00fctundaki verileri daha h\u0131zl\u0131 bulmas\u0131n\u0131 sa\u011flar. Ancak, \u00e7ok fazla indeks eklemek INSERT, UPDATE ve DELETE i\u015flemlerinin performans\u0131n\u0131 d\u00fc\u015f\u00fcrebilir, bu y\u00fczden dikkatli kullan\u0131lmal\u0131d\u0131r.<\/p>\n<pre><code>\n-- Musteriler tablosundaki Email s\u00fctununa indeks ekleme\nCREATE INDEX IX_Musteriler_Email ON Musteriler (Email);\n\n-- Siparisler tablosundaki SiparisTarihi s\u00fctununa indeks ekleme\nCREATE INDEX IX_Siparisler_SiparisTarihi ON Siparisler (SiparisTarihi);\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu ileri d\u00fczey teknikler, sadece verileri sorgulamaktan \u00f6te, veritaban\u0131 sistemlerini daha etkin y\u00f6netmenizi, daha g\u00fcvenli ve performansl\u0131 uygulamalar geli\u015ftirmenizi sa\u011flar. SQL'de ustala\u015fmak, bu ara\u00e7lar\u0131 ne zaman ve nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 bilmekten ge\u00e7er.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda SQL: Mobil Uygulama Veritaban\u0131 Y\u00f6netimi Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Bir mobil uygulama geli\u015ftirirken, veritaban\u0131 y\u00f6netimi uygulaman\u0131n performans\u0131 ve kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan kritik bir rol oynar. Genellikle mobil uygulamalar, hem cihaz \u00fczerinde yerel bir veritaban\u0131 (\u00f6rne\u011fin SQLite) hem de bir arka u\u00e7 sunucusunda merkezi bir veritaban\u0131 (\u00f6rne\u011fin MySQL, PostgreSQL) kullan\u0131r. SQL, her iki senaryoda da veri y\u00f6netimi i\u00e7in vazge\u00e7ilmezdir. Bu vaka analizinde, bir sosyal medya uygulamas\u0131n\u0131n veritaban\u0131 y\u00f6netimini ele alal\u0131m.<\/p>\n<h3>Vaka Analizi: Sosyal Medya Uygulamas\u0131 \"Connectify\"<\/h3>\n<p>Connectify, kullan\u0131c\u0131lar\u0131n g\u00f6nderi payla\u015fabildi\u011fi, arkada\u015flar\u0131n\u0131 takip edebildi\u011fi ve yorum yapabildi\u011fi bir mobil uygulamad\u0131r. Arka u\u00e7 veritaban\u0131 olarak MySQL kullan\u0131ld\u0131\u011f\u0131n\u0131 varsayal\u0131m. A\u015fa\u011f\u0131daki tablolar\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\nCREATE TABLE Kullanicilar (\n    KullaniciID INT PRIMARY KEY AUTO_INCREMENT,\n    KullaniciAdi VARCHAR(50) UNIQUE NOT NULL,\n    Email VARCHAR(100) UNIQUE NOT NULL,\n    SifreHash VARCHAR(255) NOT NULL,\n    KayitTarihi DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE TABLE Gonderiler (\n    GonderiID INT PRIMARY KEY AUTO_INCREMENT,\n    KullaniciID INT,\n    Icerik TEXT NOT NULL,\n    ResimURL VARCHAR(255),\n    GonderiTarihi DATETIME DEFAULT CURRENT_TIMESTAMP,\n    FOREIGN KEY (KullaniciID) REFERENCES Kullanicilar(KullaniciID)\n);\n\nCREATE TABLE Yorumlar (\n    YorumID INT PRIMARY KEY AUTO_INCREMENT,\n    GonderiID INT,\n    KullaniciID INT,\n    YorumMetni TEXT NOT NULL,\n    YorumTarihi DATETIME DEFAULT CURRENT_TIMESTAMP,\n    FOREIGN KEY (GonderiID) REFERENCES Gonderiler(GonderiID),\n    FOREIGN KEY (KullaniciID) REFERENCES Kullanicilar(KullaniciID)\n);\n\nCREATE TABLE Takipciler (\n    TakipEdenID INT,\n    TakipEdilenID INT,\n    TakipTarihi DATETIME DEFAULT CURRENT_TIMESTAMP,\n    PRIMARY KEY (TakipEdenID, TakipEdilenID),\n    FOREIGN KEY (TakipEdenID) REFERENCES Kullanicilar(KullaniciID),\n    FOREIGN KEY (TakipEdilenID) REFERENCES Kullanicilar(KullaniciID),\n    CHECK (TakipEdenID != TakipEdilenID) -- Bir kullan\u0131c\u0131 kendini takip edemez\n);\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu tablolarla, uygulaman\u0131n \u00e7e\u015fitli i\u015flevleri i\u00e7in SQL sorgular\u0131 yazabiliriz:<\/p>\n<ol>\n<li><strong>Kullan\u0131c\u0131n\u0131n t\u00fcm g\u00f6nderilerini ve bunlara yap\u0131lan yorumlar\u0131 getirme:<\/strong><\/li>\n<pre><code>\nSELECT\n    G.Icerik AS GonderiIcerigi,\n    G.GonderiTarihi,\n    Y.YorumMetni,\n    YK.KullaniciAdi AS YorumYapanKullanici,\n    Y.YorumTarihi\nFROM\n    Gonderiler AS G\nINNER JOIN\n    Kullanicilar AS K ON G.KullaniciID = K.KullaniciID\nLEFT JOIN\n    Yorumlar AS Y ON G.GonderiID = Y.GonderiID\nLEFT JOIN\n    Kullanicilar AS YK ON Y.KullaniciID = YK.KullaniciID\nWHERE\n    K.KullaniciAdi = 'OrnekKullanici'\nORDER BY\n    G.GonderiTarihi DESC, Y.YorumTarihi ASC;\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, <code>INNER JOIN<\/code> ile g\u00f6nderileri kullan\u0131c\u0131yla e\u015fle\u015ftirirken, <code>LEFT JOIN<\/code> kullanarak g\u00f6nderisi olmayan yorumlar\u0131 da (e\u011fer varsa) veya yorumu olmayan g\u00f6nderileri de getirir. Bu, mobil uygulamada bir kullan\u0131c\u0131n\u0131n profil sayfas\u0131n\u0131 veya g\u00f6nderi ak\u0131\u015f\u0131n\u0131 olu\u015ftururken kullan\u0131labilir.<\/p>\n<li><strong>Bir kullan\u0131c\u0131n\u0131n takip etti\u011fi ki\u015filerin en son 10 g\u00f6nderisini ana sayfada g\u00f6sterme:<\/strong><\/li>\n<pre><code>\nSELECT\n    G.GonderiID,\n    G.Icerik,\n    G.ResimURL,\n    G.GonderiTarihi,\n    K.KullaniciAdi\nFROM\n    Gonderiler AS G\nINNER JOIN\n    Kullanicilar AS K ON G.KullaniciID = K.KullaniciID\nINNER JOIN\n    Takipciler AS T ON G.KullaniciID = T.TakipEdilenID\nWHERE\n    T.TakipEdenID = (SELECT KullaniciID FROM Kullanicilar WHERE KullaniciAdi = 'AktifKullanici')\nORDER BY\n    G.GonderiTarihi DESC\nLIMIT 10;\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, bir alt sorgu ile aktif kullan\u0131c\u0131n\u0131n ID'sini bulur, ard\u0131ndan <code>JOIN<\/code>'ler arac\u0131l\u0131\u011f\u0131yla takip etti\u011fi ki\u015filerin g\u00f6nderilerini \u00e7eker ve en son 10'unu g\u00f6sterir. Bu, tipik bir sosyal medya ana sayfas\u0131n\u0131n i\u00e7erik ak\u0131\u015f\u0131n\u0131 olu\u015fturmak i\u00e7in bir \u00f6rnektir.<\/p>\n<li><strong>Kullan\u0131c\u0131 etkile\u015fimlerini \u00f6zetleme (\u00d6r: En \u00e7ok g\u00f6nderi payla\u015fan kullan\u0131c\u0131lar):<\/strong><\/li>\n<pre><code>\nSELECT\n    K.KullaniciAdi,\n    COUNT(G.GonderiID) AS GonderiSayisi\nFROM\n    Kullanicilar AS K\nINNER JOIN\n    Gonderiler AS G ON K.KullaniciID = G.KullaniciID\nGROUP BY\n    K.KullaniciAdi\nORDER BY\n    GonderiSayisi DESC\nLIMIT 5;\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>GROUP BY<\/code> sorgusu, uygulama y\u00f6neticilerinin en aktif kullan\u0131c\u0131lar\u0131 belirlemesine yard\u0131mc\u0131 olabilir, bu da pazarlama veya kullan\u0131c\u0131 etkile\u015fim stratejileri i\u00e7in de\u011ferli bilgiler sa\u011flar.<\/p>\n<\/ol>\n<h3>Mobil Uyumluluk ve Veritaban\u0131 \u0130li\u015fkisi<\/h3>\n<p>SQL veritaban\u0131, arka u\u00e7ta veriyi organize eder ve sunar. Mobil uygulaman\u0131n kendisi (yani frontend), bu verileri SQL sorgular\u0131yla API'ler arac\u0131l\u0131\u011f\u0131yla al\u0131r ve kullan\u0131c\u0131ya g\u00f6sterir. Mobil uyumluluk, genellikle uygulaman\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) ve kullan\u0131c\u0131 deneyimi (UX) ile ilgilidir. Uygulaman\u0131n farkl\u0131 ekran boyutlar\u0131na ve cihazlara uyum sa\u011flamas\u0131, genellikle CSS media query'leri veya mobil framework'lerin responsive (duyarl\u0131) tasar\u0131m prensipleriyle sa\u011flan\u0131r. \u00d6rne\u011fin, bir mobil uygulaman\u0131n web s\u00fcr\u00fcm\u00fcn\u00fc geli\u015ftirirken, g\u00f6nderi ak\u0131\u015f\u0131n\u0131n farkl\u0131 ekran boyutlar\u0131na nas\u0131l adapte olaca\u011f\u0131n\u0131 a\u015fa\u011f\u0131daki gibi bir CSS ile belirtebilirsiniz:<\/p>\n<pre><code>\n.post-container {\n    width: 100%;\n    margin-bottom: 20px;\n}\n\n@media (min-width: 768px) { \/* Tablet ve \u00fczeri ekranlar i\u00e7in *\/\n    .post-container {\n        width: 70%; \/* Daha geni\u015f ekranlarda g\u00f6nderi geni\u015fli\u011fini ayarla *\/\n        margin: 0 auto 20px auto; \/* Ortala *\/\n    }\n    .post-image {\n        max-width: 80%; \/* Resimleri k\u00fc\u00e7\u00fclt *\/\n    }\n}\n\n@media (min-width: 1200px) { \/* Masa\u00fcst\u00fc ve \u00fczeri ekranlar i\u00e7in *\/\n    .post-container {\n        width: 50%; \/* Daha da daralt *\/\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu CSS, SQL'den gelen g\u00f6nderi i\u00e7eri\u011finin farkl\u0131 ekran boyutlar\u0131nda nas\u0131l g\u00f6r\u00fcnt\u00fclenece\u011fini d\u00fczenler. Veritaban\u0131, i\u00e7eri\u011fi tutarl\u0131 bir \u015fekilde sa\u011flarken, frontend bu i\u00e7eri\u011fi duyarl\u0131 bir \u015fekilde sunar. Bu entegrasyon, kullan\u0131c\u0131lar\u0131n herhangi bir cihazda sorunsuz bir deneyim ya\u015famas\u0131n\u0131 sa\u011flar. SQL, bu ak\u0131\u015f\u0131n kalbinde yer alarak, verinin her zaman do\u011fru, g\u00fcncel ve eri\u015filebilir olmas\u0131n\u0131 garanti eder.<\/p>\n<h2>Sonu\u00e7: SQL Ustal\u0131\u011f\u0131na Giden Yolculu\u011funuzda Bir Sonraki Ad\u0131m Ne Olmal\u0131?<\/h2>\n<p>Bu rehber boyunca, SQL'in temel kavramlar\u0131ndan ba\u015flayarak ileri d\u00fczey tekniklere kadar geni\u015f bir yelpazeyi ele ald\u0131k. Veritaban\u0131 olu\u015fturma ve y\u00f6netme (DDL\/DML), etkili sorgular yazma (<code>SELECT<\/code>, <code>WHERE<\/code>, <code>GROUP BY<\/code>), birden fazla tabloyu birle\u015ftirme (<code>JOIN<\/code>'ler), karma\u015f\u0131k sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in alt sorgular ve CTE'ler kullanma, veritaban\u0131 nesneleriyle (Views, Stored Procedures) otomasyon sa\u011flama ve performans optimizasyonu i\u00e7in indekslerin \u00f6nemini \u00f6\u011frendik. Ayr\u0131ca, bir mobil uygulama senaryosu \u00fczerinden ger\u00e7ek d\u00fcnya problemlerine SQL ile nas\u0131l yakla\u015f\u0131laca\u011f\u0131n\u0131 g\u00f6rd\u00fck.<\/p>\n<p>SQL'de ustala\u015fmak, sadece komutlar\u0131 ezberlemekten \u00e7ok daha fazlas\u0131d\u0131r; analitik d\u00fc\u015f\u00fcnme, problem \u00e7\u00f6zme ve veriyi anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrme becerilerini geli\u015ftirmektir. Bu yolculuk s\u00fcrekli bir \u00f6\u011frenme s\u00fcrecidir. Veritaban\u0131 teknolojileri geli\u015fmeye devam ettik\u00e7e, kendinizi g\u00fcncel tutman\u0131z ve yeni yakla\u015f\u0131mlar\u0131 denemekten \u00e7ekinmemeniz \u00f6nemlidir. Pratik yapmak, farkl\u0131 veritaban\u0131 sistemleriyle \u00e7al\u0131\u015fmak (MySQL, PostgreSQL, SQL Server vb.) ve a\u00e7\u0131k kaynak projelerde yer almak, SQL yetkinli\u011finizi derinle\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r. \u015eimdi \u00f6\u011frendiklerinizi uygulamaya ba\u015flay\u0131n, kendi veritabanlar\u0131n\u0131z\u0131 olu\u015fturun, karma\u015f\u0131k sorgular yaz\u0131n ve veriyle konu\u015fman\u0131n g\u00fcc\u00fcn\u00fc ke\u015ffedin. SQL ustal\u0131\u011f\u0131na giden yolda ba\u015far\u0131lar dileriz!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n            <strong>SQL \u00f6\u011frenmek i\u00e7in herhangi bir \u00f6n bilgiye ihtiyac\u0131m var m\u0131?<\/strong><\/p>\n<p>Hay\u0131r, SQL \u00f6\u011frenmek i\u00e7in herhangi bir programlama veya veritaban\u0131 \u00f6n bilgisine ihtiyac\u0131n\u0131z yoktur. Bu rehber gibi s\u0131f\u0131rdan ba\u015flayan kaynaklar, temel kavramlar\u0131 anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Mant\u0131ksal d\u00fc\u015f\u00fcnme ve problem \u00e7\u00f6zme becerileri faydal\u0131 olacakt\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>SQL sadece veri analistleri ve geli\u015ftiriciler i\u00e7in mi gerekli?<\/strong><\/p>\n<p>Kesinlikle hay\u0131r. SQL, veriyle \u00e7al\u0131\u015fan herkes i\u00e7in de\u011ferli bir beceridir. Pazarlama uzmanlar\u0131ndan i\u015f zekas\u0131 analistlerine, \u00fcr\u00fcn y\u00f6neticilerinden operasyon uzmanlar\u0131na kadar bir\u00e7ok profesyonel, kendi kararlar\u0131n\u0131 desteklemek i\u00e7in do\u011frudan veya dolayl\u0131 olarak SQL bilgisine ihtiya\u00e7 duyar.<\/p>\n<\/li>\n<li>\n            <strong>SQL ve NoSQL aras\u0131ndaki fark nedir? Hangisini \u00f6\u011frenmeliyim?<\/strong><\/p>\n<p>SQL veritabanlar\u0131 (ili\u015fkisel veritabanlar\u0131), verileri \u00f6nceden tan\u0131mlanm\u0131\u015f bir \u015femaya sahip tablolarda depolar ve g\u00fc\u00e7l\u00fc veri b\u00fct\u00fcnl\u00fc\u011f\u00fc sa\u011flar. NoSQL veritabanlar\u0131 ise \u015femas\u0131zd\u0131r ve b\u00fcy\u00fck, yap\u0131land\u0131r\u0131lmam\u0131\u015f verileri yatay olarak \u00f6l\u00e7eklendirmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Her ikisinin de kendine \u00f6zg\u00fc avantajlar\u0131 vard\u0131r ve kullan\u0131m alanlar\u0131 farkl\u0131l\u0131k g\u00f6sterir. Genellikle SQL, yap\u0131land\u0131r\u0131lm\u0131\u015f veriler ve karma\u015f\u0131k ili\u015fkiler i\u00e7in iyi bir se\u00e7imdir. \u0130kisi de \u00f6\u011frenilmeye de\u011ferdir, ancak SQL genellikle daha iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>SQL sorgular\u0131m\u0131n performans\u0131n\u0131 nas\u0131l art\u0131rabilirim?<\/strong><\/p>\n<p>Performans\u0131 art\u0131rmak i\u00e7in birka\u00e7 temel y\u00f6ntem vard\u0131r: uygun indeksler olu\u015fturmak, <code>SELECT *<\/code> yerine sadece ihtiyac\u0131n\u0131z olan s\u00fctunlar\u0131 se\u00e7mek, alt sorgular\u0131 dikkatli kullanmak veya CTE'lere d\u00f6n\u00fc\u015ft\u00fcrmek, <code>JOIN<\/code> ko\u015fullar\u0131n\u0131n optimize edildi\u011finden emin olmak ve b\u00fcy\u00fck veri k\u00fcmelerinde <code>LIMIT<\/code> veya sayfaland\u0131rma kullanmakt\u0131r. Ayr\u0131ca, sorgu planlar\u0131n\u0131 (execution plan) analiz etmek de darbo\u011fazlar\u0131 tespit etmenize yard\u0131mc\u0131 olur.<\/p>\n<\/li>\n<li>\n            <strong>Hangi SQL veritaban\u0131 y\u00f6netim sistemini \u00f6\u011frenmeye ba\u015flamal\u0131y\u0131m?<\/strong><\/p>\n<p>MySQL, PostgreSQL ve SQLite, ba\u015flang\u0131\u00e7 i\u00e7in pop\u00fcler ve \u00fccretsiz se\u00e7eneklerdir. Syntax'lar\u0131 birbirine olduk\u00e7a benzerdir, bu y\u00fczden birini \u00f6\u011frendikten sonra di\u011ferine ge\u00e7mek kolayd\u0131r. PostgreSQL genellikle daha fazla \u00f6zellik ve standart uyumlulu\u011fu sunarken, MySQL daha yayg\u0131n ve basit kurulumuyla bilinir. SQLite ise hafif mobil ve g\u00f6m\u00fcl\u00fc uygulamalar i\u00e7in idealdir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki,&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1505],"tags":[],"class_list":{"0":"post-34171","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-sql-2","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL&#039;e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye<\/title>\n<meta name=\"description\" content=\"Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki, bu u\u00e7suz bucaks\u0131z veri okyanusunda kaybolmadan, tam da ihtiyac\u0131n\u0131z olan bilgiye h\u0131zla ula\u015fmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Bu kapsaml\u0131 rehber, Structured Query Language (SQL) ile s\u0131f\u0131rdan ba\u015flayarak bir veri kahraman\u0131 olman\u0131z i\u00e7in gereken t\u00fcm ad\u0131mlar\u0131 sunuyor. SQL&#039;in temellerinden en ileri d\u00fczey tekniklerine kadar her \u015feyi \u00f6\u011frenerek, veritaban\u0131 y\u00f6netiminde uzmanla\u015facak ve analitik yeteneklerinizi zirveye ta\u015f\u0131yacaks\u0131n\u0131z.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL&#039;e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye\" \/>\n<meta property=\"og:description\" content=\"Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki, bu u\u00e7suz bucaks\u0131z veri okyanusunda kaybolmadan, tam da ihtiyac\u0131n\u0131z olan bilgiye h\u0131zla ula\u015fmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Bu kapsaml\u0131 rehber, Structured Query Language (SQL) ile s\u0131f\u0131rdan ba\u015flayarak bir veri kahraman\u0131 olman\u0131z i\u00e7in gereken t\u00fcm ad\u0131mlar\u0131 sunuyor. SQL&#039;in temellerinden en ileri d\u00fczey tekniklerine kadar her \u015feyi \u00f6\u011frenerek, veritaban\u0131 y\u00f6netiminde uzmanla\u015facak ve analitik yeteneklerinizi zirveye ta\u015f\u0131yacaks\u0131n\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-12T03:31:07+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"SQL&#8217;e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye\",\"datePublished\":\"2025-11-12T03:31:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/\"},\"wordCount\":3794,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"SQL\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/\",\"name\":\"SQL'e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-12T03:31:07+00:00\",\"description\":\"Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki, bu u\u00e7suz bucaks\u0131z veri okyanusunda kaybolmadan, tam da ihtiyac\u0131n\u0131z olan bilgiye h\u0131zla ula\u015fmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Bu kapsaml\u0131 rehber, Structured Query Language (SQL) ile s\u0131f\u0131rdan ba\u015flayarak bir veri kahraman\u0131 olman\u0131z i\u00e7in gereken t\u00fcm ad\u0131mlar\u0131 sunuyor. SQL'in temellerinden en ileri d\u00fczey tekniklerine kadar her \u015feyi \u00f6\u011frenerek, veritaban\u0131 y\u00f6netiminde uzmanla\u015facak ve analitik yeteneklerinizi zirveye ta\u015f\u0131yacaks\u0131n\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL&#8217;e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL'e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye","description":"Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki, bu u\u00e7suz bucaks\u0131z veri okyanusunda kaybolmadan, tam da ihtiyac\u0131n\u0131z olan bilgiye h\u0131zla ula\u015fmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Bu kapsaml\u0131 rehber, Structured Query Language (SQL) ile s\u0131f\u0131rdan ba\u015flayarak bir veri kahraman\u0131 olman\u0131z i\u00e7in gereken t\u00fcm ad\u0131mlar\u0131 sunuyor. SQL'in temellerinden en ileri d\u00fczey tekniklerine kadar her \u015feyi \u00f6\u011frenerek, veritaban\u0131 y\u00f6netiminde uzmanla\u015facak ve analitik yeteneklerinizi zirveye ta\u015f\u0131yacaks\u0131n\u0131z.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/","og_locale":"tr_TR","og_type":"article","og_title":"SQL'e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye","og_description":"Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki, bu u\u00e7suz bucaks\u0131z veri okyanusunda kaybolmadan, tam da ihtiyac\u0131n\u0131z olan bilgiye h\u0131zla ula\u015fmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Bu kapsaml\u0131 rehber, Structured Query Language (SQL) ile s\u0131f\u0131rdan ba\u015flayarak bir veri kahraman\u0131 olman\u0131z i\u00e7in gereken t\u00fcm ad\u0131mlar\u0131 sunuyor. SQL'in temellerinden en ileri d\u00fczey tekniklerine kadar her \u015feyi \u00f6\u011frenerek, veritaban\u0131 y\u00f6netiminde uzmanla\u015facak ve analitik yeteneklerinizi zirveye ta\u015f\u0131yacaks\u0131n\u0131z.","og_url":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-12T03:31:07+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"SQL&#8217;e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye","datePublished":"2025-11-12T03:31:07+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/"},"wordCount":3794,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["SQL"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/","url":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/","name":"SQL'e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-12T03:31:07+00:00","description":"Veri, g\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131n\u0131n en de\u011ferli varl\u0131\u011f\u0131d\u0131r ve bu de\u011ferli varl\u0131\u011f\u0131 anlaml\u0131 bilgilere d\u00f6n\u00fc\u015ft\u00fcrmek, her alandaki ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Peki, bu u\u00e7suz bucaks\u0131z veri okyanusunda kaybolmadan, tam da ihtiyac\u0131n\u0131z olan bilgiye h\u0131zla ula\u015fmak m\u00fcmk\u00fcn m\u00fc? Kesinlikle evet! Bu kapsaml\u0131 rehber, Structured Query Language (SQL) ile s\u0131f\u0131rdan ba\u015flayarak bir veri kahraman\u0131 olman\u0131z i\u00e7in gereken t\u00fcm ad\u0131mlar\u0131 sunuyor. SQL'in temellerinden en ileri d\u00fczey tekniklerine kadar her \u015feyi \u00f6\u011frenerek, veritaban\u0131 y\u00f6netiminde uzmanla\u015facak ve analitik yeteneklerinizi zirveye ta\u015f\u0131yacaks\u0131n\u0131z.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/sqle-sifirdan-baslayip-ustalasma-rehberi-temellerden-ileri-seviyeye\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL&#8217;e S\u0131f\u0131rdan Ba\u015flay\u0131p Ustala\u015fma Rehberi: Temellerden \u0130leri Seviyeye"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34171"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34171\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}