﻿
{"id":5652,"date":"2017-02-17T23:54:15","date_gmt":"2017-02-17T23:54:15","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5652"},"modified":"2017-02-17T23:54:15","modified_gmt":"2017-02-17T23:54:15","slug":"transact-sql-select-sorgusunda-kullanilan-kolonu-gizleme-yontemi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/transact-sql-select-sorgusunda-kullanilan-kolonu-gizleme-yontemi\/","title":{"rendered":"Transact SQL &#8211; Select Sorgusunda Kullan\u0131lan Kolonu Gizleme Y\u00f6ntemi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, Select sorgusu neticesinde kullan\u0131lan kolonu gizlemeyi inceleyece\u011fiz. Konuya ilk olarak verece\u011finizi tahmin etti\u011fim &#8216;<em>hoca kolonlar\u0131 \u00e7a\u011f\u0131rmasanda kullanabilirsin<\/em>&#8216; \u015feklinde olan tepkinize bir cevap vererek girmek istiyorum.<\/p>\n<p>Evet&#8230;<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nSelect X from Tablo Where Y = 1\r\n<\/pre>\n<p>Bende bu yukar\u0131daki yakla\u015f\u0131m\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, illa \u00e7ekti\u011fimiz kolonlar \u00fczerinde i\u015flem yapmam\u0131z gerekmedi\u011fini biliyorum.<\/p>\n<p>Hatta buyrun, direkt somut bir \u00f6rnekle olay\u0131 ele alal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/02\/Transact-SQL-Select-Sorgusunda-Kullan\u0131lan-Kolonu-Gizleme-Y\u00f6ntemi.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/02\/Transact-SQL-Select-Sorgusunda-Kullan\u0131lan-Kolonu-Gizleme-Y\u00f6ntemi.png\" alt=\"Transact SQL - Select Sorgusunda Kullan\u0131lan Kolonu Gizleme Y\u00f6ntemi\" width=\"378\" height=\"110\" class=\"aligncenter size-full wp-image-5655\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/02\/Transact-SQL-Select-Sorgusunda-Kullan\u0131lan-Kolonu-Gizleme-Y\u00f6ntemi.png 378w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/02\/Transact-SQL-Select-Sorgusunda-Kullan\u0131lan-Kolonu-Gizleme-Y\u00f6ntemi-300x87.png 300w\" sizes=\"auto, (max-width: 378px) 100vw, 378px\" \/><\/a><\/p>\n<p>Eee? Durduk yere komplekse girip bildi\u011fimi \u0131spatlarcas\u0131na bir naz edas\u0131yla bu i\u00e7eri\u011fi payla\u015f\u0131p makalemizi burada bitirece\u011fimi d\u00fc\u015f\u00fcnm\u00fcyorsunuzdur herhalde \ud83d\ude42 Tabi ki de vurgulamak isteyece\u011fim, size \u00e7ok \u00e7ok uzak olan hatta \u00e7ooook nadir ya\u015fanacak bir ihtiya\u00e7 durumunda bu y\u00f6ntemin ans\u0131z\u0131n laz\u0131m olabilece\u011fi bir ahval \u00fczerine size konuyu kurgulayacak ve as\u0131l sadedi i\u00e7eri\u011fin son paragraflar\u0131na d\u00f6kece\u011fim.<\/p>\n<p>Birazdan as\u0131l konumuza gelmek \u00fczere T-SQL yap\u0131lar\u0131nda kulland\u0131\u011f\u0131m\u0131z farkl\u0131 durumlardan bir ka\u00e7\u0131n\u0131 masaya yat\u0131ral\u0131m. \u015eimdi iyi takip ediniz&#8230;<\/p>\n<p>Hani bir select sorgusundan d\u00f6nen sonucu bir ba\u015fka select sorgusunda \u015fart, tablo vs. olarak kullan\u0131yoruz ya&#8230; Heh i\u015fte.. \u015eimdi gelin bu durumlar\u0131 tekrardan an\u0131msayal\u0131m.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nSelect * from Personeller Where PersonelID = (Select PersonelID from Satislar Where SatisID = 10255)\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere burada Where \u015fart\u0131nda Satislar tablosundan d\u00f6nen bir ba\u015fka sonucu kullanmaktay\u0131z. Hat\u0131rlarsan\u0131z buradaki tek \u015fart\u0131m\u0131z Where komutunda kulland\u0131\u011f\u0131m\u0131z tablonun bize tek sat\u0131r veri d\u00f6nd\u00fcrmesidir. Hat\u0131rlad\u0131n\u0131z m\u0131? Hatta aslen bu y\u00f6nteme <strong><em>Subquery<\/em><\/strong>(<em>Altsorgu<\/em>) dedi\u011fimizide ve inner join yap\u0131lar\u0131ndaki mant\u0131\u011f\u0131n ayn\u0131s\u0131n\u0131 farkl\u0131 y\u00f6ntemle \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z\u0131 hat\u0131rlat\u0131r\u0131m.<\/p>\n<p>Velhas\u0131l bir ba\u015fka \u00f6rne\u011fe bakal\u0131m.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nSelect s.* from (Select * from Satislar) s\r\n<\/pre>\n<p>Burada da select sorgusu sonucu gelen tabloyu bir ba\u015fka select sorgusunda kullanmaktay\u0131z. Hadi bir ek hat\u0131rlatma daha vereyim. Burada da Subquery olan sorgumuza alias atamak \u015fart\u0131yla i\u015flem ger\u00e7ekle\u015ftirebilmekteyiz.<\/p>\n<p>\u015eimdi de bamba\u015fka bir konuyu ele alal\u0131m. <a href=\"http:\/\/www.gencayyildiz.com\/blog\/transact-sql-row_number-fonksiyonu\/\" target=\"_blank\">ROW_NUMBER()<\/a> fonksiyonunu. Bu fonksiyon kullan\u0131ld\u0131\u011f\u0131 tabloda kullan\u0131ld\u0131\u011f\u0131 kolona \u00f6zel index numaras\u0131 olu\u015fturmaktad\u0131r. Ayriyetten gruplama yaparak indexleme yapabilmekte yahut s\u0131ralama &#8230; falan filan&#8230; Fonksiyonla ilgili detaylar ilgili adreste zaten mevcut. \u015eimdi bu ROW_NUMBER foksiyonunun kullan\u0131ld\u0131\u011f\u0131 a\u015fa\u011f\u0131daki \u00f6rne\u011fi inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nUpdate Personeller Set Adi = 'Hilmi' Where PersonelID = \r\n(\r\n\tSelect IndexliTablo.PersonelID from \r\n\t(\r\n\t\tSelect ROW_NUMBER() OVER(order by Unvan) indexer, PersonelID from Personeller\r\n\t) IndexliTablo Where IndexliTablo.indexer = 3\r\n)\r\n<\/pre>\n<p>Burada bir senaryo yaratabilmek i\u00e7in \u00f6zellikle ROW_NUMBER fonksiyonunu se\u00e7tim. Dikkat ederseniz yap\u0131lacak g\u00fcncelleme i\u015fleminde PersonelID \u015fart\u0131nda subquery kullan\u0131lmakta. En i\u00e7teki subquerye bakarsan\u0131z e\u011fer bir ihtiya\u00e7tan \u00f6t\u00fcr\u00fc ROW_NUMBER fonksiyonu ile index kolonu olu\u015fturmu\u015f ve ilgili kolonla birlikte PersonelID kolonunu listelemi\u015ftir. Eee haliyle bu subquery geriye tek sat\u0131r ve tek s\u00fctun d\u00f6nemeyece\u011fi i\u00e7in haliyle bu sorguyu kapsayan bir ba\u015fka subquery olu\u015fturulmu\u015f ve ondan sadece belirli bir \u015farta g\u00f6re(<em>&#8216;IndexliTablo.indexer = 3&#8242; ki buradaki \u015fart sonucu tek sat\u0131r ve tek s\u00fctun olarak d\u00f6nmesi i\u00e7in bir mant\u0131\u011fa dayanmaks\u0131z\u0131n \u00f6rnek olarak yaz\u0131lm\u0131\u015ft\u0131r&#8217;<\/em>) PersonelID de\u011feri d\u00f6nd\u00fcr\u00fclm\u00fc\u015ft\u00fcr.<\/p>\n<p>\u015eimdi d\u00fc\u015f\u00fcnelim. En i\u00e7teki subqueryde \u00e7a\u011f\u0131rmasakta index kolonuna ula\u015fabilir miydik? Hay\u0131r. \u00c7\u00fcnk\u00fc \u00f6yle bir kolon fiziksel tabloda bulunmamaktad\u0131r. ROW_NUMBER fonksiyonu ile olu\u015fturulmu\u015ftur. Eee haliyle mecburi sorguda yer etmesede laz\u0131m iken kullanamayaca\u011f\u0131m\u0131z, amma var iken de i\u015fimizi engelleyen bu tarz bir senaryoda g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere indexer kolonu gizlenmi\u015ftir. Ve ancak bu \u015fekilde gizlenirse kullan\u0131labilmektedir.<\/p>\n<p>\u0130\u015fte&#8230; Bu tarz uzak ve kar\u015f\u0131la\u015f\u0131labilitesi olduk\u00e7a d\u00fc\u015f\u00fck olan bir senaryoda g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere sizin i\u00e7eri\u011fe ilk ba\u015flarda &#8216;<em>hoca kolonlar\u0131 \u00e7a\u011f\u0131rmasanda kullanabilirsin<\/em>&#8216; \u015feklinde yapm\u0131\u015f oldu\u011funuz \u00e7\u0131k\u0131\u015fa kar\u015f\u0131l\u0131k her zaman hakl\u0131 olmad\u0131\u011f\u0131n\u0131z\u0131 g\u00f6stermi\u015f olmaktan ve laz\u0131m olursa da her\u015feye ra\u011fmen imdad\u0131n\u0131za yeti\u015fecek bir \u00e7\u00f6z\u00fcm sunmaktan son derece haz ald\u0131\u011f\u0131m\u0131 s\u00f6ylemek isterim. \ud83d\ude42<\/p>\n<p>Neyse&#8230;<\/p>\n<p>Hadi \u015fimdi gelin son s\u00f6z\u00fc beraber s\u00f6yleyelim.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nSelect t.Kolon1 from \r\n(\r\n\tSelect Kolon1, Kolon2 from Tablo\r\n) t\r\n<\/pre>\n<p>\u0130\u015fte bu y\u00f6ntem, her daim \u00e7ok mant\u0131kl\u0131 bir yakla\u015f\u0131m sunmasada, asl\u0131nda gizli bir can kurtaran ve derin algoritmik sorgular olu\u015fturmam\u0131z\u0131 sa\u011flayan Design Pattern&#8217;dir diyebiliriz. Hay\u0131r hay\u0131r&#8230; B\u00f6yle kabul edilmiyor \ud83d\ude42 ama bundan sonra bu tarz durumlarda kullan\u0131labilecek nadir T-SQL yakla\u015f\u0131msal y\u00f6ntemi olaca\u011f\u0131ndan dolay\u0131, bu tekrara nispeten bu y\u00f6nteme ben Design Pattern \u00fcnvan\u0131n\u0131 bu makalede veriyorum. \ud83d\ude42 Vatana millete hay\u0131rl\u0131 olsun&#8230; \ud83d\ude00<\/p>\n<p>Peki dostlar&#8230;<br \/>\nDaha fazla uzatacak bir\u015fey kalmad\u0131 san\u0131r\u0131m \ud83d\ude42<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde, Select sorgusu neticesinde kullan\u0131lan kolonu gizlemeyi inceleyece\u011fiz. Konuya ilk olarak verece\u011finizi tahmin etti\u011fim &#8216;hoca kolonlar\u0131 \u00e7a\u011f\u0131rmasanda kullanabilirsin&#8216; \u015feklinde olan tepkinize bir cevap vererek girmek istiyorum. Evet&#8230; Select X from Tablo Where&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3415,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1082,1412,22],"tags":[1622,75,1621,266,245,92,461,85],"class_list":["post-5652","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sql-server","category-sql-server-2016","category-veritabani","tag-altsorgu","tag-select","tag-select-column-hide","tag-sql","tag-sql-server","tag-subquery","tag-t-sql","tag-transact-sql"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5652","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=5652"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5652\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3415"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}