{"id":32719,"date":"2025-10-25T05:31:33","date_gmt":"2025-10-25T02:31:33","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/"},"modified":"2025-10-25T05:31:33","modified_gmt":"2025-10-25T02:31:33","slug":"alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/","title":{"rendered":"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m"},"content":{"rendered":"<p><body><\/p>\n<p>Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir sorguyla \u00e7\u00f6zemeyece\u011finiz kadar karma\u015f\u0131k bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ne yapars\u0131n\u0131z? \u0130\u015fte bu noktada <strong>alt sorgular<\/strong> ve <strong>i\u00e7 i\u00e7e sorgular<\/strong> devreye girerek, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde hassas ve g\u00fc\u00e7l\u00fc operasyonlar yapman\u0131za olanak tan\u0131r. Bu makale, alt sorgular\u0131n temel prensiplerinden en ileri kullan\u0131m senaryolar\u0131na kadar her \u015feyi kapsayacak, performans ipu\u00e7lar\u0131 sunacak ve pratik \u00f6rneklerle bilginizi peki\u015ftirecektir. Veri d\u00fcnyas\u0131ndaki yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131maya haz\u0131r m\u0131s\u0131n\u0131z?<\/p>\n<p>G\u00fcn\u00fcm\u00fcz veri yo\u011fun d\u00fcnyas\u0131nda, veritabanlar\u0131ndan elde edilen bilgilerin kalitesi ve do\u011frulu\u011fu, i\u015f kararlar\u0131n\u0131n temelini olu\u015fturur. Ancak bazen ihtiya\u00e7 duydu\u011fumuz veriyi tek bir basit <code>SELECT<\/code> deyimiyle almak m\u00fcmk\u00fcn olmayabilir. \u00d6rne\u011fin, &#8220;her departmandaki en y\u00fcksek maa\u015f alan \u00e7al\u0131\u015fan\u0131n ad\u0131n\u0131 bul&#8221; gibi bir talep, standart bir sorgunun \u00f6tesine ge\u00e7er. Bu t\u00fcr senaryolarda, bir sorgunun sonucunu ba\u015fka bir sorgunun girdisi olarak kullanmam\u0131z gerekir ki, i\u015fte tam da bu duruma <strong>alt sorgu<\/strong> (subquery) ya da <strong>i\u00e7 i\u00e7e sorgu<\/strong> (nested query) ad\u0131n\u0131 veririz. Asl\u0131nda, alt sorgular, daha b\u00fcy\u00fck bir sorgunun i\u00e7inde yer alan ve kendi ba\u015f\u0131na \u00e7al\u0131\u015ft\u0131r\u0131labilen ba\u011f\u0131ms\u0131z SQL ifadeleridir. Bu ifadeler, ana sorgunun i\u015fleyi\u015fine katk\u0131da bulunarak daha karma\u015f\u0131k veri filtreleme, toplama ve kar\u015f\u0131la\u015ft\u0131rma i\u015flemleri yapmam\u0131z\u0131 sa\u011flar. Genellikle parantez i\u00e7inde yaz\u0131l\u0131rlar ve ana sorgu taraf\u0131ndan bir de\u011fer, bir sat\u0131r veya bir tablo olarak kullan\u0131l\u0131rlar.<\/p>\n<p>Alt sorgular\u0131n g\u00fcc\u00fc, veri manip\u00fclasyonunda sunduklar\u0131 esneklikten gelir. Geleneksel <code>JOIN<\/code> i\u015flemleriyle \u00e7\u00f6z\u00fclmesi zor veya imkans\u0131z olan problemleri zarif bir \u015fekilde \u00e7\u00f6zebilirler. \u00d6rne\u011fin, belirli bir kriteri kar\u015f\u0131layan \u00fcr\u00fcnleri listelerken, o kriterin kendisinin de ba\u015fka bir sorgu sonucuna ba\u011fl\u0131 oldu\u011fu durumlar olabilir. Veya, belirli bir tarihten sonra hi\u00e7 sat\u0131\u015f yapmam\u0131\u015f m\u00fc\u015fterileri bulmak gibi senaryolarda, \u00f6nce sat\u0131\u015f yapan m\u00fc\u015fterileri bulan bir alt sorguya ihtiya\u00e7 duyulabilir. Bu, veri analizi yeteneklerimizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde geni\u015fletir ve veritaban\u0131 uzmanlar\u0131n\u0131n vazge\u00e7ilmez ara\u00e7lar\u0131ndan biri haline getirir. Ayr\u0131ca, alt sorgular, sorgular\u0131 daha mod\u00fcler ve okunabilir hale getirerek karma\u015f\u0131k i\u015f mant\u0131\u011f\u0131n\u0131 par\u00e7alara ay\u0131rman\u0131za yard\u0131mc\u0131 olur. Dolay\u0131s\u0131yla, bu g\u00fc\u00e7l\u00fc yap\u0131n\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak, sadece veri \u00e7ekmekten \u00f6teye ge\u00e7ip, verilerle hikaye anlatma yetene\u011finizi geli\u015ftirecektir.<\/p>\n<h2>Alt Sorgular Nedir ve Neden \u0130htiya\u00e7 Duyar\u0131z?<\/h2>\n<p>Alt sorgu, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, ba\u015fka bir SQL sorgusunun i\u00e7inde yer alan bir sorgudur. Genellikle parantez i\u00e7ine al\u0131n\u0131r ve ana sorgunun <code>SELECT<\/code>, <code>FROM<\/code>, <code>WHERE<\/code>, <code>HAVING<\/code> veya hatta <code>INSERT<\/code>, <code>UPDATE<\/code>, <code>DELETE<\/code> gibi yan t\u00fcmcelerinde kullan\u0131labilir. Alt sorgular, temel olarak bir sorgunun sonucunu, ba\u015fka bir sorgunun i\u015fleyi\u015fi i\u00e7in girdi olarak kullanma prensibine dayan\u0131r. Bu, tek seferde \u00e7\u00f6z\u00fclmesi zor veya imkans\u0131z olan karma\u015f\u0131k veri isteklerini par\u00e7alara ay\u0131rarak daha y\u00f6netilebilir hale getirmemizi sa\u011flar.<\/p>\n<p>Peki, neden alt sorgulara ihtiya\u00e7 duyar\u0131z? Ana nedeni, veritaban\u0131 sorgular\u0131n\u0131n do\u011fas\u0131nda yatan karma\u015f\u0131kl\u0131kta yatar. Bazen, bir ko\u015fulun kendisi bir dizi veri \u00fczerinde hesaplama gerektirir ya da listelenen verilerin ba\u015fka bir veri k\u00fcmesinde olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek isteriz. \u00d6rne\u011fin, bir veritaban\u0131nda hem sipari\u015fleri hem de m\u00fc\u015fterileri tuttu\u011fumuzu varsayal\u0131m. E\u011fer &#8220;hi\u00e7 sipari\u015f vermemi\u015f m\u00fc\u015fterileri&#8221; bulmak istersek, \u00f6ncelikle sipari\u015f vermi\u015f t\u00fcm m\u00fc\u015fterilerin kimliklerini bulmam\u0131z ve ard\u0131ndan bu kimliklerin m\u00fc\u015fteri tablosunda olmayanlar\u0131 filtrelememiz gerekir. \u0130\u015fte tam da bu iki a\u015famal\u0131 mant\u0131k, alt sorgu kullan\u0131m\u0131n\u0131 gerekli k\u0131lar. Alt sorgular, bu t\u00fcr mant\u0131ksal ad\u0131mlar\u0131 tek bir SQL ifadesi i\u00e7inde birle\u015ftirmemize olanak tan\u0131r, b\u00f6ylece daha az kod yaz\u0131l\u0131r ve veri tutarl\u0131l\u0131\u011f\u0131 daha kolay sa\u011flan\u0131r.<\/p>\n<p>Ayr\u0131ca, alt sorgular <code>JOIN<\/code> i\u015flemlerine alternatif olarak da kullan\u0131labilir, \u00f6zellikle de birle\u015fme ko\u015fulu karma\u015f\u0131k oldu\u011funda veya sadece belirli bir veri alt k\u00fcmesiyle ilgileniyorsak. Ancak, <code>JOIN<\/code>&#8216;lar ve alt sorgular aras\u0131nda performans farklar\u0131 olabilece\u011fini unutmamak \u00f6nemlidir; bu konuya ilerleyen b\u00f6l\u00fcmlerde daha detayl\u0131 de\u011finece\u011fiz. Alt sorgular\u0131n sa\u011flad\u0131\u011f\u0131 en b\u00fcy\u00fck avantajlardan biri, sorguyu daha okunakl\u0131 ve mod\u00fcler hale getirmesidir. Karma\u015f\u0131k bir problemi, daha k\u00fc\u00e7\u00fck ve anla\u015f\u0131l\u0131r par\u00e7alara ay\u0131rarak ad\u0131m ad\u0131m \u00e7\u00f6zmenizi sa\u011flar. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k veritaban\u0131 \u015femalar\u0131yla \u00e7al\u0131\u015f\u0131rken hata ay\u0131klama ve sorgu bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. Alt sorgular sayesinde, bir i\u015f kural\u0131n\u0131 uygularken ge\u00e7ici tablolar olu\u015fturmak zorunda kalmadan, veriyi an\u0131nda filtreleyip i\u015fleyebiliriz. Sonu\u00e7 olarak, alt sorgular, veritaban\u0131 profesyonelleri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 olup, verilerden maksimum de\u011feri elde etmek ad\u0131na g\u00fc\u00e7l\u00fc bir esneklik ve kontrol sunar.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Alt sorgular karma\u015f\u0131k g\u00f6r\u00fcnsede, her zaman i\u00e7eriden d\u0131\u015far\u0131ya do\u011fru, yani en i\u00e7teki parantezden ba\u015flayarak \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 unutmay\u0131n. Bu, sorgunun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlaman\u0131za b\u00fcy\u00fck \u00f6l\u00e7\u00fcde yard\u0131mc\u0131 olacakt\u0131r.\n    <\/div>\n<h2>Farkl\u0131 Alt Sorgu T\u00fcrleri Nelerdir ve Nas\u0131l S\u0131n\u0131fland\u0131r\u0131l\u0131rlar?<\/h2>\n<p>Alt sorgular, SQL sorgular\u0131na esneklik ve g\u00fc\u00e7 katan \u00e7ok y\u00f6nl\u00fc ara\u00e7lard\u0131r. Ancak t\u00fcm alt sorgular ayn\u0131 \u015fekilde \u00e7al\u0131\u015fmaz veya ayn\u0131 amaca hizmet etmez. Alt sorgular\u0131, d\u00f6nd\u00fcrd\u00fckleri de\u011fer tipine ve ana sorgu ile olan ili\u015fkilerine g\u00f6re farkl\u0131 kategorilere ay\u0131rabiliriz. Bu s\u0131n\u0131fland\u0131rmay\u0131 anlamak, do\u011fru senaryoda do\u011fru alt sorguyu kullanman\u0131z\u0131 sa\u011flayacak temel bir bilgidir.<\/p>\n<p><strong>1. Scalar Alt Sorgular (Tek De\u011fer D\u00f6nd\u00fcren Alt Sorgular):<\/strong> Bu alt sorgular, tek bir de\u011fer (tek bir sat\u0131r ve tek bir s\u00fctun) d\u00f6nd\u00fcr\u00fcrler. Genellikle ana sorgunun <code>SELECT<\/code> veya <code>WHERE<\/code> yan t\u00fcmcesinde kullan\u0131l\u0131rlar ve bir sabit de\u011fer gibi davran\u0131rlar. \u00d6rne\u011fin, &#8220;ortalama maa\u015f\u0131n \u00fczerinde maa\u015f alan \u00e7al\u0131\u015fanlar\u0131 listele&#8221; sorgusunda, ortalama maa\u015f\u0131 hesaplayan alt sorgu, tek bir say\u0131sal de\u011fer d\u00f6nd\u00fcrecektir. Bu t\u00fcr alt sorgular, ana sorgudaki bir de\u011feri ba\u015fka bir hesaplanm\u0131\u015f de\u011ferle kar\u015f\u0131la\u015ft\u0131rmak veya tamamlamak i\u00e7in idealdir. \u00d6rne\u011fin, bir \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131, ortalama \u00fcr\u00fcn fiyat\u0131yla birlikte g\u00f6stermek istedi\u011finizde kullan\u0131labilirler. Performans a\u00e7\u0131s\u0131ndan genellikle olduk\u00e7a verimlidirler \u00e7\u00fcnk\u00fc sadece bir de\u011fer \u00fcretirler.<\/p>\n<pre><code>\nSELECT UrunAdi, Fiyat,\n       (SELECT AVG(Fiyat) FROM Urunler) AS OrtalamaFiyat\nFROM Urunler\nWHERE Fiyat > (SELECT AVG(Fiyat) FROM Urunler);\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>(SELECT AVG(Fiyat) FROM Urunler)<\/code> ifadesi hem <code>SELECT<\/code> hem de <code>WHERE<\/code> yan t\u00fcmcelerinde kullan\u0131lan bir skalar alt sorgudur.<\/p>\n<p><strong>2. Multi-Row Alt Sorgular (\u00c7oklu Sat\u0131r D\u00f6nd\u00fcren Alt Sorgular):<\/strong> Bu alt sorgular, birden fazla sat\u0131r d\u00f6nd\u00fcrebilirler. Genellikle <code>WHERE<\/code> veya <code>HAVING<\/code> yan t\u00fcmcelerinde, <code>IN<\/code>, <code>NOT IN<\/code>, <code>ANY<\/code>, <code>ALL<\/code>, <code>EXISTS<\/code>, <code>NOT EXISTS<\/code> gibi operat\u00f6rlerle birlikte kullan\u0131l\u0131rlar. \u00d6rne\u011fin, \"belirli bir kategoriye ait \u00fcr\u00fcnler listesinde yer alan m\u00fc\u015fterileri bul\" gibi bir senaryoda, kategoriye ait \u00fcr\u00fcnlerin kimliklerini d\u00f6nd\u00fcren bir multi-row alt sorguya ihtiya\u00e7 duyulur.<\/p>\n<ul>\n<li><code>IN<\/code> \/ <code>NOT IN<\/code>: Bir de\u011ferin alt sorgu taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen de\u011fer k\u00fcmesi i\u00e7inde olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. En yayg\u0131n kullan\u0131md\u0131r.<\/li>\n<li><code>ANY<\/code> \/ <code>SOME<\/code>: Bir de\u011ferin alt sorgu taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen de\u011ferlerin en az biriyle kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda do\u011fru olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. (\u00f6rne\u011fin, <code>> ANY<\/code>, alt sorgu sonu\u00e7lar\u0131n\u0131n en k\u00fc\u00e7\u00fc\u011f\u00fcnden b\u00fcy\u00fck demektir).<\/li>\n<li><code>ALL<\/code>: Bir de\u011ferin alt sorgu taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen t\u00fcm de\u011ferlerle kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda do\u011fru olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. (\u00f6rne\u011fin, <code>> ALL<\/code>, alt sorgu sonu\u00e7lar\u0131n\u0131n en b\u00fcy\u00fc\u011f\u00fcnden b\u00fcy\u00fck demektir).<\/li>\n<li><code>EXISTS<\/code> \/ <code>NOT EXISTS<\/code>: Alt sorgunun herhangi bir sat\u0131r d\u00f6nd\u00fcr\u00fcp d\u00f6nd\u00fcrmedi\u011fini kontrol eder. \u00d6zellikle korelasyonlu alt sorgularda performansl\u0131d\u0131r, \u00e7\u00fcnk\u00fc sadece bir sat\u0131r bulundu\u011funda i\u015flemi durdurabilir.<\/li>\n<\/ul>\n<pre><code>\n-- Hi\u00e7 sipari\u015f vermemi\u015f m\u00fc\u015fterileri bulma\nSELECT MusteriAdi, Email\nFROM Musteriler\nWHERE MusteriID NOT IN (SELECT DISTINCT MusteriID FROM Siparisler);\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>(SELECT DISTINCT MusteriID FROM Siparisler)<\/code> ifadesi, birden fazla m\u00fc\u015fteri ID'si d\u00f6nd\u00fcrebilen bir multi-row alt sorgudur.<\/p>\n<p><strong>3. Table Alt Sorgular (Tablo D\u00f6nd\u00fcren Alt Sorgular):<\/strong> Bu alt sorgular, bir tablo gibi birden fazla sat\u0131r ve birden fazla s\u00fctun d\u00f6nd\u00fcrebilirler. Genellikle ana sorgunun <code>FROM<\/code> yan t\u00fcmcesinde kullan\u0131l\u0131rlar ve bu durumda \"t\u00fcretilmi\u015f tablo\" (derived table) veya \"sat\u0131r i\u00e7i g\u00f6r\u00fcn\u00fcm\" (inline view) olarak adland\u0131r\u0131l\u0131rlar. Sanki ger\u00e7ek bir tabloymu\u015f gibi di\u011fer tablolarla <code>JOIN<\/code> edilebilir veya \u00fczerinde ba\u015fka filtreleme yap\u0131labilir. Bu t\u00fcr alt sorgular, karma\u015f\u0131k raporlama veya ge\u00e7ici olarak grupland\u0131r\u0131lm\u0131\u015f verilere ihtiya\u00e7 duyuldu\u011funda olduk\u00e7a faydal\u0131d\u0131r. \u00d6rne\u011fin, her departmandaki en y\u00fcksek maa\u015f\u0131 bulan ve bu veriyi ana tabloyla birle\u015ftiren bir senaryoda kullan\u0131labilir.<\/p>\n<pre><code>\nSELECT C.CalisanAdi, C.Maa\u015f, D.DepartmanAdi\nFROM Calisanlar C\nINNER JOIN (\n    SELECT DepartmanID, AVG(Maa\u015f) AS OrtalamaDepartmanMaa\u015f\u0131\n    FROM Calisanlar\n    GROUP BY DepartmanID\n) AS DepartmanOrtalamalari ON C.DepartmanID = DepartmanOrtalamalari.DepartmanID\nWHERE C.Maa\u015f > DepartmanOrtalamalari.OrtalamaDepartmanMaa\u015f\u0131;\n    <\/pre>\n<p><\/code><\/p>\n<p>Burada, <code>(SELECT DepartmanID, AVG(Maa\u015f) AS OrtalamaDepartmanMaa\u015f\u0131 FROM Calisanlar GROUP BY DepartmanID) AS DepartmanOrtalamalari<\/code> k\u0131sm\u0131, bir tablo d\u00f6nd\u00fcren bir alt sorgudur.<\/p>\n<p><strong>4. Korelasyonlu Alt Sorgular (Correlated Subqueries):<\/strong> Bu alt sorgular, ana sorgudan gelen verilere ba\u011f\u0131ml\u0131d\u0131r; yani, ana sorgudaki her sat\u0131r i\u00e7in bir kez y\u00fcr\u00fct\u00fcl\u00fcrler. Alt sorgu, ana sorgudan gelen bir de\u011feri referans al\u0131r. Bu durum, mant\u0131ksal olarak \u00e7ok g\u00fc\u00e7l\u00fc olsa da, genellikle performans\u0131 olumsuz etkileyebilir \u00e7\u00fcnk\u00fc her ana sorgu sat\u0131r\u0131 i\u00e7in yeniden hesaplan\u0131rlar. <code>EXISTS<\/code> veya <code>NOT EXISTS<\/code> operat\u00f6rleriyle s\u0131kl\u0131kla kullan\u0131l\u0131rlar. \u00d6rne\u011fin, \"kendi departman\u0131ndaki ortalama maa\u015f\u0131n \u00fczerinde maa\u015f alan \u00e7al\u0131\u015fanlar\u0131 bul\" gibi bir sorgu korelasyonlu bir alt sorgu gerektirir. Ana sorgudan gelen <code>DepartmanID<\/code> bilgisi, alt sorgunun <code>WHERE<\/code> ko\u015fulunda kullan\u0131l\u0131r.<\/p>\n<pre><code>\nSELECT CalisanAdi, DepartmanID, Maa\u015f\nFROM Calisanlar C1\nWHERE Maa\u015f > (\n    SELECT AVG(Maa\u015f)\n    FROM Calisanlar C2\n    WHERE C2.DepartmanID = C1.DepartmanID\n);\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, i\u00e7teki alt sorgu <code>C1.DepartmanID<\/code>'yi kullan\u0131r ve her <code>C1<\/code> sat\u0131r\u0131 i\u00e7in tekrar \u00e7al\u0131\u015f\u0131r. Korelasyonlu alt sorgular, bazen <code>JOIN<\/code> veya <code>CTE<\/code>'lerle daha performansl\u0131 hale getirilebilir.<\/p>\n<p>Bu farkl\u0131 alt sorgu t\u00fcrlerini anlamak, bir veritaban\u0131 sorgusunu optimize etme ve en do\u011fru sonucu elde etme konusunda size b\u00fcy\u00fck avantaj sa\u011flayacakt\u0131r. Her birinin kendi kullan\u0131m senaryolar\u0131 ve performans \u00f6zellikleri bulunmaktad\u0131r.<\/p>\n<h2>Alt Sorgular\u0131 SELECT, FROM ve WHERE Yan T\u00fcmcelerinde Nas\u0131l Kullan\u0131r\u0131z? Ad\u0131m Ad\u0131m \u00d6rnekler<\/h2>\n<p>Alt sorgular\u0131n g\u00fcc\u00fc, SQL'in farkl\u0131 yan t\u00fcmcelerinde esneklikle kullan\u0131labilmelerinden gelir. Her yan t\u00fcmcede kullan\u0131mlar\u0131 farkl\u0131 bir amaca hizmet eder ve belirli senaryolarda olduk\u00e7a faydal\u0131d\u0131r. Bu b\u00f6l\u00fcmde, alt sorgular\u0131n <code>SELECT<\/code>, <code>FROM<\/code> ve <code>WHERE<\/code> yan t\u00fcmcelerinde nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 ad\u0131m ad\u0131m \u00f6rneklerle inceleyece\u011fiz.<\/p>\n<h3>SELECT Yan T\u00fcmcesinde Alt Sorgu Kullan\u0131m\u0131: Hesaplama ve Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p><code>SELECT<\/code> yan t\u00fcmcesinde kullan\u0131lan alt sorgular, genellikle her sat\u0131r i\u00e7in bir de\u011fer hesaplamak veya kar\u015f\u0131la\u015ft\u0131rmak amac\u0131yla kullan\u0131l\u0131r. Bu t\u00fcr alt sorgular genellikle skalar (tek de\u011fer d\u00f6nd\u00fcren) alt sorgular olmak zorundad\u0131r, aksi takdirde bir hata ile kar\u015f\u0131la\u015f\u0131rs\u0131n\u0131z. Genellikle bir anahtar performans g\u00f6stergesi (KPI) veya bir oran hesaplamas\u0131 yapmak istedi\u011fimizde tercih edilirler. \u00d6rne\u011fin, bir \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131 g\u00f6sterirken, t\u00fcm \u00fcr\u00fcnlerin ortalama fiyat\u0131n\u0131 da ayn\u0131 anda g\u00f6rmek isteyebiliriz.<\/p>\n<pre><code>\n-- \u00d6rnek Senaryo: Her \u00e7al\u0131\u015fan\u0131n maa\u015f\u0131n\u0131 ve \u015firketin genel ortalama maa\u015f\u0131n\u0131 listele.\nSELECT\n    CalisanAdi,\n    Maa\u015f,\n    (SELECT AVG(Maa\u015f) FROM Calisanlar) AS GenelOrtalamaMaa\u015f\nFROM\n    Calisanlar;\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>(SELECT AVG(Maa\u015f) FROM Calisanlar)<\/code> ifadesi, her bir \u00e7al\u0131\u015fan sat\u0131r\u0131 i\u00e7in tek bir de\u011fer d\u00f6nd\u00fcren bir alt sorgudur. Bu, okuyucunun her bir \u00e7al\u0131\u015fan\u0131n maa\u015f\u0131n\u0131 genel ortalama ile kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. Benzer \u015fekilde, bir \u00fcr\u00fcn\u00fcn sat\u0131\u015f adedini g\u00f6sterirken, o kategorideki toplam sat\u0131\u015f adedini de bu \u015fekilde g\u00f6sterebiliriz. Bu y\u00f6ntem, raporlama ve analiz ama\u00e7lar\u0131 i\u00e7in olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r, \u00e7\u00fcnk\u00fc ilgili metrikleri tek bir sorgu sonucunda yan yana getirmemizi sa\u011flar.<\/p>\n<h3>FROM Yan T\u00fcmcesinde Alt Sorgu Kullan\u0131m\u0131: T\u00fcretilmi\u015f Tablolar (Derived Tables)<\/h3>\n<p><code>FROM<\/code> yan t\u00fcmcesinde kullan\u0131lan alt sorgular, \"t\u00fcretilmi\u015f tablolar\" veya \"sat\u0131r i\u00e7i g\u00f6r\u00fcn\u00fcmler\" olarak bilinir. Bu alt sorgular, sanki ger\u00e7ek bir tabloyormu\u015f gibi ele al\u0131n\u0131r ve ana sorgu taraf\u0131ndan sorgulan\u0131r veya ba\u015fka tablolarla <code>JOIN<\/code> edilebilir. Birden fazla sat\u0131r ve s\u00fctun d\u00f6nd\u00fcrebilirler. \u00d6zellikle karma\u015f\u0131k gruplama veya toplama i\u015flemleri sonucunda elde edilen veriler \u00fczerinde daha fazla i\u015flem yapmak istedi\u011fimizde bu y\u00f6ntem tercih edilir.<\/p>\n<pre><code>\n-- \u00d6rnek Senaryo: Her departmandaki en y\u00fcksek maa\u015f\u0131 alan \u00e7al\u0131\u015fan\u0131 bul.\nSELECT\n    D.DepartmanAdi,\n    C.CalisanAdi,\n    C.Maa\u015f\nFROM\n    Departmanlar D\nJOIN (\n    SELECT\n        DepartmanID,\n        MAX(Maa\u015f) AS EnYuksekMaa\u015f\n    FROM\n        Calisanlar\n    GROUP BY\n        DepartmanID\n) AS DepartmanEnYuksekMaaslari ON D.DepartmanID = DepartmanEnYuksekMaaslari.DepartmanID\nJOIN\n    Calisanlar C ON C.DepartmanID = DepartmanEnYuksekMaaslari.DepartmanID AND C.Maa\u015f = DepartmanEnYuksekMaaslari.EnYuksekMaa\u015f;\n    <\/pre>\n<p><\/code><\/p>\n<p>Buradaki <code>(SELECT DepartmanID, MAX(Maa\u015f) AS EnYuksekMaa\u015f FROM Calisanlar GROUP BY DepartmanID) AS DepartmanEnYuksekMaaslari<\/code> k\u0131sm\u0131, ana sorgunun <code>FROM<\/code> yan t\u00fcmcesinde yer alan t\u00fcretilmi\u015f bir tablodur. Bu alt sorgu \u00f6nce her departman\u0131n en y\u00fcksek maa\u015f\u0131n\u0131 hesaplar ve ard\u0131ndan bu ge\u00e7ici tablo, departmanlar ve \u00e7al\u0131\u015fanlar tablolar\u0131yla birle\u015ftirilerek istenen sonu\u00e7 elde edilir. Bu yakla\u015f\u0131m, karma\u015f\u0131k raporlama ve analiz senaryolar\u0131nda, veriyi farkl\u0131 boyutlarda grupland\u0131r\u0131p analiz etmede b\u00fcy\u00fck kolayl\u0131k sa\u011flar. T\u00fcretilmi\u015f tablolar, karma\u015f\u0131k sorgular\u0131 daha anla\u015f\u0131l\u0131r par\u00e7alara b\u00f6lme ve SQL'in i\u015flem ad\u0131mlar\u0131n\u0131 netle\u015ftirme konusunda olduk\u00e7a etkilidir.<\/p>\n<h3>WHERE Yan T\u00fcmcesinde Alt Sorgu Kullan\u0131m\u0131: Veri Filtreleme<\/h3>\n<p><code>WHERE<\/code> yan t\u00fcmcesinde kullan\u0131lan alt sorgular, belirli bir ko\u015fulu kar\u015f\u0131layan verileri filtrelemek i\u00e7in kullan\u0131l\u0131r. Bu, alt sorgular\u0131n en yayg\u0131n kullan\u0131m alanlar\u0131ndan biridir. Genellikle <code>IN<\/code>, <code>NOT IN<\/code>, <code>EXISTS<\/code>, <code>NOT EXISTS<\/code>, <code>ANY<\/code>, <code>ALL<\/code> gibi operat\u00f6rlerle birlikte kullan\u0131l\u0131rlar. Ana sorgudaki her sat\u0131r i\u00e7in bir filtreleme ko\u015fulu olu\u015ftururlar.<\/p>\n<pre><code>\n-- \u00d6rnek Senaryo: Hi\u00e7 sat\u0131\u015f yapmam\u0131\u015f m\u00fc\u015fterileri listele.\nSELECT\n    MusteriAdi,\n    Email\nFROM\n    Musteriler\nWHERE\n    MusteriID NOT IN (SELECT DISTINCT MusteriID FROM Siparisler);\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>(SELECT DISTINCT MusteriID FROM Siparisler)<\/code> alt sorgusu, t\u00fcm sipari\u015f veren m\u00fc\u015fteri kimliklerini d\u00f6nd\u00fcr\u00fcr. Ana sorgu ise, bu listede yer almayan m\u00fc\u015fterileri se\u00e7erek, hi\u00e7 sat\u0131\u015f yapmam\u0131\u015f m\u00fc\u015fterileri bulur. Bu, veri analizi ve hedefleme senaryolar\u0131nda olduk\u00e7a pratik bir yakla\u015f\u0131md\u0131r. Benzer \u015fekilde, belirli bir \u00fcr\u00fcn grubunda olmayan veya belirli bir tarihten sonra aktif olmayan kay\u0131tlar\u0131 bulmak i\u00e7in de <code>WHERE<\/code> alt sorgular\u0131 kullan\u0131labilir. Alt sorgular, belirli bir ko\u015fulun dinamik olarak belirlenmesi gerekti\u011fi durumlar i\u00e7in bi\u00e7ilmi\u015f kaftand\u0131r, \u00e7\u00fcnk\u00fc filtreleme ko\u015fulu veritaban\u0131ndaki g\u00fcncel duruma g\u00f6re \u015fekillenir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: <code>EXISTS<\/code> operat\u00f6r\u00fc, alt sorgunun herhangi bir sat\u0131r d\u00f6nd\u00fcr\u00fcp d\u00f6nd\u00fcrmedi\u011fini kontrol eder ve performans\u0131 <code>IN<\/code> operat\u00f6r\u00fcne g\u00f6re daha iyi olabilir, \u00f6zellikle alt sorgunun \u00e7ok b\u00fcy\u00fck veri k\u00fcmeleri d\u00f6nd\u00fcrmesi durumunda. <code>EXISTS<\/code>, bir e\u015fle\u015fme buldu\u011funda alt sorgu y\u00fcr\u00fctmesini durdurur, oysa <code>IN<\/code> t\u00fcm alt sorguyu \u00e7al\u0131\u015ft\u0131rmak zorundad\u0131r.\n    <\/div>\n<p>Bu detayl\u0131 \u00f6rnekler, alt sorgular\u0131n SQL sorgular\u0131n\u0131zda ne kadar \u00e7ok y\u00f6nl\u00fc ve g\u00fc\u00e7l\u00fc olabilece\u011fini g\u00f6stermektedir. Her yan t\u00fcmcede do\u011fru alt sorgu t\u00fcr\u00fcn\u00fc se\u00e7mek, hem sorgunuzun do\u011frulu\u011funu hem de performans\u0131n\u0131 do\u011frudan etkileyecektir. Bu beceriyi geli\u015ftirmek, daha karma\u015f\u0131k veri problemlerini \u00e7\u00f6zme yetene\u011finizi art\u0131racakt\u0131r.<\/p>\n<h2>Pratik Uygulamalar: Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda Alt Sorgular<\/h2>\n<p>Teorik bilgilerin \u00f6tesine ge\u00e7erek, alt sorgular\u0131n ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l kullan\u0131labilece\u011fini incelemek, bu g\u00fc\u00e7l\u00fc arac\u0131n potansiyelini tam olarak anlamam\u0131z\u0131 sa\u011flar. \u0130\u015fte g\u00fcnl\u00fck operasyonlarda veya analitik \u00e7al\u0131\u015fmalarda s\u0131k\u00e7a kar\u015f\u0131m\u0131za \u00e7\u0131kan baz\u0131 vaka analizleri ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<h3>Vaka Analizi 1: En \u0130yi Sat\u0131\u015f Yapan \u00c7al\u0131\u015fanlar\u0131 Belirleme<\/h3>\n<p>Bir e-ticaret \u015firketinin y\u00f6neticisi, ge\u00e7en y\u0131l en y\u00fcksek toplam sat\u0131\u015f hacmine ula\u015fan ilk 5 \u00e7al\u0131\u015fan\u0131 belirlemek istiyor. Ancak, \u00e7al\u0131\u015fanlar\u0131n sadece toplam sat\u0131\u015flar\u0131n\u0131 de\u011fil, ayn\u0131 zamanda bu sat\u0131\u015flar\u0131n \u015firketin genel sat\u0131\u015f ortalamas\u0131na g\u00f6re ne kadar iyi oldu\u011funu da g\u00f6rmek istiyor.<\/p>\n<pre><code>\n-- \u00c7al\u0131\u015fanlar (Calisanlar) ve Sipari\u015fler (Siparisler) tablolar\u0131 oldu\u011funu varsayal\u0131m.\n-- Her sipari\u015fte \u00c7al\u0131\u015fanID ve ToplamTutar bilgileri mevcut.\n\nSELECT\n    C.CalisanAdi,\n    SUM(S.ToplamTutar) AS ToplamSat\u0131\u015f,\n    (SELECT AVG(ToplamTutar) FROM Siparisler) AS OrtalamaSipari\u015fTutar\u0131\nFROM\n    Calisanlar C\nJOIN\n    Siparisler S ON C.CalisanID = S.CalisanID\nGROUP BY\n    C.CalisanAdi\nORDER BY\n    ToplamSat\u0131\u015f DESC\nLIMIT 5;\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>SELECT<\/code> yan t\u00fcmcesindeki skalar alt sorgu, t\u00fcm sipari\u015flerin ortalama tutar\u0131n\u0131 hesaplayarak her \u00e7al\u0131\u015fan\u0131n toplam sat\u0131\u015f\u0131n\u0131n yan\u0131nda genel ortalamay\u0131 da g\u00f6sterir. Bu, y\u00f6neticinin hem bireysel performans\u0131 hem de genel \u015firket performans\u0131n\u0131 ayn\u0131 anda de\u011ferlendirmesini sa\u011flar. Alt sorgu sayesinde, ekstra bir <code>JOIN<\/code> i\u015flemi veya ge\u00e7ici tablo olu\u015fturmaya gerek kalmadan bu bilgiye ula\u015f\u0131yoruz.<\/p>\n<h3>Vaka Analizi 2: Hi\u00e7 Sat\u0131n Alma Yapmam\u0131\u015f M\u00fc\u015fterilere \u00d6zel Teklif G\u00f6nderme<\/h3>\n<p>Bir pazarlama departman\u0131, son 6 ay i\u00e7inde hi\u00e7bir \u00fcr\u00fcn sat\u0131n almam\u0131\u015f mevcut m\u00fc\u015fterileri hedefleyerek \u00f6zel bir indirim kampanyas\u0131 ba\u015flatmak istiyor. Bu m\u00fc\u015fterilerin e-posta adreslerinin listelenmesi gerekiyor.<\/p>\n<pre><code>\n-- M\u00fc\u015fteriler (Musteriler) ve Sipari\u015fler (Siparisler) tablolar\u0131 oldu\u011funu varsayal\u0131m.\n-- Sipari\u015fler tablosunda SiparisTarihi ve MusteriID mevcut.\n\nSELECT\n    MusteriAdi,\n    Email\nFROM\n    Musteriler\nWHERE\n    MusteriID NOT IN (\n        SELECT DISTINCT MusteriID\n        FROM Siparisler\n        WHERE SiparisTarihi >= DATE('now', '-6 months')\n    );\n    <\/pre>\n<p><\/code><\/p>\n<p>Burada <code>WHERE<\/code> yan t\u00fcmcesinde kullan\u0131lan multi-row alt sorgu, son 6 ayda sipari\u015f vermi\u015f t\u00fcm m\u00fc\u015fterilerin kimliklerini getirir. Ana sorgu ise bu listede yer almayan m\u00fc\u015fterileri filtreleyerek hedef kitleyi belirler. Bu, pazarlama ekiplerinin segmentasyon yapmas\u0131n\u0131 ve hedefe y\u00f6nelik kampanyalar olu\u015fturmas\u0131n\u0131 kolayla\u015ft\u0131ran klasik bir kullan\u0131m senaryosudur.<\/p>\n<h3>Vaka Analizi 3: Departman Baz\u0131nda En Y\u00fcksek Maa\u015f Alanlar\u0131 Bulma<\/h3>\n<p>Bir insan kaynaklar\u0131 departman\u0131, her departmandaki en y\u00fcksek maa\u015f\u0131 alan \u00e7al\u0131\u015fanlar\u0131 belirlemek istiyor. Bu bilgi, terfi ve performans de\u011ferlendirme s\u00fcre\u00e7lerinde kullan\u0131lacakt\u0131r.<\/p>\n<pre><code>\n-- \u00c7al\u0131\u015fanlar (Calisanlar) ve Departmanlar (Departmanlar) tablolar\u0131 oldu\u011funu varsayal\u0131m.\n\nSELECT\n    D.DepartmanAdi,\n    C.CalisanAdi,\n    C.Maa\u015f\nFROM\n    Calisanlar C\nJOIN\n    Departmanlar D ON C.DepartmanID = D.DepartmanID\nWHERE\n    C.Maa\u015f = (SELECT MAX(Maa\u015f) FROM Calisanlar WHERE DepartmanID = C.DepartmanID);\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu senaryoda, <code>WHERE<\/code> yan t\u00fcmcesinde korelasyonlu bir alt sorgu kullan\u0131lm\u0131\u015ft\u0131r. \u0130\u00e7teki alt sorgu, ana sorgudaki her \u00e7al\u0131\u015fan\u0131n departman\u0131na g\u00f6re o departmandaki en y\u00fcksek maa\u015f\u0131 hesaplar. Ana sorgu daha sonra bu en y\u00fcksek maa\u015fa sahip \u00e7al\u0131\u015fanlar\u0131 filtreler. Bu, \u00f6zellikle her bir grup i\u00e7indeki en y\u00fcksek veya en d\u00fc\u015f\u00fck de\u011ferleri bulmak i\u00e7in olduk\u00e7a etkili bir y\u00f6ntemdir, ancak performans a\u00e7\u0131s\u0131ndan dikkatli olunmas\u0131 gerekir \u00e7\u00fcnk\u00fc alt sorgu ana sorgudaki her sat\u0131r i\u00e7in tekrar \u00e7al\u0131\u015f\u0131r.<\/p>\n<h3>Vaka Analizi 4: Ge\u00e7en Ay Kay\u0131t Olan Kullan\u0131c\u0131lar\u0131n Ortalama Sipari\u015f De\u011feri<\/h3>\n<p>Bir analist, ge\u00e7en ay sisteme yeni kay\u0131t olan kullan\u0131c\u0131lar\u0131n ilk sipari\u015flerinin ortalama de\u011ferini \u00f6\u011frenmek istiyor. Bu bilgi, yeni kullan\u0131c\u0131 kazan\u0131m stratejilerinin etkinli\u011fini \u00f6l\u00e7mek i\u00e7in kritik.<\/p>\n<pre><code>\n-- Kullanicilar (Kullanicilar) ve Siparisler (Siparisler) tablolar\u0131 oldu\u011funu varsayal\u0131m.\n-- Kullanicilar tablosunda KayitTarihi, Siparisler tablosunda MusteriID ve ToplamTutar mevcut.\n\nSELECT\n    AVG(S.ToplamTutar) AS OrtalamaIlkSiparisDegeri\nFROM\n    Siparisler S\nWHERE\n    S.MusteriID IN (\n        SELECT MusteriID\n        FROM Kullanicilar\n        WHERE KayitTarihi >= DATE('now', 'start of month', '-1 month')\n          AND KayitTarihi < DATE('now', 'start of month')\n    )\n    AND S.SiparisID = ( -- Her m\u00fc\u015fteri i\u00e7in ilk sipari\u015fi bulmak\n        SELECT MIN(SiparisID)\n        FROM Siparisler S2\n        WHERE S2.MusteriID = S.MusteriID\n    );\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu karma\u015f\u0131k senaryo, hem <code>IN<\/code> operat\u00f6r\u00fcyle yeni kay\u0131t olan m\u00fc\u015fterileri filtrelemek i\u00e7in bir alt sorgu hem de her m\u00fc\u015fterinin ilk sipari\u015fini bulmak i\u00e7in korelasyonlu ba\u015fka bir alt sorgu kullan\u0131r. Bu t\u00fcr \u00e7oklu alt sorgu kullan\u0131mlar\u0131, belirli i\u015f gereksinimlerini kar\u015f\u0131lamak i\u00e7in veriyi birden fazla katmanda filtrelemeyi ve i\u015flemeyi m\u00fcmk\u00fcn k\u0131lar. Ger\u00e7ek d\u00fcnya problemleri genellikle bu t\u00fcr i\u00e7 i\u00e7e karma\u015f\u0131k mant\u0131klar gerektirir ve alt sorgular bu karma\u015f\u0131kl\u0131\u011f\u0131 y\u00f6netilebilir hale getirmenin anahtar\u0131d\u0131r.<\/p>\n<p>Bu vaka analizleri, alt sorgular\u0131n sadece basit filtreleme ara\u00e7lar\u0131 olmad\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda karma\u015f\u0131k i\u015f zekas\u0131 problemlerini \u00e7\u00f6zmek i\u00e7in de kullan\u0131labilecek \u00e7ok y\u00f6nl\u00fc ve g\u00fc\u00e7l\u00fc ara\u00e7lar oldu\u011funu g\u00f6stermektedir. Do\u011fru alt sorgu t\u00fcr\u00fcn\u00fc se\u00e7mek ve ana sorgu ile nas\u0131l etkile\u015fimde bulundu\u011funu anlamak, veritaban\u0131 uzmanl\u0131\u011f\u0131 yolculu\u011funuzda size b\u00fcy\u00fck avantaj sa\u011flayacakt\u0131r.<\/p>\n<h2>\u0130\u00e7 \u0130\u00e7e Sorgular ve Performans Etkileri: Nelere Dikkat Etmeli?<\/h2>\n<p>Alt sorgular, veri manip\u00fclasyonunda inan\u0131lmaz bir esneklik sunsa da, yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda veritaban\u0131 performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde etkileyebilir. \u00d6zellikle \"i\u00e7 i\u00e7e sorgular\" terimi, bir alt sorgunun ba\u015fka bir alt sorguyu i\u00e7ermesi durumunu ifade eder ve bu durum karma\u015f\u0131kl\u0131\u011f\u0131 daha da art\u0131r\u0131r. Performans, veritaban\u0131 y\u00f6neticileri ve geli\u015ftiricileri i\u00e7in her zaman kritik bir konudur; dolay\u0131s\u0131yla alt sorgular\u0131n performans etkilerini anlamak ve optimize etmek hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<h3>Korelasyonlu Alt Sorgular\u0131n Performans Maliyeti<\/h3>\n<p>Daha \u00f6nce bahsetti\u011fimiz gibi, korelasyonlu alt sorgular ana sorgunun her sat\u0131r\u0131 i\u00e7in tekrar tekrar \u00e7al\u0131\u015f\u0131r. E\u011fer ana sorgu binlerce veya milyonlarca sat\u0131r d\u00f6nd\u00fcr\u00fcyorsa, bu her sat\u0131r i\u00e7in alt sorgunun binlerce veya milyonlarca kez \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 anlam\u0131na gelir. Bu durum, \u00f6zellikle alt sorgunun kendisi yo\u011fun bir i\u015flem (\u00f6rne\u011fin, b\u00fcy\u00fck bir tablo \u00fczerinde toplama veya filtreleme) gerektiriyorsa, sorgunun \u00e7ok yava\u015f \u00e7al\u0131\u015fmas\u0131na neden olabilir. Veritaban\u0131 motoru, bu tekrar eden i\u015flemleri optimize etmekte zorlanabilir.<\/p>\n<pre><code>\n-- K\u00f6t\u00fc performans \u00f6rne\u011fi: Her sat\u0131r i\u00e7in tekrar \u00e7al\u0131\u015fan korelasyonlu alt sorgu\nSELECT CalisanAdi, DepartmanID, Maa\u015f\nFROM Calisanlar C1\nWHERE Maa\u015f > (\n    SELECT AVG(Maa\u015f)\n    FROM Calisanlar C2\n    WHERE C2.DepartmanID = C1.DepartmanID\n);\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnek, her \u00e7al\u0131\u015fan i\u00e7in departman\u0131n\u0131n ortalama maa\u015f\u0131n\u0131 tekrar tekrar hesaplar. Bu, k\u00fc\u00e7\u00fck tablolar i\u00e7in sorun olmasa da, b\u00fcy\u00fck tablolarda ciddi yava\u015flamalara yol a\u00e7abilir. Bu t\u00fcr durumlarda, genellikle <code>JOIN<\/code> veya Ortak Tablo \u0130fadeleri (CTE'ler) kullanarak performans\u0131 art\u0131rmak m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h3>Nested Alt Sorgular\u0131n Okunabilirlik ve Bak\u0131m Sorunlar\u0131<\/h3>\n<p>Birden fazla seviyede i\u00e7 i\u00e7e ge\u00e7mi\u015f alt sorgular, sorgunun okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 zorla\u015ft\u0131rabilir. Bir sorguyu anlama ve \u00fczerinde de\u011fi\u015fiklik yapma s\u00fcresi artar, bu da hata yapma olas\u0131l\u0131\u011f\u0131n\u0131 y\u00fckseltir. Ayr\u0131ca, veritaban\u0131 motoru i\u00e7in karma\u015f\u0131k bir y\u00fcr\u00fctme plan\u0131 olu\u015fturmak da zorla\u015fabilir, bu da optimal olmayan performansla sonu\u00e7lanabilir.<\/p>\n<pre><code>\n-- \u00dc\u00e7 katmanl\u0131 i\u00e7 i\u00e7e alt sorgu \u00f6rne\u011fi (okunabilirli\u011fi azalt\u0131r)\nSELECT MusteriAdi FROM Musteriler\nWHERE MusteriID IN (\n    SELECT MusteriID FROM Siparisler\n    WHERE SiparisID IN (\n        SELECT SiparisID FROM UrunSiparisleri\n        WHERE UrunID IN (\n            SELECT UrunID FROM Urunler WHERE Kategori = 'Elektronik'\n        )\n    )\n);\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu t\u00fcr \u00e7ok katmanl\u0131 sorgular, ne anlama geldi\u011fini kavramay\u0131 zorla\u015ft\u0131r\u0131r ve herhangi bir hata ay\u0131klama s\u00fcrecini kabusa \u00e7evirebilir. Her bir i\u00e7 sorgunun ne d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn\u00fc ayr\u0131 ayr\u0131 test etmek gerekebilir.<\/p>\n<h3>Performans Optimizasyon \u0130pu\u00e7lar\u0131<\/h3>\n<ol>\n<li><strong><code>JOIN<\/code> Kullan\u0131m\u0131na \u00d6ncelik Verin:<\/strong> \u00c7o\u011fu durumda, \u00f6zellikle korelasyonlu alt sorgular\u0131n yerine <code>INNER JOIN<\/code>, <code>LEFT JOIN<\/code> gibi birle\u015ftirme i\u015flemleri kullanmak daha performansl\u0131 olabilir. Veritaban\u0131 motorlar\u0131, <code>JOIN<\/code> i\u015flemlerini optimize etme konusunda daha yeteneklidir.<\/li>\n<li><strong><code>EXISTS<\/code> vs. <code>IN<\/code>:<\/strong> E\u011fer alt sorgunuz \u00e7ok say\u0131da sat\u0131r d\u00f6nd\u00fcr\u00fcyor ve sadece bir e\u015fle\u015fmenin olup olmad\u0131\u011f\u0131n\u0131 kontrol ediyorsan\u0131z, <code>IN<\/code> yerine <code>EXISTS<\/code> kullanmak daha iyidir. <code>EXISTS<\/code>, ilk e\u015fle\u015fmeyi buldu\u011funda alt sorgu y\u00fcr\u00fctmesini durdurabilir.<\/li>\n<li><strong>Ortak Tablo \u0130fadeleri (CTE - Common Table Expressions):<\/strong> Karma\u015f\u0131k alt sorgu yap\u0131lar\u0131n\u0131 daha okunakl\u0131 ve bazen daha performansl\u0131 hale getirmek i\u00e7in CTE'ler kullan\u0131n. CTE'ler, sorgular\u0131 daha k\u00fc\u00e7\u00fck, adland\u0131r\u0131lm\u0131\u015f ve ge\u00e7ici sonu\u00e7 k\u00fcmelerine b\u00f6lmenize olanak tan\u0131r.<\/li>\n<li><strong>\u0130ndeksleri Do\u011fru Kullan\u0131n:<\/strong> Alt sorgular\u0131n ve ana sorgunun <code>WHERE<\/code> ko\u015fullar\u0131nda kullan\u0131lan s\u00fctunlar \u00fczerinde uygun indekslerin olmas\u0131, sorgu performans\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/li>\n<li><strong>Tablo Boyutunu Azalt\u0131n:<\/strong> Alt sorgunun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc veri miktar\u0131n\u0131 m\u00fcmk\u00fcn oldu\u011funca azaltmaya \u00e7al\u0131\u015f\u0131n. Gereksiz s\u00fctunlar\u0131 se\u00e7meyin (<code>SELECT *<\/code> yerine <code>SELECT Kolon1, Kolon2<\/code>).<\/li>\n<li><strong>Veritaban\u0131 Motorunun Optimizasyonunu Anlay\u0131n:<\/strong> Kulland\u0131\u011f\u0131n\u0131z veritaban\u0131 sisteminin (MySQL, PostgreSQL, SQL Server vb.) sorgu iyile\u015ftiricisi (optimizer) alt sorgular\u0131 nas\u0131l ele ald\u0131\u011f\u0131n\u0131 anlamaya \u00e7al\u0131\u015f\u0131n. Bazen veritaban\u0131, alt sorgular\u0131 otomatik olarak <code>JOIN<\/code>'lara d\u00f6n\u00fc\u015ft\u00fcrebilir.<\/li>\n<\/ol>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Karma\u015f\u0131k sorgularda, <code>EXPLAIN<\/code> veya <code>ANALYZE<\/code> (veritaban\u0131na g\u00f6re de\u011fi\u015fir) komutlar\u0131n\u0131 kullanarak sorgu y\u00fcr\u00fctme plan\u0131n\u0131 inceleyin. Bu, sorgunuzun hangi k\u0131sm\u0131n\u0131n yava\u015flad\u0131\u011f\u0131n\u0131 ve hangi indekslerin kullan\u0131ld\u0131\u011f\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.\n    <\/div>\n<p>\u00d6zetle, alt sorgular SQL'de g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r, ancak performans \u00fczerindeki potansiyel etkileri g\u00f6z ard\u0131 edilmemelidir. Sorgunuzu yazarken, her zaman alternatif \u00e7\u00f6z\u00fcmleri (\u00f6zellikle <code>JOIN<\/code> ve CTE'ler) de\u011ferlendirin ve performans\u0131 s\u00fcrekli olarak test edin. Bu sayede hem do\u011fru hem de verimli sorgular yazabilirsiniz.<\/p>\n<h2>Alt Sorgulara Alternatifler: CTE'ler ve JOIN'lar Ne Zaman Tercih Edilmeli?<\/h2>\n<p>Alt sorgular, karma\u015f\u0131k veri problemlerini \u00e7\u00f6zmek i\u00e7in harika bir ara\u00e7 olsa da, \u00e7o\u011fu zaman ayn\u0131 sonucu elde etmenin daha performansl\u0131, daha okunabilir veya daha esnek yollar\u0131 vard\u0131r. \u00d6zellikle Ortak Tablo \u0130fadeleri (CTE'ler) ve <code>JOIN<\/code> i\u015flemleri, alt sorgulara g\u00fc\u00e7l\u00fc alternatifler sunar. Bu b\u00f6l\u00fcmde, bu alternatifleri ne zaman ve neden tercih etmemiz gerekti\u011fini detayl\u0131 \u00f6rneklerle inceleyece\u011fiz.<\/p>\n<h3>JOIN \u0130\u015flemleri: \u0130li\u015fkisel Verilerin G\u00fcc\u00fc<\/h3>\n<p><code>JOIN<\/code> i\u015flemleri, ili\u015fkisel veritabanlar\u0131n\u0131n temelini olu\u015fturur ve farkl\u0131 tablolardaki verileri belirli bir ortak s\u00fctun (genellikle birincil anahtar\/yabanc\u0131 anahtar ili\u015fkisi) \u00fczerinden birle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. <code>JOIN<\/code>'lar, genellikle veri filtreleme ve birden fazla tabloyu birle\u015ftirme ihtiyac\u0131 duydu\u011funuzda alt sorgulardan daha performansl\u0131d\u0131r.<\/p>\n<p><strong>Neden <code>JOIN<\/code> Tercih Edilmeli?<\/strong><\/p>\n<ul>\n<li><strong>Performans:<\/strong> Veritaban\u0131 motorlar\u0131, <code>JOIN<\/code> i\u015flemlerini optimize etme konusunda olduk\u00e7a geli\u015fmi\u015ftir. \u00d6zellikle b\u00fcy\u00fck veri k\u00fcmelerinde, <code>JOIN<\/code>'lar genellikle korelasyonlu alt sorgulardan veya karma\u015f\u0131k <code>WHERE IN<\/code> alt sorgular\u0131ndan daha h\u0131zl\u0131 \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><strong>Okunabilirlik:<\/strong> Basit <code>JOIN<\/code>'lar, alt sorgulara g\u00f6re \u00e7o\u011fu zaman daha sezgisel ve okunabilirdir, \u00f6zellikle birden fazla tabloyu birle\u015ftiriyorsan\u0131z.<\/li>\n<li><strong>Esneklik:<\/strong> <code>INNER JOIN<\/code>, <code>LEFT JOIN<\/code>, <code>RIGHT JOIN<\/code>, <code>FULL OUTER JOIN<\/code> gibi farkl\u0131 <code>JOIN<\/code> t\u00fcrleri, verileri birle\u015ftirme \u015feklinizi kontrol etme konusunda b\u00fcy\u00fck esneklik sunar.<\/li>\n<\/ul>\n<p><strong><code>JOIN<\/code> ile Alt Sorgu Kar\u015f\u0131la\u015ft\u0131rmas\u0131 \u00d6rne\u011fi:<\/strong> \"Hi\u00e7 sipari\u015f vermemi\u015f m\u00fc\u015fterileri bulma\"<\/p>\n<pre><code>\n-- Alt Sorgu ile \u00e7\u00f6z\u00fcm:\nSELECT MusteriAdi, Email\nFROM Musteriler\nWHERE MusteriID NOT IN (SELECT DISTINCT MusteriID FROM Siparisler);\n\n-- LEFT JOIN (veya NOT EXISTS) ile \u00e7\u00f6z\u00fcm:\nSELECT M.MusteriAdi, M.Email\nFROM Musteriler M\nLEFT JOIN Siparisler S ON M.MusteriID = S.MusteriID\nWHERE S.SiparisID IS NULL;\n    <\/pre>\n<p><\/code><\/p>\n<p>\u0130kinci <code>LEFT JOIN<\/code> \u00f6rne\u011fi, <code>S.SiparisID IS NULL<\/code> ko\u015fuluyla, sipari\u015fi olmayan m\u00fc\u015fterileri bulur. Bu y\u00f6ntem genellikle <code>NOT IN<\/code> alt sorgusundan daha performansl\u0131d\u0131r, \u00e7\u00fcnk\u00fc veritaban\u0131 motoru birle\u015fme i\u015flemini daha etkin bir \u015fekilde optimize edebilir. <code>NOT EXISTS<\/code> operat\u00f6r\u00fc de bu senaryo i\u00e7in olduk\u00e7a performansl\u0131 bir alternatiftir ve <code>JOIN<\/code> ile benzer \u015fekilde \u00e7al\u0131\u015f\u0131r.<\/p>\n<h3>Ortak Tablo \u0130fadeleri (CTE - Common Table Expressions): Sorgu Mod\u00fclerli\u011fi<\/h3>\n<p>CTE'ler, SQL Server, PostgreSQL, MySQL 8+, Oracle gibi modern veritaban\u0131 sistemlerinde bulunan g\u00fc\u00e7l\u00fc bir \u00f6zelliktir. <code>WITH<\/code> anahtar kelimesiyle tan\u0131mlan\u0131rlar ve karma\u015f\u0131k sorgular\u0131 daha k\u00fc\u00e7\u00fck, adland\u0131r\u0131lm\u0131\u015f, ge\u00e7ici ve okunabilir alt par\u00e7alara ay\u0131rmak i\u00e7in kullan\u0131l\u0131rlar. Bir CTE, ana sorgu i\u00e7inde yaln\u0131zca bir kez tan\u0131mlan\u0131r ve daha sonra ana sorgu i\u00e7inde (veya di\u011fer CTE'ler i\u00e7inde) birden \u00e7ok kez referans verilebilir.<\/p>\n<p><strong>Neden CTE Tercih Edilmeli?<\/strong><\/p>\n<ul>\n<li><strong>Okunabilirlik ve Mod\u00fclerlik:<\/strong> Karma\u015f\u0131k mant\u0131\u011f\u0131 k\u00fc\u00e7\u00fck, adland\u0131r\u0131lm\u0131\u015f bloklara ay\u0131rarak sorgular\u0131 \u00e7ok daha okunabilir ve anla\u015f\u0131l\u0131r hale getirir. Her CTE, kendi i\u00e7inde mant\u0131ksal bir ad\u0131m\u0131 temsil edebilir.<\/li>\n<li><strong>Tekrar Kullan\u0131m:<\/strong> Bir CTE, ayn\u0131 sorgu i\u00e7inde birden fazla kez referans al\u0131nabilir, bu da kodu tekrarlamay\u0131 \u00f6nler.<\/li>\n<li><strong>\u00d6zyinelemeli Sorgular (Recursive CTEs):<\/strong> Hiyerar\u015fik verileri (\u00f6rne\u011fin, bir organizasyon \u015femas\u0131 veya bir \u00fcr\u00fcn kategorisi a\u011fac\u0131) sorgulamak i\u00e7in \u00f6zyinelemeli CTE'ler kullan\u0131labilir, bu da alt sorgularla ba\u015fa \u00e7\u0131k\u0131lmas\u0131 zor bir durumdur.<\/li>\n<li><strong>Performans \u0130yile\u015ftirmesi:<\/strong> Baz\u0131 durumlarda, veritaban\u0131 optimizasyoncusu CTE'leri alt sorgulardan daha verimli bir \u015fekilde i\u015fleyebilir, \u00f6zellikle karma\u015f\u0131k hesaplamalar veya gruplamalar yap\u0131l\u0131yorsa.<\/li>\n<\/ul>\n<p><strong>CTE ile Alt Sorgu Kar\u015f\u0131la\u015ft\u0131rmas\u0131 \u00d6rne\u011fi:<\/strong> \"Her departmandaki en y\u00fcksek maa\u015f\u0131 alan \u00e7al\u0131\u015fan\u0131 bulma\"<\/p>\n<pre><code>\n-- FROM yan t\u00fcmcesinde alt sorgu ile \u00e7\u00f6z\u00fcm:\nSELECT D.DepartmanAdi, C.CalisanAdi, C.Maa\u015f\nFROM Departmanlar D\nJOIN (\n    SELECT DepartmanID, MAX(Maa\u015f) AS EnYuksekMaa\u015f\n    FROM Calisanlar\n    GROUP BY DepartmanID\n) AS DepartmanEnYuksekMaaslari ON D.DepartmanID = DepartmanEnYuksekMaaslari.DepartmanID\nJOIN Calisanlar C ON C.DepartmanID = DepartmanEnYuksekMaaslari.DepartmanID AND C.Maa\u015f = DepartmanEnYuksekMaaslari.EnYuksekMaa\u015f;\n\n-- CTE ile \u00e7\u00f6z\u00fcm:\nWITH DepartmanEnYuksekMaaslari AS (\n    SELECT DepartmanID, MAX(Maa\u015f) AS EnYuksekMaa\u015f\n    FROM Calisanlar\n    GROUP BY DepartmanID\n)\nSELECT D.DepartmanAdi, C.CalisanAdi, C.Maa\u015f\nFROM Departmanlar D\nJOIN Calisanlar C ON D.DepartmanID = C.DepartmanID\nJOIN DepartmanEnYuksekMaaslari DEM ON C.DepartmanID = DEM.DepartmanID AND C.Maa\u015f = DEM.EnYuksekMaa\u015f;\n    <\/pre>\n<p><\/code><\/p>\n<p>CTE \u00f6rne\u011fi, <code>DepartmanEnYuksekMaaslari<\/code> ad\u0131nda ge\u00e7ici bir sonu\u00e7 k\u00fcmesi tan\u0131mlar ve bu k\u00fcme, ana <code>SELECT<\/code> sorgusu i\u00e7inde normal bir tablo gibi kullan\u0131l\u0131r. Bu yakla\u015f\u0131m, sorgunun ak\u0131\u015f\u0131n\u0131 daha net hale getirir ve karma\u015f\u0131k mant\u0131\u011f\u0131 par\u00e7alara ay\u0131r\u0131r. Alt sorgu ve CTE, temel olarak ayn\u0131 mant\u0131\u011f\u0131 uygular, ancak CTE'nin okunabilirli\u011fi ve potansiyel tekrar kullan\u0131labilirli\u011fi onu bir\u00e7ok geli\u015ftirici i\u00e7in tercih edilen bir se\u00e7enek haline getirir.<\/p>\n<p>Sonu\u00e7 olarak, alt sorgular g\u00fc\u00e7l\u00fcd\u00fcr ancak her zaman en iyi \u00e7\u00f6z\u00fcm de\u011fildir. Karma\u015f\u0131k veritaban\u0131 sorgular\u0131nda performans, okunabilirlik ve s\u00fcrd\u00fcr\u00fclebilirlik fakt\u00f6rlerini g\u00f6z \u00f6n\u00fcnde bulundurarak <code>JOIN<\/code> i\u015flemlerini ve CTE'leri alt sorgulara alternatif olarak d\u00fc\u015f\u00fcnmek \u00f6nemlidir. Bu ara\u00e7lar aras\u0131ndaki farklar\u0131 ve her birinin ne zaman en uygun oldu\u011funu bilmek, sizi daha yetkin bir SQL geli\u015ftiricisi yapacakt\u0131r.<\/p>\n<h2>Mobil Uyumluluk \u0130\u00e7in Ek Notlar: Tasar\u0131mda Neler Yapmal\u0131y\u0131z?<\/h2>\n<p>Web siteleri ve uygulamalar art\u0131k sadece masa\u00fcst\u00fc bilgisayarlardan de\u011fil, ak\u0131ll\u0131 telefonlar ve tabletler gibi \u00e7e\u015fitli mobil cihazlardan da eri\u015filebilir durumda. Bu nedenle, haz\u0131rlad\u0131\u011f\u0131m\u0131z HTML i\u00e7eri\u011finin mobil uyumlu olmas\u0131, kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Veritaban\u0131 sorgular\u0131n\u0131n kendisi do\u011frudan mobil uyumlulukla ilgili olmasa da, bu sorgularla elde edilen verilerin kullan\u0131c\u0131ya sunulma \u015fekli mobil uyumlu olmal\u0131d\u0131r. \u0130\u015fte HTML i\u00e7eri\u011finizi mobil uyumlu hale getirmek i\u00e7in yapabilece\u011finiz baz\u0131 temel tasar\u0131m ve geli\u015ftirme ad\u0131mlar\u0131:<\/p>\n<p><strong>1. Duyarl\u0131 Tasar\u0131m (Responsive Design) \u0130lkeleri:<\/strong><\/p>\n<p>Mobil uyumlulu\u011fun temel ta\u015f\u0131, i\u00e7eri\u011finizin farkl\u0131 ekran boyutlar\u0131na ve \u00e7\u00f6z\u00fcn\u00fcrl\u00fcklerine otomatik olarak uyum sa\u011flamas\u0131d\u0131r. Bu genellikle CSS <strong>Media Queries<\/strong> kullan\u0131larak yap\u0131l\u0131r.<\/p>\n<ul>\n<li><strong>Viewport Meta Etiketi:<\/strong> HTML belgenizin <code><head><\/code> k\u0131sm\u0131na mutlaka a\u015fa\u011f\u0131daki meta etiketini ekleyin. Bu etiket, taray\u0131c\u0131ya sayfan\u0131n cihaz\u0131n geni\u015fli\u011fine g\u00f6re \u00f6l\u00e7eklenmesi gerekti\u011fini s\u00f6yler.\n<pre><code>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li><strong>Ak\u0131\u015fkan Izgaralar ve Resimler:<\/strong> Izgara (grid) sistemlerinizi ve resimlerinizi y\u00fczde (%) tabanl\u0131 geni\u015fliklerle ayarlay\u0131n, piksel tabanl\u0131 sabit geni\u015flikler yerine. Bu, i\u00e7eri\u011fin ekran boyutuna g\u00f6re esnek bir \u015fekilde k\u00fc\u00e7\u00fclmesini veya b\u00fcy\u00fcmesini sa\u011flar.<\/li>\n<li><strong>CSS Media Queries Kullan\u0131m\u0131:<\/strong> Farkl\u0131 ekran boyutlar\u0131 i\u00e7in farkl\u0131 CSS stilleri tan\u0131mlay\u0131n. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck ekranlar i\u00e7in s\u00fctunlar\u0131 alt alta y\u0131\u011fabilir, yaz\u0131 tipi boyutlar\u0131n\u0131 k\u00fc\u00e7\u00fcltebilir veya baz\u0131 \u00f6\u011feleri gizleyebilirsiniz.\n<pre><code>\n\/* \u00d6rnek bir CSS medya sorgusu *\/\n@media screen and (max-width: 600px) {\n    \/* Mobil ekranlar i\u00e7in ge\u00e7erli stil kurallar\u0131 *\/\n    body {\n        font-size: 16px;\n    }\n    .container {\n        width: 95%;\n        padding: 10px;\n    }\n    table, thead, tbody, th, td, tr {\n        display: block; \/* Tablolar\u0131 mobil g\u00f6r\u00fcn\u00fcmde blok elementlere \u00e7evirme *\/\n    }\n    \/* Di\u011fer mobil \u00f6zel stiller *\/\n}\n            <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnek, ekran geni\u015fli\u011fi 600 piksel ve alt\u0131nda oldu\u011funda devreye girecek stilleri g\u00f6steriyor. \u00d6zellikle tablolar\u0131n mobil uyumlulu\u011fu s\u0131k\u00e7a bir problem te\u015fkil eder. <code>display: block;<\/code> ve <code>data-label<\/code> nitelikleri kullanarak tablolar\u0131 daha okunabilir hale getirebilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<p><strong>2. \u0130\u00e7erik ve Element Optimizasyonu:<\/strong><\/p>\n<ul>\n<li><strong>Yaz\u0131 Tipleri:<\/strong> Okunabilir yaz\u0131 tipi boyutlar\u0131 kullan\u0131n. Mobil cihazlarda \u00e7ok k\u00fc\u00e7\u00fck veya \u00e7ok b\u00fcy\u00fck yaz\u0131 tipleri k\u00f6t\u00fc bir deneyim sunar.<\/li>\n<li><strong>Dokunmatik Hedef Boyutlar\u0131:<\/strong> D\u00fc\u011fmeler, ba\u011flant\u0131lar ve di\u011fer etkile\u015fimli \u00f6\u011felerin mobil cihazlarda kolayca dokunulabilir boyutta oldu\u011fundan emin olun (genellikle en az 48x48 piksel).<\/li>\n<li><strong>G\u00f6rsel Optimizasyonu:<\/strong> B\u00fcy\u00fck resim dosyalar\u0131 mobil cihazlarda yava\u015f y\u00fcklenmeye neden olur. G\u00f6rselleri optimize edin (s\u0131k\u0131\u015ft\u0131r\u0131n) ve gerekiyorsa <code><picture><\/code> etiketi veya CSS medya sorgular\u0131 ile farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fckler i\u00e7in farkl\u0131 resimler sunun.<\/li>\n<li><strong>Basit ve D\u00fcz Net Navigasyon:<\/strong> Mobil cihazlarda karma\u015f\u0131k men\u00fclerden ka\u00e7\u0131n\u0131n. Hamburger men\u00fc gibi \u00e7\u00f6z\u00fcmlerle navigasyonu basitle\u015ftirin.<\/li>\n<li><strong>Form Alanlar\u0131:<\/strong> Form alanlar\u0131n\u0131 b\u00fcy\u00fck ve kolayca doldurulabilir yap\u0131n. Klavye t\u00fcr\u00fcn\u00fc (say\u0131sal, e-posta, metin vb.) do\u011fru ayarlamak i\u00e7in <code>input type<\/code> niteliklerini kullan\u0131n.<\/li>\n<\/ul>\n<p><strong>3. H\u0131z ve Performans:<\/strong><\/p>\n<p>Mobil kullan\u0131c\u0131lar, yava\u015f y\u00fcklenen sitelere kar\u015f\u0131 daha az sab\u0131rl\u0131d\u0131r. HTML i\u00e7eri\u011finizin ve ona e\u015flik eden CSS\/JavaScript dosyalar\u0131n\u0131n h\u0131zl\u0131 y\u00fcklenmesi kritik \u00f6neme sahiptir.<\/p>\n<ul>\n<li><strong>Minimal HTML:<\/strong> Gereksiz etiketlerden ve derin i\u00e7 i\u00e7e ge\u00e7mi\u015f yap\u0131lar\u0131ndan ka\u00e7\u0131n\u0131n. Temiz ve semantik HTML kullan\u0131n.<\/li>\n<li><strong>CSS ve JavaScript Dosyalar\u0131n\u0131 S\u0131k\u0131\u015ft\u0131r\u0131n:<\/strong> Bu dosyalar\u0131n boyutunu k\u00fc\u00e7\u00fcltmek i\u00e7in minify (s\u0131k\u0131\u015ft\u0131rma) ara\u00e7lar\u0131n\u0131 kullan\u0131n.<\/li>\n<li><strong>\u00d6nbellekleme:<\/strong> Taray\u0131c\u0131 \u00f6nbelleklemesini kullanarak tekrarlayan ziyaretlerde sayfa y\u00fckleme s\u00fcrelerini azalt\u0131n.<\/li>\n<\/ul>\n<p>Bu makalede sundu\u011fumuz teknik i\u00e7erik (SQL sorgular\u0131 ve kod bloklar\u0131) do\u011frudan mobil uyumluluk sorunlar\u0131na neden olmazken, bu i\u00e7eri\u011fi bir web sayfas\u0131nda sundu\u011funuzda, kod bloklar\u0131n\u0131n ve tablolar\u0131n mobil ekranlarda d\u00fczg\u00fcn g\u00f6r\u00fcnmesi i\u00e7in yukar\u0131daki prensipleri uygulaman\u0131z \u015fartt\u0131r. \u00d6zellikle <code><\/p>\n<pre><code><\/code> bloklar\u0131 uzun kod sat\u0131rlar\u0131 i\u00e7erdi\u011finde yatay kayd\u0131rma \u00e7ubuklar\u0131 ortaya \u00e7\u0131kabilir. Bu durumu \u00f6nlemek i\u00e7in CSS ile <code>overflow-x: auto;<\/code> gibi \u00f6zellikler kullanabilirsiniz, b\u00f6ylece kullan\u0131c\u0131lar kodu rahat\u00e7a okuyabilirler.<\/p>\n    <pre><code>\n\/* Kod bloklar\u0131 i\u00e7in mobil uyumluluk *\/\npre {\n    white-space: pre-wrap; \/* Uzun sat\u0131rlar\u0131 otomatik olarak alt sat\u0131ra ge\u00e7irme *\/\n    word-wrap: break-word; \/* Kelime baz\u0131nda k\u0131rma *\/\n    overflow-x: auto; \/* Yatay kayd\u0131rma \u00e7ubu\u011fu *\/\n    max-width: 100%; \/* Konteynerin d\u0131\u015f\u0131na ta\u015fmay\u0131 \u00f6nleme *\/\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>HTML i\u00e7eri\u011fi mobil uyumlu hale getirilirken, kullan\u0131c\u0131 deneyimini her zaman \u00f6n planda tutmak, i\u00e7eri\u011finizin her cihazda eri\u015filebilir ve keyifli olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve En \u0130yi Uygulamalar: Alt Sorgularla Daha \u0130yi Veritaban\u0131 Y\u00f6netimi<\/h2>\n<p>Bu makalede, SQL'deki alt sorgular\u0131n ve i\u00e7 i\u00e7e sorgular\u0131n derinliklerine indik. Temel tan\u0131mlar\u0131ndan farkl\u0131 t\u00fcrlerine, <code>SELECT<\/code>, <code>FROM<\/code> ve <code>WHERE<\/code> yan t\u00fcmcelerindeki pratik kullan\u0131mlar\u0131ndan ger\u00e7ek d\u00fcnya senaryolar\u0131na ve hatta performans optimizasyon ipu\u00e7lar\u0131na kadar geni\u015f bir yelpazeyi ele ald\u0131k. G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, alt sorgular, veritaban\u0131ndan karma\u015f\u0131k bilgileri \u00e7ekmek ve analiz etmek i\u00e7in son derece g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7t\u0131r.<\/p>\n<p>Alt sorgular, \u00f6zellikle karma\u015f\u0131k i\u015f mant\u0131klar\u0131n\u0131 tek bir sorgu i\u00e7inde par\u00e7alara ay\u0131rarak \u00e7\u00f6z\u00fcmlememize olanak tan\u0131r. Bir sorgunun sonucunu ba\u015fka bir sorgunun girdisi olarak kullanabilme yetene\u011fi, veri analizi ve raporlama s\u00fcre\u00e7lerinde bize b\u00fcy\u00fck avantajlar sa\u011flar. Ancak, bu g\u00fcc\u00fcn beraberinde sorumluluklar\u0131 da getirdi\u011fini unutmamal\u0131y\u0131z. Yanl\u0131\u015f veya d\u00fc\u015f\u00fcncesizce kullan\u0131lan alt sorgular, \u00f6zellikle korelasyonlu olanlar, veritaban\u0131 performans\u0131n\u0131 ciddi \u015fekilde olumsuz etkileyebilir.<\/p>\n<p><strong>Alt Sorgular \u0130\u00e7in En \u0130yi Uygulamalar:<\/strong><\/p>\n<ol>\n<li><strong>Mant\u0131\u011f\u0131 Basit Tutun:<\/strong> M\u00fcmk\u00fcn oldu\u011funca basit ve anla\u015f\u0131l\u0131r alt sorgular yazmaya \u00e7al\u0131\u015f\u0131n. \u00c7ok katmanl\u0131 i\u00e7 i\u00e7e sorgulardan ka\u00e7\u0131n\u0131n, zira bunlar okunabilirli\u011fi ve bak\u0131m\u0131 zorla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Alternatifleri De\u011ferlendirin:<\/strong> Her zaman bir alt sorgu yazmadan \u00f6nce, ayn\u0131 sonucu <code>JOIN<\/code> i\u015flemleri veya Ortak Tablo \u0130fadeleri (CTE'ler) ile elde edip edemeyece\u011finizi d\u00fc\u015f\u00fcn\u00fcn. Genellikle bu alternatifler daha performansl\u0131 ve okunakl\u0131d\u0131r.<\/li>\n<li><strong>Performans\u0131 Test Edin:<\/strong> \u00d6zellikle b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde \u00e7al\u0131\u015fan alt sorgular\u0131 her zaman test edin. <code>EXPLAIN<\/code> veya <code>ANALYZE<\/code> gibi ara\u00e7lar kullanarak sorgunun y\u00fcr\u00fctme plan\u0131n\u0131 inceleyin ve darbo\u011fazlar\u0131 tespit edin.<\/li>\n<li><strong><code>EXISTS<\/code> ve <code>IN<\/code> Aras\u0131ndaki Fark\u0131 Bilin:<\/strong> Bir k\u00fcme i\u00e7inde var olup olmad\u0131\u011f\u0131n\u0131 kontrol ederken, alt sorgunuzun d\u00f6nd\u00fcrece\u011fi sat\u0131r say\u0131s\u0131na g\u00f6re <code>EXISTS<\/code> veya <code>IN<\/code> operat\u00f6r\u00fcn\u00fc bilin\u00e7li bir \u015fekilde se\u00e7in. Geni\u015f sonu\u00e7 k\u00fcmeleri i\u00e7in <code>EXISTS<\/code> \u00e7o\u011fu zaman daha iyi bir se\u00e7enektir.<\/li>\n<li><strong>\u0130ndeksleri Kullan\u0131n:<\/strong> Alt sorgularda kullan\u0131lan filtreleme veya birle\u015ftirme s\u00fctunlar\u0131 \u00fczerinde uygun indekslerin olu\u015fturuldu\u011fundan emin olun. Bu, sorgu h\u0131z\u0131n\u0131 dramatik bir \u015fekilde art\u0131rabilir.<\/li>\n<li><strong>Mod\u00fcler Yakla\u015f\u0131m:<\/strong> Karma\u015f\u0131k sorgular\u0131, daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alara ay\u0131rmak i\u00e7in CTE'leri veya g\u00f6r\u00fcn\u00fcmleri (VIEWs) kullan\u0131n. Bu, sadece sorgunun okunabilirli\u011fini art\u0131rmakla kalmaz, ayn\u0131 zamanda bak\u0131m\u0131n\u0131 da kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Sadece \u0130htiyac\u0131n\u0131z Olan\u0131 Se\u00e7in:<\/strong> Alt sorgunuzda <code>SELECT *<\/code> yerine sadece ihtiyac\u0131n\u0131z olan s\u00fctunlar\u0131 se\u00e7in. Bu, d\u00f6nd\u00fcr\u00fclen veri miktar\u0131n\u0131 azaltarak performans\u0131 iyile\u015ftirebilir.<\/li>\n<\/ol>\n<p>Sonu\u00e7 olarak, alt sorgular ve i\u00e7 i\u00e7e sorgular, bir veritaban\u0131 uzman\u0131n\u0131n ara\u00e7 kutusundaki g\u00fc\u00e7l\u00fc silahlard\u0131r. Bu ara\u00e7lar\u0131 ne zaman kullanaca\u011f\u0131n\u0131z\u0131, nas\u0131l optimize edece\u011finizi ve alternatiflerini ne zaman tercih edece\u011finizi bilmek, veri taban\u0131 y\u00f6netimindeki yetkinli\u011finizi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r. Pratik yaparak ve farkl\u0131 senaryolar \u00fczerinde deneyler yaparak bu konudaki ustal\u0131\u011f\u0131n\u0131z\u0131 peki\u015ftirebilirsiniz. Unutmay\u0131n, iyi yaz\u0131lm\u0131\u015f bir sorgu, sadece do\u011fru sonucu vermekle kalmaz, ayn\u0131 zamanda bunu en verimli \u015fekilde yapar.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>Alt sorgular ile JOIN i\u015flemleri aras\u0131ndaki temel fark nedir?<\/dt>\n<dd><strong>Cevap:<\/strong> Temel fark, alt sorgular\u0131n bir sorgunun sonucunu ba\u015fka bir sorgunun girdi de\u011feri olarak kullanmas\u0131 (tek bir de\u011fer, bir liste veya bir tablo olarak) iken, <code>JOIN<\/code>'lar\u0131n iki veya daha fazla tabloyu ortak bir s\u00fctun \u00fczerinden birle\u015ftirerek yatayda daha geni\u015f bir sonu\u00e7 k\u00fcmesi olu\u015fturmas\u0131d\u0131r. <code>JOIN<\/code>'lar genellikle verileri birle\u015ftirmek i\u00e7in daha performansl\u0131d\u0131r, alt sorgular ise belirli bir ko\u015fulu dinamik olarak belirlemek veya karma\u015f\u0131k filtrelemeler yapmak i\u00e7in daha esnektir.<\/dd>\n<dt>Korelasyonlu alt sorgular neden performans sorunlar\u0131na yol a\u00e7ar?<\/dt>\n<dd><strong>Cevap:<\/strong> Korelasyonlu alt sorgular, ana sorgudaki her sat\u0131r i\u00e7in tekrar tekrar \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. E\u011fer ana sorgu binlerce veya milyonlarca sat\u0131r i\u00e7eriyorsa, alt sorgu da o kadar \u00e7ok kez y\u00fcr\u00fct\u00fcl\u00fcr ve bu da sorgunun toplam y\u00fcr\u00fctme s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu durum, \u00f6zellikle alt sorgunun kendisi yo\u011fun bir hesaplama gerektiriyorsa daha da k\u00f6t\u00fcle\u015fir.<\/dd>\n<dt>Ne zaman bir alt sorgu yerine CTE (Ortak Tablo \u0130fadesi) kullanmal\u0131y\u0131m?<\/dt>\n<dd><strong>Cevap:<\/strong> CTE'leri, sorgunuzu daha okunabilir, mod\u00fcler hale getirmek ve karma\u015f\u0131k i\u015f mant\u0131\u011f\u0131n\u0131 ad\u0131m ad\u0131m par\u00e7alara ay\u0131rmak istedi\u011finizde tercih etmelisiniz. Ayr\u0131ca, ayn\u0131 alt sorguyu ana sorgu i\u00e7inde birden fazla kez kullanman\u0131z gerekti\u011finde CTE'ler kod tekrar\u0131n\u0131 \u00f6nler. \u00d6zyinelemeli sorgular gibi \u00f6zel senaryolar i\u00e7in de CTE'ler vazge\u00e7ilmezdir. Performans a\u00e7\u0131s\u0131ndan da baz\u0131 durumlarda alt sorgulardan daha iyi olabilirler.<\/dd>\n<dt><code>WHERE IN<\/code> ile <code>WHERE EXISTS<\/code> aras\u0131ndaki fark nedir ve hangisi daha performansl\u0131d\u0131r?<\/dt>\n<dd><strong>Cevap:<\/strong> Her ikisi de alt sorgunun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc k\u00fcmede bir de\u011ferin varl\u0131\u011f\u0131n\u0131 kontrol eder. <code>WHERE IN<\/code>, alt sorgunun t\u00fcm sonu\u00e7lar\u0131n\u0131 belle\u011fe y\u00fckler ve ard\u0131ndan ana sorgudaki de\u011feri bu k\u00fcme i\u00e7inde arar. <code>WHERE EXISTS<\/code> ise, alt sorgunun herhangi bir sat\u0131r d\u00f6nd\u00fcr\u00fcp d\u00f6nd\u00fcrmedi\u011fini kontrol eder ve ilk e\u015fle\u015fmeyi buldu\u011funda alt sorguyu durdurabilir. Genellikle, alt sorgu \u00e7ok say\u0131da sat\u0131r d\u00f6nd\u00fcr\u00fcyorsa veya alt sorgu ana sorguyla korelasyonlu ise <code>EXISTS<\/code> daha performansl\u0131d\u0131r \u00e7\u00fcnk\u00fc daha az kaynak t\u00fcketir ve daha erken durabilir. K\u00fc\u00e7\u00fck ve s\u0131n\u0131rl\u0131 sonu\u00e7 k\u00fcmeleri i\u00e7in <code>IN<\/code> de uygun olabilir.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir&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":[1],"tags":[],"class_list":{"0":"post-32719","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>Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m<\/title>\n<meta name=\"description\" content=\"Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir sorguyla \u00e7\u00f6zemeyece\u011finiz kadar karma\u015f\u0131k bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ne yapars\u0131n\u0131z? \u0130\u015fte bu noktada alt sorgular ve i\u00e7 i\u00e7e sorgular devreye girerek, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde hassas ve g\u00fc\u00e7l\u00fc operasyonlar yapman\u0131za olanak tan\u0131r. Bu makale, alt sorgular\u0131n temel prensiplerinden en ileri kullan\u0131m senaryolar\u0131na kadar her \u015feyi kapsayacak, performans ipu\u00e7lar\u0131 sunacak ve pratik \u00f6rneklerle bilginizi peki\u015ftirecektir. Veri d\u00fcnyas\u0131ndaki yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131maya haz\u0131r m\u0131s\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\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m\" \/>\n<meta property=\"og:description\" content=\"Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir sorguyla \u00e7\u00f6zemeyece\u011finiz kadar karma\u015f\u0131k bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ne yapars\u0131n\u0131z? \u0130\u015fte bu noktada alt sorgular ve i\u00e7 i\u00e7e sorgular devreye girerek, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde hassas ve g\u00fc\u00e7l\u00fc operasyonlar yapman\u0131za olanak tan\u0131r. Bu makale, alt sorgular\u0131n temel prensiplerinden en ileri kullan\u0131m senaryolar\u0131na kadar her \u015feyi kapsayacak, performans ipu\u00e7lar\u0131 sunacak ve pratik \u00f6rneklerle bilginizi peki\u015ftirecektir. Veri d\u00fcnyas\u0131ndaki yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131maya haz\u0131r m\u0131s\u0131n\u0131z?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-25T02:31:33+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=\"35 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m\",\"datePublished\":\"2025-10-25T02:31:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/\"},\"wordCount\":6052,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/\",\"name\":\"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-25T02:31:33+00:00\",\"description\":\"Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir sorguyla \u00e7\u00f6zemeyece\u011finiz kadar karma\u015f\u0131k bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ne yapars\u0131n\u0131z? \u0130\u015fte bu noktada alt sorgular ve i\u00e7 i\u00e7e sorgular devreye girerek, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde hassas ve g\u00fc\u00e7l\u00fc operasyonlar yapman\u0131za olanak tan\u0131r. Bu makale, alt sorgular\u0131n temel prensiplerinden en ileri kullan\u0131m senaryolar\u0131na kadar her \u015feyi kapsayacak, performans ipu\u00e7lar\u0131 sunacak ve pratik \u00f6rneklerle bilginizi peki\u015ftirecektir. Veri d\u00fcnyas\u0131ndaki yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131maya haz\u0131r m\u0131s\u0131n\u0131z?\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m\"}]},{\"@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":"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m","description":"Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir sorguyla \u00e7\u00f6zemeyece\u011finiz kadar karma\u015f\u0131k bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ne yapars\u0131n\u0131z? \u0130\u015fte bu noktada alt sorgular ve i\u00e7 i\u00e7e sorgular devreye girerek, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde hassas ve g\u00fc\u00e7l\u00fc operasyonlar yapman\u0131za olanak tan\u0131r. Bu makale, alt sorgular\u0131n temel prensiplerinden en ileri kullan\u0131m senaryolar\u0131na kadar her \u015feyi kapsayacak, performans ipu\u00e7lar\u0131 sunacak ve pratik \u00f6rneklerle bilginizi peki\u015ftirecektir. Veri d\u00fcnyas\u0131ndaki yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131maya haz\u0131r m\u0131s\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\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/","og_locale":"tr_TR","og_type":"article","og_title":"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m","og_description":"Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir sorguyla \u00e7\u00f6zemeyece\u011finiz kadar karma\u015f\u0131k bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ne yapars\u0131n\u0131z? \u0130\u015fte bu noktada alt sorgular ve i\u00e7 i\u00e7e sorgular devreye girerek, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde hassas ve g\u00fc\u00e7l\u00fc operasyonlar yapman\u0131za olanak tan\u0131r. Bu makale, alt sorgular\u0131n temel prensiplerinden en ileri kullan\u0131m senaryolar\u0131na kadar her \u015feyi kapsayacak, performans ipu\u00e7lar\u0131 sunacak ve pratik \u00f6rneklerle bilginizi peki\u015ftirecektir. Veri d\u00fcnyas\u0131ndaki yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131maya haz\u0131r m\u0131s\u0131n\u0131z?","og_url":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-25T02:31:33+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"35 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m","datePublished":"2025-10-25T02:31:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/"},"wordCount":6052,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/","url":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/","name":"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-25T02:31:33+00:00","description":"Veritaban\u0131ndan karma\u015f\u0131k verileri \u00e7ekmek, analiz etmek ve anlaml\u0131 sonu\u00e7lar \u00e7\u0131karmak, modern veri d\u00fcnyas\u0131n\u0131n olmazsa olmaz\u0131d\u0131r. Peki, tek bir sorguyla \u00e7\u00f6zemeyece\u011finiz kadar karma\u015f\u0131k bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda ne yapars\u0131n\u0131z? \u0130\u015fte bu noktada alt sorgular ve i\u00e7 i\u00e7e sorgular devreye girerek, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde hassas ve g\u00fc\u00e7l\u00fc operasyonlar yapman\u0131za olanak tan\u0131r. Bu makale, alt sorgular\u0131n temel prensiplerinden en ileri kullan\u0131m senaryolar\u0131na kadar her \u015feyi kapsayacak, performans ipu\u00e7lar\u0131 sunacak ve pratik \u00f6rneklerle bilginizi peki\u015ftirecektir. Veri d\u00fcnyas\u0131ndaki yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131maya haz\u0131r m\u0131s\u0131n\u0131z?","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/alt-sorgular-ve-ic-ice-sorgular-veritabani-uzmanligina-ilk-adim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Alt Sorgular ve \u0130\u00e7 \u0130\u00e7e Sorgular: Veritaban\u0131 Uzmanl\u0131\u011f\u0131na \u0130lk Ad\u0131m"}]},{"@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\/32719","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=32719"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32719\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}