{"id":41110,"date":"2026-03-03T17:00:34","date_gmt":"2026-03-03T14:00:34","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/"},"modified":"2026-03-03T17:00:34","modified_gmt":"2026-03-03T14:00:34","slug":"iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/","title":{"rendered":"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f"},"content":{"rendered":"<h2>\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f<\/h2>\n<p>\u0130li\u015fkisel veritabanlar\u0131, modern veri y\u00f6netiminin temelini olu\u015fturur ve verileri organize etme, saklama ve eri\u015fme bi\u00e7imimizde kritik bir rol oynar. Bu veritabanlar\u0131nda, farkl\u0131 tablolar aras\u0131nda anlaml\u0131 ba\u011flant\u0131lar kurmak ve karma\u015f\u0131k analitik sorgular ger\u00e7ekle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lara ihtiya\u00e7 duyar\u0131z. \u0130\u015fte tam bu noktada SQL&#8217;in iki temel g\u00fcc\u00fc olan &#8220;Joins&#8221; ve &#8220;Pencere Fonksiyonlar\u0131&#8221; devreye girer. Bu makalede, bu iki \u00f6nemli konuyu detayl\u0131 bir \u015fekilde inceleyecek, kullan\u0131mlar\u0131n\u0131, avantajlar\u0131n\u0131 ve en iyi uygulama y\u00f6ntemlerini \u00f6rneklerle a\u00e7\u0131klayaca\u011f\u0131z. Veri analizi ve raporlama yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131mak i\u00e7in bu fonksiyonlar\u0131 anlamak ve etkin bir \u015fekilde kullanmak b\u00fcy\u00fck \u00f6nem ta\u015f\u0131maktad\u0131r.<\/p>\n<h3>Veritaban\u0131 \u0130li\u015fkileri ve Joins&#8217;in \u00d6nemi<\/h3>\n<p>\u0130li\u015fkisel veritaban\u0131 y\u00f6netim sistemleri (RDBMS), verileri tablolar halinde d\u00fczenler ve bu tablolar aras\u0131nda \u00f6nceden tan\u0131mlanm\u0131\u015f ili\u015fkiler kurar. Bu ili\u015fkiler, veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flaman\u0131n yan\u0131 s\u0131ra, farkl\u0131 tablolardaki bilgileri bir araya getirerek daha anlaml\u0131 sonu\u00e7lar elde etmemizi sa\u011flar.<\/p>\n<h4>\u0130li\u015fkisel Veritaban\u0131 Modeli ve Normalizasyon<\/h4>\n<p>\u0130li\u015fkisel model, verileri sat\u0131r ve s\u00fctunlardan olu\u015fan tablolar (ili\u015fkiler) halinde saklar. Her tablonun benzersiz birincil anahtar\u0131 (Primary Key) bulunur ve di\u011fer tablolardaki ilgili kay\u0131tlara referans vermek i\u00e7in yabanc\u0131 anahtarlar (Foreign Key) kullan\u0131l\u0131r. Normalizasyon, veri tekrar\u0131n\u0131 azaltmak ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc art\u0131rmak amac\u0131yla veritaban\u0131 yap\u0131s\u0131n\u0131 optimize etme s\u00fcrecidir. Bu s\u00fcre\u00e7, verileri daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir tablolara b\u00f6ler ve bu tablolar aras\u0131nda ili\u015fkiler kurar.<\/p>\n<h4>Veri B\u00fct\u00fcnl\u00fc\u011f\u00fc ve \u0130li\u015fkiler<\/h4>\n<p>Yabanc\u0131 anahtarlar, tablolar aras\u0131ndaki ili\u015fkileri tan\u0131mlar ve referans b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flar. \u00d6rne\u011fin, bir &#8220;Sipari\u015fler&#8221; tablosu ile bir &#8220;M\u00fc\u015fteriler&#8221; tablosu aras\u0131nda bir ili\u015fki oldu\u011funda, her sipari\u015fin mevcut bir m\u00fc\u015fteriye ait olmas\u0131n\u0131 garanti eder. Bu, tutars\u0131z verilerin olu\u015fmas\u0131n\u0131 engeller ve veritaban\u0131n\u0131n g\u00fcvenilirli\u011fini art\u0131r\u0131r.<\/p>\n<h4>Joins Neden Gerekli?<\/h4>\n<p>Veriler farkl\u0131 tablolara da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda, tek bir sorguda t\u00fcm ilgili bilgilere eri\u015fmek i\u00e7in bu tablolar\u0131 birle\u015ftirmeniz gerekir. Joins, tam olarak bu ihtiyac\u0131 kar\u015f\u0131lar. Birden fazla tablodan ortak s\u00fctunlar (genellikle birincil ve yabanc\u0131 anahtarlar) arac\u0131l\u0131\u011f\u0131yla veri sat\u0131rlar\u0131n\u0131 birle\u015ftirerek, kapsaml\u0131 ve anlaml\u0131 veri k\u00fcmeleri olu\u015fturman\u0131za olanak tan\u0131r. \u00d6rne\u011fin, bir m\u00fc\u015fterinin verdi\u011fi t\u00fcm sipari\u015fleri ve bu sipari\u015flerin detaylar\u0131n\u0131 tek bir sorguda g\u00f6rmek i\u00e7in Joins kullan\u0131l\u0131r.<\/p>\n<h3>Temel Join T\u00fcrleri ve Kullan\u0131m Senaryolar\u0131<\/h3>\n<p>SQL&#8217;de en s\u0131k kullan\u0131lan ve en temel Join t\u00fcrleri, farkl\u0131 senaryolara g\u00f6re veri birle\u015ftirme stratejileri sunar. Her bir Join t\u00fcr\u00fcn\u00fcn kendine \u00f6zg\u00fc bir mant\u0131\u011f\u0131 ve kullan\u0131m amac\u0131 vard\u0131r.<\/p>\n<h4>INNER JOIN<\/h4>\n<p>INNER JOIN, birle\u015ftirilen tablolarda e\u015fle\u015fen de\u011ferlere sahip olan t\u00fcm sat\u0131rlar\u0131 d\u00f6nd\u00fcr\u00fcr. E\u011fer iki tabloda da e\u015fle\u015fen bir kay\u0131t yoksa, o kay\u0131t sonu\u00e7 k\u00fcmesine dahil edilmez. En yayg\u0131n kullan\u0131lan Join t\u00fcr\u00fcd\u00fcr.<\/p>\n<pre><code>\nSELECT\n    M.MusteriAdi,\n    S.SiparisTarihi,\n    S.ToplamTutar\nFROM\n    Musteriler M\nINNER JOIN\n    Siparisler S ON M.MusteriID = S.MusteriID;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, sadece hem m\u00fc\u015fterisi olan hem de sipari\u015fi olan kay\u0131tlar listelenir.<\/p>\n<h4>LEFT JOIN (LEFT OUTER JOIN)<\/h4>\n<p>LEFT JOIN, sol tablodaki t\u00fcm sat\u0131rlar\u0131 ve sa\u011f tablodaki e\u015fle\u015fen sat\u0131rlar\u0131 d\u00f6nd\u00fcr\u00fcr. E\u011fer sa\u011f tabloda e\u015fle\u015fen bir sat\u0131r yoksa, sol tablodaki sat\u0131r yine de d\u00f6nd\u00fcr\u00fcl\u00fcr ve sa\u011f tablodan gelen s\u00fctunlar i\u00e7in NULL de\u011ferler atan\u0131r. Genellikle, bir tablodaki t\u00fcm kay\u0131tlar\u0131 g\u00f6rmek ve bunlara ba\u011fl\u0131 di\u011fer tablolardaki bilgileri eklemek istedi\u011finizde kullan\u0131l\u0131r.<\/p>\n<pre><code>\nSELECT\n    M.MusteriAdi,\n    S.SiparisTarihi,\n    S.ToplamTutar\nFROM\n    Musteriler M\nLEFT JOIN\n    Siparisler S ON 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\u015fterinin sipari\u015fi yoksa, sipari\u015f bilgileri NULL olarak g\u00f6sterilir.<\/p>\n<h4>RIGHT JOIN (RIGHT OUTER JOIN)<\/h4>\n<p>RIGHT JOIN, LEFT JOIN'in tam tersidir. Sa\u011f tablodaki t\u00fcm sat\u0131rlar\u0131 ve sol tablodaki e\u015fle\u015fen sat\u0131rlar\u0131 d\u00f6nd\u00fcr\u00fcr. Sol tabloda e\u015fle\u015fen bir sat\u0131r yoksa, sa\u011f tablodaki sat\u0131r yine de d\u00f6nd\u00fcr\u00fcl\u00fcr ve sol tablodan gelen s\u00fctunlar i\u00e7in NULL de\u011ferler atan\u0131r. Kullan\u0131m senaryosu LEFT JOIN ile benzerdir, sadece odak noktas\u0131 sa\u011f tablodad\u0131r.<\/p>\n<pre><code>\nSELECT\n    M.MusteriAdi,\n    S.SiparisTarihi,\n    S.ToplamTutar\nFROM\n    Musteriler M\nRIGHT JOIN\n    Siparisler S ON M.MusteriID = S.MusteriID;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, t\u00fcm sipari\u015fleri listeler; e\u011fer bir sipari\u015fin m\u00fc\u015fterisi yoksa (ki bu normalde referans b\u00fct\u00fcnl\u00fc\u011f\u00fc nedeniyle olmamal\u0131d\u0131r), m\u00fc\u015fteri bilgileri NULL olarak g\u00f6sterilir.<\/p>\n<h4>FULL OUTER JOIN<\/h4>\n<p>FULL OUTER JOIN, hem sol hem de sa\u011f tablodaki t\u00fcm sat\u0131rlar\u0131 d\u00f6nd\u00fcr\u00fcr. E\u011fer bir tabloda e\u015fle\u015fen bir sat\u0131r yoksa, di\u011fer tablodan gelen s\u00fctunlar i\u00e7in NULL de\u011ferler atan\u0131r. Her iki tablodaki t\u00fcm kay\u0131tlar\u0131, e\u015fle\u015fen veya e\u015fle\u015fmeyen t\u00fcm durumlar\u0131yla g\u00f6rmek istedi\u011finizde kullan\u0131l\u0131r.<\/p>\n<pre><code>\nSELECT\n    M.MusteriAdi,\n    S.SiparisTarihi,\n    S.ToplamTutar\nFROM\n    Musteriler M\nFULL OUTER JOIN\n    Siparisler S ON M.MusteriID = S.MusteriID;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, t\u00fcm m\u00fc\u015fterileri ve t\u00fcm sipari\u015fleri listeler. E\u015fle\u015fmeyen durumlarda ilgili s\u00fctunlar NULL olur.<\/p>\n<h3>\u0130leri D\u00fczey Join Teknikleri<\/h3>\n<p>Temel Join t\u00fcrlerinin \u00f6tesinde, belirli senaryolar i\u00e7in daha \u00f6zel Join teknikleri de bulunmaktad\u0131r. Bu teknikler, daha karma\u015f\u0131k veri birle\u015ftirme ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>SELF JOIN<\/h4>\n<p>SELF JOIN, bir tablonun kendisiyle birle\u015ftirilmesidir. Bu genellikle ayn\u0131 tablodaki sat\u0131rlar\u0131 birbiriyle kar\u015f\u0131la\u015ft\u0131rmak veya hiyerar\u015fik verileri sorgulamak i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir \u00e7al\u0131\u015fan\u0131n y\u00f6neticisini ayn\u0131 \"\u00c7al\u0131\u015fanlar\" tablosundan bulmak i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code>\nSELECT\n    E.CalisanAdi AS Calisan,\n    M.CalisanAdi AS Yonetici\nFROM\n    Calisanlar E\nINNER JOIN\n    Calisanlar M ON E.YoneticiID = M.CalisanID;\n<\/pre>\n<p><\/code><\/p>\n<p>Burada, \"Calisanlar\" tablosu iki farkl\u0131 alias (E ve M) ile kullan\u0131larak kendi i\u00e7inde birle\u015ftirilmi\u015ftir.<\/p>\n<h4>CROSS JOIN<\/h4>\n<p>CROSS JOIN, birle\u015ftirilen iki tablonun t\u00fcm olas\u0131 kombinasyonlar\u0131n\u0131 (Kartezyen \u00e7arp\u0131m\u0131n\u0131) d\u00f6nd\u00fcr\u00fcr. Genellikle \u00e7ok b\u00fcy\u00fck sonu\u00e7 k\u00fcmeleri \u00fcretti\u011fi i\u00e7in dikkatli kullan\u0131lmal\u0131d\u0131r. Herhangi bir ON ko\u015fulu gerektirmez.<\/p>\n<pre><code>\nSELECT\n    U.UrunAdi,\n    R.RenkAdi\nFROM\n    Urunler U\nCROSS JOIN\n    Renkler R;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, her \u00fcr\u00fcn i\u00e7in her rengin bir kombinasyonunu d\u00f6nd\u00fcrecektir.<\/p>\n<h4>JOIN Kullan\u0131m\u0131nda Dikkat Edilmesi Gerekenler<\/h4>\n<p>Joins kullan\u0131rken performans ve do\u011fruluk a\u00e7\u0131s\u0131ndan baz\u0131 noktalara dikkat etmek \u00f6nemlidir. Gereksiz Join'lerden ka\u00e7\u0131nmak, do\u011fru Join t\u00fcr\u00fcn\u00fc se\u00e7mek ve Join ko\u015fullar\u0131nda indekslenmi\u015f s\u00fctunlar\u0131 kullanmak sorgu performans\u0131n\u0131 art\u0131r\u0131r. Ayr\u0131ca, Join ko\u015fullar\u0131n\u0131 do\u011fru bir \u015fekilde tan\u0131mlamak, yanl\u0131\u015f veya eksik veri k\u00fcmeleri elde etmenizi engeller.<\/p>\n<h3>Pencere Fonksiyonlar\u0131na Giri\u015f<\/h3>\n<p>Pencere fonksiyonlar\u0131 (Window Functions), SQL'in en g\u00fc\u00e7l\u00fc analitik \u00f6zelliklerinden biridir. Bir sat\u0131r\u0131n bir \"pencere\" veya \"\u00e7er\u00e7eve\" i\u00e7indeki di\u011fer sat\u0131rlarla ili\u015fkisini hesaplaman\u0131za olanak tan\u0131r. Bu, grup baz\u0131nda toplamlar, ortalamalar, s\u0131ralamalar veya di\u011fer analitik de\u011ferleri hesaplarken, orijinal sat\u0131r detaylar\u0131n\u0131 kaybetmemenizi sa\u011flar.<\/p>\n<h4>Pencere Fonksiyonlar\u0131 Nedir?<\/h4>\n<p>Pencere fonksiyonlar\u0131, bir grup sat\u0131r \u00fczerinde hesaplamalar yapar ve her sat\u0131r i\u00e7in ayr\u0131 bir sonu\u00e7 d\u00f6nd\u00fcr\u00fcr. Geleneksel GROUP BY ile yap\u0131lan toplama i\u015flemlerinden farkl\u0131 olarak, pencere fonksiyonlar\u0131 her sat\u0131r i\u00e7in orijinal detaylar\u0131 korurken, ayn\u0131 zamanda ilgili grup i\u00e7indeki bir de\u011feri de g\u00f6sterebilir. Bu, raporlama ve analiz i\u00e7in \u00e7ok esnek bir yap\u0131 sunar.<\/p>\n<h4>OVER() Yan T\u00fcmcesinin Rol\u00fc<\/h4>\n<p>T\u00fcm pencere fonksiyonlar\u0131, <code>OVER()<\/code> yan t\u00fcmcesi ile birlikte kullan\u0131l\u0131r. <code>OVER()<\/code>, fonksiyonun hangi sat\u0131r k\u00fcmesi \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131n\u0131 tan\u0131mlayan \"pencereyi\" belirler. Bu pencere, sorgu taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen sonu\u00e7 k\u00fcmesinin bir alt k\u00fcmesidir.<\/p>\n<h4>PARTITION BY ve ORDER BY ile Gruplama<\/h4>\n<ul>\n<li><code>PARTITION BY<\/code>: Sonu\u00e7 k\u00fcmesini, belirtilen s\u00fctunlara g\u00f6re mant\u0131ksal gruplara (b\u00f6l\u00fcmlere) ay\u0131r\u0131r. Pencere fonksiyonu, her b\u00f6l\u00fcm i\u00e7inde ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015f\u0131r. GROUP BY'dan farkl\u0131 olarak, PARTITION BY orijinal sat\u0131rlar\u0131 gruplamaz ve tek bir sat\u0131r d\u00f6nd\u00fcrmez; her sat\u0131r i\u00e7in bir de\u011fer d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>ORDER BY<\/code>: Her b\u00f6l\u00fcm i\u00e7indeki sat\u0131rlar\u0131n s\u0131ralamas\u0131n\u0131 belirler. Bu, \u00f6zellikle s\u0131ralama tabanl\u0131 veya ard\u0131\u015f\u0131k de\u011ferleri hesaplayan pencere fonksiyonlar\u0131 i\u00e7in kritik \u00f6neme sahiptir (\u00f6rn: ROW_NUMBER, LAG, LEAD).<\/li>\n<\/ul>\n<pre><code>\nSELECT\n    CalisanAdi,\n    Departman,\n    Maas,\n    AVG(Maas) OVER (PARTITION BY Departman) AS DepartmanOrtalamaMaas\nFROM\n    Calisanlar;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, her \u00e7al\u0131\u015fan\u0131n departman ortalama maa\u015f\u0131 hesaplan\u0131rken, her \u00e7al\u0131\u015fan\u0131n kendi maa\u015f bilgisi de korunur.<\/p>\n<h3>Yayg\u0131n Pencere Fonksiyonlar\u0131 ve Uygulamalar\u0131<\/h3>\n<p>Pencere fonksiyonlar\u0131, farkl\u0131 kategorilere ayr\u0131l\u0131r ve \u00e7e\u015fitli analitik ihtiya\u00e7lar\u0131 kar\u015f\u0131lar.<\/p>\n<h4>S\u0131ralama Fonksiyonlar\u0131 (ROW_NUMBER, RANK, DENSE_RANK, NTILE)<\/h4>\n<ul>\n<li><code>ROW_NUMBER()<\/code>: Her b\u00f6l\u00fcmdeki sat\u0131rlara benzersiz, ard\u0131\u015f\u0131k bir say\u0131 atar.<\/li>\n<li><code>RANK()<\/code>: Ayn\u0131 de\u011ferlere sahip sat\u0131rlara ayn\u0131 s\u0131ralamay\u0131 verir ve sonraki s\u0131ralamay\u0131 atlar (\u00f6rn: 1, 2, 2, 4).<\/li>\n<li><code>DENSE_RANK()<\/code>: Ayn\u0131 de\u011ferlere sahip sat\u0131rlara ayn\u0131 s\u0131ralamay\u0131 verir ancak sonraki s\u0131ralamay\u0131 atlamaz (\u00f6rn: 1, 2, 2, 3).<\/li>\n<li><code>NTILE(n)<\/code>: Sat\u0131rlar\u0131 belirtilen 'n' say\u0131da gruba b\u00f6ler ve her gruba bir say\u0131 atar.<\/li>\n<\/ul>\n<pre><code>\nSELECT\n    UrunAdi,\n    Kategori,\n    SatisMiktari,\n    ROW_NUMBER() OVER (PARTITION BY Kategori ORDER BY SatisMiktari DESC) AS KategoriSira\nFROM\n    UrunSatislar;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, her kategori i\u00e7inde \u00fcr\u00fcnleri sat\u0131\u015f miktar\u0131na g\u00f6re s\u0131ralar.<\/p>\n<h4>Analitik Fonksiyonlar (LAG, LEAD, FIRST_VALUE, LAST_VALUE)<\/h4>\n<ul>\n<li><code>LAG(s\u00fctun, offset, default)<\/code>: Ge\u00e7erli sat\u0131rdan 'offset' kadar \u00f6nceki sat\u0131rdaki bir s\u00fctunun de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>LEAD(s\u00fctun, offset, default)<\/code>: Ge\u00e7erli sat\u0131rdan 'offset' kadar sonraki sat\u0131rdaki bir s\u00fctunun de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>FIRST_VALUE(s\u00fctun)<\/code>: Pencere i\u00e7indeki ilk sat\u0131r\u0131n belirtilen s\u00fctun de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<li><code>LAST_VALUE(s\u00fctun)<\/code>: Pencere i\u00e7indeki son sat\u0131r\u0131n belirtilen s\u00fctun de\u011ferini d\u00f6nd\u00fcr\u00fcr.<\/li>\n<\/ul>\n<pre><code>\nSELECT\n    SatisTarihi,\n    Bolge,\n    ToplamSatis,\n    LAG(ToplamSatis, 1, 0) OVER (PARTITION BY Bolge ORDER BY SatisTarihi) AS OncekiAySatis\nFROM\n    AylikSatislar;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnek, her b\u00f6lge i\u00e7in bir \u00f6nceki ay\u0131n sat\u0131\u015f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h4>Toplama Fonksiyonlar\u0131 (SUM, AVG, COUNT, MIN, MAX) Pencere Fonksiyonu Olarak<\/h4>\n<p>Geleneksel toplama fonksiyonlar\u0131 (SUM, AVG, COUNT, MIN, MAX) da <code>OVER()<\/code> yan t\u00fcmcesiyle birlikte kullan\u0131larak pencere fonksiyonu olarak i\u015flev g\u00f6rebilir. Bu, gruplama yapmadan her sat\u0131r i\u00e7in grup toplam\u0131n\u0131 veya ortalamas\u0131n\u0131 g\u00f6stermenizi sa\u011flar.<\/p>\n<pre><code>\nSELECT\n    CalisanAdi,\n    Departman,\n    Maas,\n    SUM(Maas) OVER (PARTITION BY Departman) AS DepartmanToplamMaas\nFROM\n    Calisanlar;\n<\/pre>\n<p><\/code><\/p>\n<p>Her \u00e7al\u0131\u015fan\u0131n kendi maa\u015f\u0131n\u0131 ve ait oldu\u011fu departman\u0131n toplam maa\u015f\u0131n\u0131 ayn\u0131 sat\u0131rda g\u00f6rebiliriz.<\/p>\n<h3>Joins ve Pencere Fonksiyonlar\u0131n\u0131n Birlikte Kullan\u0131m\u0131<\/h3>\n<p>Joins ve pencere fonksiyonlar\u0131n\u0131 birle\u015ftirmek, \u00e7ok daha karma\u015f\u0131k ve g\u00fc\u00e7l\u00fc analitik sorgular olu\u015fturman\u0131za olanak tan\u0131r. Bu kombinasyon, farkl\u0131 tablolardan gelen verileri birle\u015ftirip, bu birle\u015ftirilmi\u015f veri k\u00fcmesi \u00fczerinde geli\u015fmi\u015f analizler yapman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Karma\u015f\u0131k Raporlama Senaryolar\u0131<\/h4>\n<p>\u00d6rne\u011fin, bir \u015firketin farkl\u0131 departmanlardaki \u00e7al\u0131\u015fanlar\u0131n\u0131n maa\u015flar\u0131n\u0131, departman ortalamalar\u0131yla birlikte g\u00f6rmek ve ayn\u0131 zamanda her \u00e7al\u0131\u015fan\u0131n kendi departman\u0131ndaki s\u0131ralamas\u0131n\u0131 belirlemek isteyebilirsiniz. Bu t\u00fcr senaryolar, hem Joins hem de pencere fonksiyonlar\u0131n\u0131n entegre kullan\u0131m\u0131n\u0131 gerektirir.<\/p>\n<h4>\u00d6rnek Uygulama: En Y\u00fcksek Sat\u0131\u015flar\u0131 Bulma<\/h4>\n<p>M\u00fc\u015fterilerin sipari\u015flerini birle\u015ftirip, her m\u00fc\u015fterinin en y\u00fcksek sipari\u015fini bulmak ve t\u00fcm sipari\u015fleri listelerken bu bilgiyi g\u00f6stermek i\u00e7in a\u015fa\u011f\u0131daki gibi bir yakla\u015f\u0131m izlenebilir:<\/p>\n<pre><code>\nSELECT\n    M.MusteriAdi,\n    S.SiparisID,\n    S.ToplamTutar,\n    MAX(S.ToplamTutar) OVER (PARTITION BY M.MusteriID) AS MusteriEnYuksekSiparis\nFROM\n    Musteriler M\nINNER JOIN\n    Siparisler S ON M.MusteriID = S.MusteriID\nORDER BY\n    M.MusteriAdi, S.SiparisTarihi;\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sorgu, her m\u00fc\u015fterinin t\u00fcm sipari\u015flerini listelerken, ayn\u0131 zamanda o m\u00fc\u015fterinin verdi\u011fi en y\u00fcksek tutarl\u0131 sipari\u015fi de her sat\u0131rda g\u00f6sterir.<\/p>\n<h4>Performans Etkileri ve Optimizasyon<\/h4>\n<p>Joins ve pencere fonksiyonlar\u0131n\u0131n birle\u015fimi g\u00fc\u00e7l\u00fc olsa da, performans \u00fczerinde \u00f6nemli etkileri olabilir. B\u00fcy\u00fck veri k\u00fcmelerinde bu fonksiyonlar\u0131 kullan\u0131rken sorgu optimizasyonuna dikkat etmek gerekir. Do\u011fru indeksleme, gereksiz Join'lerden ka\u00e7\u0131nma ve pencere fonksiyonlar\u0131n\u0131n <code>PARTITION BY<\/code> ve <code>ORDER BY<\/code> yan t\u00fcmcelerini dikkatli kullanma, performans\u0131 art\u0131rabilir.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>SQL sorgular\u0131n\u0131z\u0131n hem do\u011fru sonu\u00e7lar \u00fcretmesini hem de verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir.<\/p>\n<h4>\u0130ndekslerin \u00d6nemi<\/h4>\n<p>Joins ko\u015fullar\u0131nda kullan\u0131lan s\u00fctunlara (\u00f6zellikle yabanc\u0131 anahtarlara) ve <code>PARTITION BY<\/code> ile <code>ORDER BY<\/code> yan t\u00fcmcelerinde kullan\u0131lan s\u00fctunlara indeks eklemek, sorgu performans\u0131n\u0131 dramatik \u015fekilde art\u0131r\u0131r. \u0130ndeksler, veritaban\u0131n\u0131n ilgili sat\u0131rlar\u0131 daha h\u0131zl\u0131 bulmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h4>Do\u011fru Join T\u00fcr\u00fcn\u00fc Se\u00e7mek<\/h4>\n<p>\u0130htiyac\u0131n\u0131za en uygun Join t\u00fcr\u00fcn\u00fc se\u00e7mek hem do\u011fru sonu\u00e7lar alman\u0131z\u0131 hem de gereksiz veri i\u015flemeyi \u00f6nlemenizi sa\u011flar. \u00d6rne\u011fin, sadece e\u015fle\u015fen kay\u0131tlar\u0131 istiyorsan\u0131z INNER JOIN kullanmak, LEFT JOIN'e g\u00f6re daha performansl\u0131 olabilir \u00e7\u00fcnk\u00fc daha az veri i\u015fler.<\/p>\n<h4>Pencere Fonksiyonlar\u0131nda Optimizasyon<\/h4>\n<p>Pencere fonksiyonlar\u0131n\u0131n <code>PARTITION BY<\/code> ve <code>ORDER BY<\/code> k\u0131s\u0131mlar\u0131nda kullan\u0131lan s\u00fctunlar \u00fczerinde indeksler oldu\u011fundan emin olun. Ayr\u0131ca, <code>RANGE<\/code> veya <code>ROWS<\/code> yan t\u00fcmcelerini kullanarak pencere \u00e7er\u00e7evesini daraltmak, \u00f6zellikle b\u00fcy\u00fck veri k\u00fcmelerinde performans\u0131 art\u0131rabilir.<\/p>\n<h4>Sorgu Planlar\u0131n\u0131 Anlamak<\/h4>\n<p>Veritaban\u0131 y\u00f6netim sistemleri, her sorgu i\u00e7in bir y\u00fcr\u00fctme plan\u0131 olu\u015fturur. Bu planlar\u0131 incelemek, sorgunuzun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, hangi ad\u0131mlar\u0131n en \u00e7ok zaman ald\u0131\u011f\u0131n\u0131 ve potansiyel performans darbo\u011fazlar\u0131n\u0131 belirlemenize yard\u0131mc\u0131 olur. \u00c7o\u011fu RDBMS, <code>EXPLAIN<\/code> veya <code>EXPLAIN ANALYZE<\/code> gibi komutlarla sorgu planlar\u0131n\u0131 g\u00f6r\u00fcnt\u00fcleme imkan\u0131 sunar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>SQL'deki Joins ve Pencere Fonksiyonlar\u0131, ili\u015fkisel veritabanlar\u0131ndan anlaml\u0131 bilgiler \u00e7\u0131karmak i\u00e7in vazge\u00e7ilmez ara\u00e7lard\u0131r. Joins, farkl\u0131 tablolardaki verileri bir araya getirerek b\u00fct\u00fcnsel bir g\u00f6r\u00fcn\u00fcm sa\u011flarken, Pencere Fonksiyonlar\u0131, veri detaylar\u0131n\u0131 kaybetmeden karma\u015f\u0131k analitik hesaplamalar yapma esnekli\u011fi sunar. Bu iki g\u00fcc\u00fc etkin bir \u015fekilde birle\u015ftirmek, veri analistleri ve geli\u015ftiriciler i\u00e7in g\u00fc\u00e7l\u00fc raporlama ve i\u00e7g\u00f6r\u00fc yeteneklerinin kap\u0131s\u0131n\u0131 a\u00e7ar. Do\u011fru Join t\u00fcr\u00fcn\u00fc se\u00e7mek, pencere fonksiyonlar\u0131n\u0131 uygun \u015fekilde yap\u0131land\u0131rmak ve performans ipu\u00e7lar\u0131n\u0131 uygulamak, veritaban\u0131 sorgular\u0131n\u0131z\u0131n verimlili\u011fini ve do\u011frulu\u011funu \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r. Bu ara\u00e7lara hakim olmak, veri odakl\u0131 d\u00fcnyada rekabet avantaj\u0131 sa\u011flaman\u0131n anahtarlar\u0131ndan biridir.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>1. INNER JOIN ile LEFT JOIN aras\u0131ndaki temel fark nedir?<\/h4>\n<p>INNER JOIN, sadece her iki tabloda da e\u015fle\u015fen kay\u0131tlara sahip sat\u0131rlar\u0131 d\u00f6nd\u00fcr\u00fcr. LEFT JOIN ise sol tablodaki t\u00fcm sat\u0131rlar\u0131 ve sa\u011f tablodaki e\u015fle\u015fen sat\u0131rlar\u0131 d\u00f6nd\u00fcr\u00fcr; sa\u011f tabloda e\u015fle\u015fme yoksa NULL de\u011ferler getirir. Yani LEFT JOIN, sol tablonun t\u00fcm verilerini korur.<\/p>\n<h4>2. Pencere fonksiyonlar\u0131 neden GROUP BY'dan daha esnektir?<\/h4>\n<p>GROUP BY, sat\u0131rlar\u0131 gruplar ve her grup i\u00e7in tek bir \u00f6zet sat\u0131r d\u00f6nd\u00fcr\u00fcr, bu da orijinal sat\u0131r detaylar\u0131n\u0131 kaybetmenize neden olur. Pencere fonksiyonlar\u0131 ise, her orijinal sat\u0131r i\u00e7in hesaplama yapar ve orijinal sat\u0131r detaylar\u0131n\u0131 korurken, ilgili grubun (pencerenin) \u00f6zet bilgilerini de ayn\u0131 sat\u0131rda g\u00f6sterebilir.<\/p>\n<h4>3. PARTITION BY ve ORDER BY'\u0131n pencere fonksiyonlar\u0131ndaki rol\u00fc nedir?<\/h4>\n<p>PARTITION BY, pencere fonksiyonunun \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131 veri k\u00fcmesini mant\u0131ksal b\u00f6l\u00fcmlere ay\u0131r\u0131r. Her b\u00f6l\u00fcm ba\u011f\u0131ms\u0131z olarak i\u015flenir. ORDER BY ise, her b\u00f6l\u00fcm i\u00e7indeki sat\u0131rlar\u0131n s\u0131ralamas\u0131n\u0131 belirler, bu da \u00f6zellikle s\u0131ralama ve ard\u0131\u015f\u0131k de\u011ferlere dayal\u0131 fonksiyonlar (ROW_NUMBER, LAG, LEAD) i\u00e7in \u00f6nemlidir.<\/p>\n<h4>4. Hangi durumlarda FULL OUTER JOIN kullanmal\u0131y\u0131m?<\/h4>\n<p>FULL OUTER JOIN, her iki tablodaki t\u00fcm kay\u0131tlar\u0131, e\u015fle\u015fen veya e\u015fle\u015fmeyen t\u00fcm durumlar\u0131yla g\u00f6rmek istedi\u011finizde kullan\u0131l\u0131r. \u00d6rne\u011fin, iki farkl\u0131 listenin (\u00f6rn: t\u00fcm m\u00fc\u015fteriler ve t\u00fcm sipari\u015fler) tamam\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131rmak ve hangi kay\u0131tlar\u0131n di\u011fer tabloda e\u015fle\u015feninin olmad\u0131\u011f\u0131n\u0131 g\u00f6rmek istedi\u011finizde faydal\u0131d\u0131r.<\/p>\n<h4>5. Pencere fonksiyonlar\u0131 performans sorunlar\u0131na yol a\u00e7abilir mi?<\/h4>\n<p>Evet, \u00f6zellikle b\u00fcy\u00fck veri k\u00fcmelerinde ve karma\u015f\u0131k <code>PARTITION BY<\/code>\/<code>ORDER BY<\/code> ifadeleriyle kullan\u0131ld\u0131\u011f\u0131nda performans sorunlar\u0131na yol a\u00e7abilir. Performans\u0131 art\u0131rmak i\u00e7in ilgili s\u00fctunlara indeks eklemek, sorgu planlar\u0131n\u0131 analiz etmek ve pencere \u00e7er\u00e7evesini (ROWS\/RANGE) do\u011fru \u015fekilde tan\u0131mlamak \u00f6nemlidir.<\/p>\n","protected":false},"excerpt":{"rendered":"\u0130li\u015fkisel veritabanlar\u0131, modern veri y\u00f6netiminin temelini olu\u015fturur ve verileri organize etme, saklama ve eri\u015fme bi\u00e7imimizde kritik bir rol oynar.","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":[1],"tags":[],"class_list":{"0":"post-41110","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f\" \/>\n<meta property=\"og:description\" content=\"\u0130li\u015fkisel veritabanlar\u0131, modern veri y\u00f6netiminin temelini olu\u015fturur ve verileri organize etme, saklama ve eri\u015fme bi\u00e7imimizde kritik bir rol oynar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-03T14:00:34+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f\",\"datePublished\":\"2026-03-03T14:00:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/\"},\"wordCount\":2649,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/\",\"name\":\"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-03-03T14:00:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f\"}]},{\"@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":"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/","og_locale":"tr_TR","og_type":"article","og_title":"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f","og_description":"\u0130li\u015fkisel veritabanlar\u0131, modern veri y\u00f6netiminin temelini olu\u015fturur ve verileri organize etme, saklama ve eri\u015fme bi\u00e7imimizde kritik bir rol oynar.","og_url":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-03-03T14:00:34+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f","datePublished":"2026-03-03T14:00:34+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/"},"wordCount":2649,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/","url":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/","name":"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-03-03T14:00:34+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/iliskisel-veritabanlarinda-joins-ve-pencere-fonksiyonlari-derinlemesine-bir-bakis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"\u0130li\u015fkisel Veritabanlar\u0131nda Joins ve Pencere Fonksiyonlar\u0131: Derinlemesine Bir Bak\u0131\u015f"}]},{"@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\/41110","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=41110"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41110\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}