﻿
{"id":160,"date":"2012-03-12T21:53:57","date_gmt":"2012-03-12T21:53:57","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=160"},"modified":"2012-05-01T20:40:55","modified_gmt":"2012-05-01T20:40:55","slug":"transact-sqlstring-fonk-matematik-fonk-tarih-fonk-top-distinct-escape-group-by-having-joinler-insert-update-delete","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/transact-sqlstring-fonk-matematik-fonk-tarih-fonk-top-distinct-escape-group-by-having-joinler-insert-update-delete\/","title":{"rendered":"Transact Sql(String Fonk.-Matematik Fonk.-Tarih Fonk.-Top-Distinct-Escape-Group By-Having-Joinler-Insert-Update-Delete)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda T-SQL\u2019e devam ediyorum.SQL de \u00e7ok kullanaca\u011f\u0131m\u0131z inser,update ve delete i\u015flemleri temel seviyede anlatmaya \u00e7al\u0131\u015faca\u011f\u0131m.Tabi bunlardan \u00f6nce baz\u0131 fonksiyonlar ve kullanaca\u011f\u0131m\u0131z \u00f6zelliklere de\u011finece\u011fim.<br \/>\n<!--more--> <strong><span style=\"color: #ff0000;\">STR\u0130NG FONKS\u0130YONLARI<\/span><\/strong><br \/>\nA\u015fa\u011f\u0131da baz\u0131 string fonksiyonlar\u0131 verilmi\u015ftir.<br \/>\nLEFT : Soldan(ba\u015ftan) belirtilen say\u0131da karakteri getirir<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select Left(Adi,2) from Personeller----\r\n<\/pre>\n<hr \/>\n<p>RIGHT :Sa\u011fdan(sondan) belirtilen say\u0131da karakteri getirir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select RIGHT(Adi,3) from Personeller----\r\n<\/pre>\n<hr \/>\n<p>Upper\u00a0: B\u00fcy\u00fck harfe \u00e7evirir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select UPPER(Adi) from Personeller----\r\n<\/pre>\n<hr \/>\n<p>Lower : K\u00fc\u00e7\u00fck harfe \u00e7evirir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select LOWER(Adi) from Personeller----\r\n<\/pre>\n<hr \/>\n<p>Substring : Belirtilen indexten itibaren belirtilen say\u0131da karakter getir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select SUBSTRING(Adi,2,4) from Personeller----\r\n<\/pre>\n<hr \/>\n<p>Ltrim : Soldan bo\u015fluklar\u0131 keser.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n-----select LTRIM('\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 asdasdas ')----\r\n<\/pre>\n<hr \/>\n<p>Rtrim : Sa\u011fdaki bo\u015fluklar\u0131 keser.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select RTRIM('\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 asdasd\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ')----\r\n<\/pre>\n<hr \/>\n<p>Reverse : Tersine \u00e7evirir.<br \/>\nRtrim : Sa\u011fdaki bo\u015fluklar\u0131 keser.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select REVERSE(Adi) from Personeller----\r\n<\/pre>\n<hr \/>\n<p>Replace\u00a0: Belirtilen ifadeyi,belirtilen ifade ile de\u011fi\u015ftirir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select REPLACE('Benim Ad\u0131m Gen\u00e7ay','Gen\u00e7ay','K\u00fcr \u015ead')----\r\n<\/pre>\n<hr \/>\n<p>Not:Bu fonksiyonlar\u0131 i\u00e7 i\u00e7e kullanabiliriz.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select SUBSTRING(UPPER(REVERSE(Adi)),3,3) from Personeller----\r\n<\/pre>\n<hr \/>\n<p>Charindex\u00a0: Belirtilen karakterin veri i\u00e7inde index numaras\u0131n\u0131 verir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select MusteriAdi,CHARINDEX(' ',MusteriAdi) from Musteriler----\r\n<\/pre>\n<hr \/>\n<p>\u201cMusteriler\u201d tablosunun \u201cMusteriAdi\u201d kolonundan sadece soyadlar\u0131n\u0131 \u00e7ekelim.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n----select SUBSTRING(MusteriAdi,CHARINDEX(' ',MusteriAdi),LEN(MusteriAdi)-CHARINDEX(' ',MusteriAdi)) from Musteriler----\r\n<\/pre>\n<hr \/>\n<p><strong><span style=\"color: #ff0000;\">SAYISAL DE\u011eER \u0130\u015eLEMLER\u0130<\/span><\/strong><br \/>\nA\u015fa\u011f\u0131da baz\u0131 matematik fonksiyonlar\u0131 verilmi\u015ftir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect 3+2 \u015eeklinde bir kullan\u0131m yap\u0131labilir.\r\nselect PI() : Pi say\u0131s\u0131n\u0131 verecektir.\r\nselect SIN(PI()) : Sin al\u0131r.\r\nselect POWER(2,3) : \u00dcs al\u0131r.\r\nselect ABS(-12) :Mutlak de\u011fer al\u0131r.\r\nselect RAND() : 0-1 aras\u0131nda rastgele say\u0131 \u00fcretir.\r\nselect FLOOR(RAND()*100) : Yuvarlama yapar.\r\n<\/pre>\n<hr \/>\n<p>NOT:Haz\u0131r fonksiyonlar\u0131 g\u00f6rebilmek i\u00e7in \u201cObject Explorer\u201d\u2019dan herhangi bir veritaban\u0131na gelip Programmability &#8211; FUnctions b\u00f6l\u00fcm\u00fcne bak\u0131labilir.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>TAR\u0130H FONKS\u0130YONLARI<\/strong><\/span><br \/>\nA\u015fa\u011f\u0131da baz\u0131 tarih fonksiyonlar\u0131 verilmi\u015ftir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect GETDATE() : Bu g\u00fcn\u00fcn tarihini verir.\r\nselect DATEADD(YEAR,999,GETDATE()) : \u2018GETDATE()\u2019 metodundaki tarihe 999 y\u0131l ekler.\r\nselect DATEADD(DAY,999,GETDATE())\u00a0 : \u2018GETDATE()\u2019 metodundaki tarihe 999 g\u00fcn ekler.\r\nselect DATEADD(MONTH,999,GETDATE()) : \u2018GETDATE()\u2019 metodundaki tarihe 999 ay ekler.\r\nselect DATEDIFF(YEAR,'05.09.1992',GETDATE()) : \u0130ki tarih aras\u0131ndaki y\u0131l fark\u0131n\u0131 hesaplar.\r\nselect DATEDIFF(MONTH,'05.09.1992',GETDATE())\u00a0 :\u0130ki tarih aras\u0131ndaki ay fark\u0131n\u0131 hesaplar.\r\nselect DATEDIFF(DAY,'05.09.1992',GETDATE()) : \u0130ki tarih aras\u0131ndaki g\u00fcn fark\u0131n\u0131 hesaplar.\r\nselect DATEPART(MONTH,GETDATE()) : Verilen tarihte, Y\u0131l\u0131n ka\u00e7\u0131nc\u0131 ay\u0131.\r\nselect DATEPART(DAY,GETDATE()) : Verilen tarihte, Ay\u0131n ka\u00e7\u0131nc\u0131 g\u00fcn\u00fc.\r\nselect DATEPART(DW,GETDATE()) : Verilen tarihte,haftan\u0131n ka\u00e7\u0131nc\u0131 g\u00fcn\u00fc.\r\n<\/pre>\n<hr \/>\n<p><strong><span style=\"color: #ff0000;\">TOP<\/span><\/strong><br \/>\nSorgu sonucu gelen kay\u0131tlar\u0131m\u0131n ilk ka\u00e7 tanesinin gelece\u011fini belirlemek i\u00e7in kullan\u0131yorum.<br \/>\nselect top 3 Adi from Personeller<br \/>\n<strong><span style=\"color: #ff0000;\">Distinct<\/span><\/strong><br \/>\nBir kolondaki ayn\u0131 verileri bir kabul eder.<br \/>\n\u201cPersoneller\u201d tablosunda \u201cSehir\u201d kolonunda birden fazla \u201cLondon\u201d var.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect distinct Sehir from Personeller\r\n<\/pre>\n<hr \/>\n<p>E\u011fer bu \u201cdistinct\u201d kodunu kullan\u0131rsak , \u201cLondon\u201d bir tane g\u00f6z\u00fckecektir.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>ESCAPE (KA\u00c7I\u015e) KARAKTERLER\u0130<\/strong><\/span><\/p>\n<p>Verilerimizi \u201cLike\u201d \u015fart\u0131na g\u00f6re \u00e7ekerken,\u201dLike\u201d i\u00e7in \u00f6zel anlam\u0131 olan \u201c%,_,-\u201d gibi ifadeler,e\u011fer kay\u0131tlar\u0131m\u0131z\u0131n i\u00e7inde ge\u00e7iyorsa,hatal\u0131 sonu\u00e7 almam\u0131z olas\u0131 bir durumdur.Bu gibi durumlar da \u201cESCAPE\u201d karakterlerini kullanmal\u0131y\u0131z.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect BolgeTanimi from Bolge where BolgeTanimi like 'deneme_%'\r\n<\/pre>\n<hr \/>\n<p>\u201cNorthwind\u201d veritaban\u0131nda \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131zdan dolay\u0131 yukar\u0131daki kod par\u00e7as\u0131n\u0131n sonu\u00e7 tablosu hepimizde ayn\u0131 olacakt\u0131r.Ben burada \u201cdeneme_\u201d den sonra gerisi \u00f6nemli de\u011fil demek isterken,sistem \u201cdeneme\u201d den sonra gerisini \u00f6nemli de\u011fil kabul edecektir.Bunun sebebi,\u201d_\u201d \u00f6zel karakter olmas\u0131d\u0131r.<br \/>\n\u2018deneme_%\u2019 = \u2018ilk alt\u0131 harfi deneme olan,7. Harfi \u00f6nemli olmayan ve geriside \u00f6nemli olmayan\u2019 demektir.<\/p>\n<p>\u0130\u015fte bu sorunu halletmemiz i\u00e7in iki yolumuz var.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect BolgeTanimi from Bolge where BolgeTanimi like 'deneme&#x5B;_]%'\r\n<\/pre>\n<hr \/>\n<p>Yukardaki yap\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi ilk yol,\u00f6zel anlam ifade eden karakteri k\u00f6\u015feli parantez i\u00e7ine almakt\u0131r.<br \/>\n\u2018deneme[_]%\u2019 = \u2018ilk yedi harfi deneme_ sonras\u0131 \u00f6nemli de\u011fil.\u2019<\/p>\n<p>Ya da,<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect BolgeTanimi from Bolge where BolgeTanimi like 'deneme!_%'\u00a0 escape '!'\r\n<\/pre>\n<hr \/>\n<p>\u00d6zel ifademizin \u00f6n\u00fcne birnevi belirte\u00e7 ifadesi koyduk.Bu ifade her t\u00fcrl\u00fc karakter olabilir.Ben \u2018!\u2019 koydum.Bu belirte\u00e7i koyduktan sonra escape ile belirte\u00e7imizi g\u00f6steriyoruz.<\/p>\n<p>&#8216;deneme!_%&#8217;\u00a0 escape &#8216;!&#8217; = \u2018ilk 6 harf deneme olsun.Escape sayesinde \u00fcnlemden sonra gelenide \u00f6zel karakter sayma.Yani ilk 7 harf deneme_ olsun.Gerisi m\u00fchim de\u011fil.\u2019<\/p>\n<p>\u00d6rnekler<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect BolgeTanimi from Bolge where BolgeTanimi like 'deneme&#x5B;%]%'\r\n<\/pre>\n<hr \/>\n<p>veya<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect BolgeTanimi from Bolge where BolgeTanimi like 'deneme.%%' escape '.'\r\n<\/pre>\n<hr \/>\n<p><strong><span style=\"color: #ff0000;\">GROUP BY \u2013 HAVING<\/span><\/strong><\/p>\n<p>Bu ba\u015fl\u0131\u011f\u0131 anlatmak i\u00e7in kategorileme mant\u0131\u011f\u0131ndan yola c\u0131kal\u0131m.\u00d6rne\u011fin elimizde \u00fc\u00e7 kategori var.\u201dKategori1,Kategori2,Kategori3\u201d bunlar\u0131n her birine s\u0131ras\u0131yla rakamsal isim veriyorum {1,2,3}.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"83\">1 = A<br \/>\n1 = B<br \/>\n2 = K<br \/>\n3 = L<br \/>\n1 = F<br \/>\n2 = O<br \/>\n3 = M<br \/>\n3 = N<\/td>\n<td valign=\"top\" width=\"531\">Yanda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi kategorilere harfler atad\u0131m.\u015eimdi Kategori1 isimli yani say\u0131sal olarak 1. Kategoride ka\u00e7 tane kay\u0131t var.1 de 3 tane kay\u0131t var.2 de 2 kay\u0131t.3 te 3 kay\u0131t bulunmaktad\u0131r.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect Kategoriler,Count(Ornek) from Ornek\r\n<\/pre>\n<hr \/>\n<p>Bu yukardaki bi\u00e7im hata verecektir.Hata vermemesi i\u00e7in kategorileri grupland\u0131rmam\u0131z laz\u0131m.<\/p>\n<p>select Kategoriler,Count(Ornek) from Ornek group by Kategoriler<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Mevzuyu fazla kar\u0131\u015ft\u0131rmadan daha somut \u00f6rneklere ge\u00e7mek istiyorum.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect KategoriID,COUNT(UrunAdi) from Urunler group by KategoriID\r\n<\/pre>\n<hr \/>\n<p>Bu yap\u0131y\u0131 incelerseniz,KategoriId si 1 olan bir grup,2 olan ba\u015fka bir grup \u2026<\/p>\n<p>NOT :E\u011fer \u201cgroup by\u201d ile grupland\u0131r\u0131lm\u0131\u015f bir kolonum varsa ve aggregate fonksiyonlar\u0131 kullan\u0131l\u0131yorsa o kolona \u201cwhere\u201d de\u011fil \u201chaving\u201d ile \u015fart yazar\u0131z.Ve \u201chaving\u201d ifadesi \u201cgroup by\u201d dan sonra gelmelidir.<\/p>\n<p>E\u011fer \u201cwhere\u201d kullan\u0131lacaksa \u201cgroup by\u201d dan \u00f6nce yaz\u0131lmal\u0131d\u0131r.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect KategoriID,COUNT(UrunAdi) from Urunler where KategoriID&amp;gt;4 group by KategoriID\r\n<\/pre>\n<hr \/>\n<p>Bak\u0131n yukardaki yap\u0131da neler yapt\u0131k. Aggregate fonksiyonumuz var.Grupland\u0131r\u0131lm\u0131\u015f bir kolonumuz var.Ama neden \u201chaving\u201d de\u011filde \u201cwhere\u201d kulland\u0131k diye soracaks\u0131n\u0131z.Bunun nedeni,yazd\u0131\u011f\u0131m\u0131z \u015fart aggregate fonksiyon kullan\u0131lan kolon \u00fczerine olmad\u0131\u011f\u0131ndand\u0131r.<\/p>\n<p>E\u011fer aggregate fonksiyonu kullanan bir kolona \u015fart yazmaya kalkarsak,<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect KategoriID,COUNT(UrunAdi) from Urunler where COUNT(UrunAdi)&lt;3 group by KategoriID\r\n<\/pre>\n<hr \/>\n<p>BU HATA VERECEKT\u0130R.<br \/>\nDO\u011eRUSU \u015e\u00d6YLED\u0130R.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect KategoriID,COUNT(UrunAdi) from Urunler group by KategoriID having COUNT(UrunAdi)&lt;3\r\n<\/pre>\n<hr \/>\n<p>Tekrar ediyorum,hem gruplama var,hemde Aggregate fonksiyon varsa ve \u00fcstelik Aggregate fonksiyona \u015fart yazmam\u0131z gerekiyorsa,\u201dwhere\u201d de\u011fil \u201chaving\u201d kullan\u0131l\u0131r.\u201dhaving\u201d \u201cgroup by\u201d dan sonra yaz\u0131l\u0131r.<\/p>\n<p>E\u011fer yukardaki gibi kriterler s\u0131n\u0131rlay\u0131c\u0131 de\u011filse,\u201dwhere\u201d kullanabilirsiniz ama unutmay\u0131n ki \u201cgroup by\u201d kodundan \u00f6nce kullanmal\u0131s\u0131n\u0131z.<\/p>\n<p><strong><span style=\"color: #ff0000;\">JOINLER (TABLO B\u0130RLE\u015eT\u0130RME YAPILARI)<\/span><\/strong><br \/>\nJoinler genel olarak 3 ba\u015fl\u0131k alt\u0131nda anlat\u0131l\u0131r.<br \/>\n1-Inner Join<br \/>\n2-Outer Join(Left,Right,Full)<br \/>\n3-Cross Join<br \/>\n\u015eimdi 1. Ba\u015fl\u0131ktan anlatmaya ba\u015flayal\u0131m..<br \/>\n<span style=\"color: #339966;\">1-Inner Join<\/span><br \/>\nBu yap\u0131 bir veya birden fazla tabloyu,ili\u015fkili kolonlar \u00fczerinden birle\u015ftirir ve tek bir tablo haline getirirler.Fakat dikkat etmemiz gereken nokta bu tablolardan sadece e\u015fle\u015fenleri getirirler.<\/p>\n<p>Bu yap\u0131 ile maksimum 7 tablo birle\u015ftirilebilir.<\/p>\n<p>\u015eimdi birka\u00e7 \u00f6rnek yapal\u0131m.<br \/>\n\u201cGene Nortwind tablosunda \u00e7al\u0131\u015f\u0131yoruz.\u201d<br \/>\nSoru\u2019\u2019<br \/>\nHangi personelim (ad\u0131 ve soyad\u0131 ile birlikte), toplam ka\u00e7 adetlik sat\u0131\u015f yapm\u0131\u015f.Sat\u0131\u015f adedi 100 den fazla olanlar gelsin, personelin ad\u0131n\u0131n ba\u015f harfi M olan kay\u0131tlar gelsin ?<\/p>\n<p>\u00d6ncelikle soruyu algoritmaya d\u00f6kmek i\u00e7in istedi\u011fi bilgilerin hangi tabloda oldu\u011funu saptamam\u0131z gerek.<br \/>\nPersonelin ad\u0131 ve soyad\u0131n\u0131 ancak \u201cPersoneller\u201d tablosundan,yapt\u0131\u011f\u0131 sat\u0131\u015f adedinede ancak \u201cSat\u0131\u015flar\u201d tablosundan eri\u015febilirim.Bu durumda iki tablo aras\u0131nda ili\u015fkili kolon bulmal\u0131y\u0131m.Bu iki tabloya bakt\u0131\u011f\u0131m\u0131zda \u201cPersonelId\u201d kolonlar\u0131 \u00fczerinden ili\u015fkilidir.Bu iki tabloyu birle\u015ftirerek tek tablo haline getirip o \u015fekilde sorgu yazmal\u0131y\u0131m.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect Personeller.Adi,Personeller.SoyAdi,Count(Satislar.SatisID) from Personeller inner join Satislar on Personeller.PersonelID=Satislar.PersonelID where Personeller.Adi like 'M%' group by Personeller.Adi,Personeller.SoyAdi having Count(Satislar.SatisID) &amp;gt; 100\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nHangi \u00fcr\u00fcn hangi kategoride?<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect u.UrunAdi,k.KategoriAdi from Urunler as u inner join Kategoriler as k on u.KategoriID = k.KategoriID\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nBeverages kategorisindeki \u00fcr\u00fcnlerim.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect u.UrunAdi from Urunler as u inner join Kategoriler as k on u.KategoriID=k.KategoriID where k.KategoriAdi = 'Beverages'\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nBeverages\u00a0 kategorisindeki \u00fcr\u00fcnlerimin say\u0131s\u0131 ka\u00e7t\u0131r.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect Count(u.UrunID) from Urunler as u inner join Kategoriler as k on u.KategoriID=k.KategoriID where k.KategoriAdi='Beverages'\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nSeafood kategorisindeki \u00fcr\u00fcnlerin listesi(Urunler,Kategoriler)<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect Urunler.UrunAdi from Urunler inner join Kategoriler on Kategoriler.KategoriID = Urunler.KategoriID where Kategoriler.KategoriAdi = 'Seafood'\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nSeafood kategorisindeki \u00fcr\u00fcnlerin say\u0131s\u0131 ?(Urunler,Kategoriler)<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect k.KategoriAdi,COUNT(u.UrunAdi) from Urunler as u inner join Kategoriler as k on u.KategoriID=k.KategoriID where k.KategoriAdi = 'Seafood' group by k.KategoriAdi\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nHangi sat\u0131\u015f\u0131 hangi \u00e7al\u0131\u015fan\u0131m yapm\u0131\u015f ?(Satislar,Personeller)<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect p.Adi,s.SatisID from Personeller as p inner join Satislar as s on p.PersonelID = s.PersonelID\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nHangi personelim toplam ka\u00e7 adet sat\u0131\u015f yapm\u0131\u015f ?<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect p.Adi,Count(s.SatisID) from Personeller as p inner join Satislar as s on p.PersonelID=s.PersonelID group by p.Adi\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nEn \u00e7ok sat\u0131\u015f yapan personelim?<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect top 1 p.Adi,Count(s.SatisID) from Personeller as p inner join Satislar as s on p.PersonelID=s.PersonelID group by p.Adi order by Count(s.SatisID) desc\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nFaks numaras\u0131 \u201cnull\u201d olmayan tedarikcilerden al\u0131nm\u0131\u015f \u00fcr\u00fcnler(Urunler,Tedarikciler)<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect Tedarikciler.Faks from Urunler inner join Tedarikciler on Urunler.TedarikciID=Tedarikciler.TedarikciID where Tedarikciler.Faks is not null\r\n<\/pre>\n<hr \/>\n<p>Burada dikkat etmemiz gereken nokta \u201cis not null\u201d komutudur.Bunun anlam\u0131 \u201cnull\u201d olmayan demektir.<\/p>\n<p>Soru\u2019\u2019<br \/>\n1997 y\u0131l\u0131ndan sonra Nancy nin sat\u0131\u015f yapt\u0131\u011f\u0131 firmalar\u0131n isimleri: (1997 dahil)(Musteriler,Satislar,Personeller)<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect Musteriler.SirketAdi from Musteriler inner join Satislar on Musteriler.MusteriID = Satislar.MusteriID inner join Personeller on Satislar.PersonelID=Personeller.PersonelID where Personeller.Adi = 'Nancy' and Year(Satislar.SatisTarihi) &gt; 1996\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nLimited olan tedarik\u00e7ilerden\u00a0 al\u0131nm\u0131\u015f seafood kategorisindeki \u00fcr\u00fcnlerimin toplam sat\u0131\u015f tutar\u0131.(Urunler ,Kategoriler,Tedarikciler )<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect SUM(u.HedefStokDuzeyi*u.BirimFiyati) from Kategoriler as k inner join Urunler as u on k.KategoriID=u.KategoriID inner join Tedarikciler as t on t.TedarikciID = u.TedarikciID where k.KategoriAdi='Seafood' and t.SirketAdi like '%ltd.%'\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nAd\u0131nda \u201ca\u201d harfi olan personellerin sat\u0131\u015f id si 10500 den b\u00fcy\u00fck olan sat\u0131\u015flar\u0131n\u0131n toplam tutar\u0131n\u0131(miktar * birimfiyat) ve bu sat\u0131\u015flar\u0131n hangi tarihte ger\u00e7ekle\u015fti\u011fini listele.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect p.Adi,s.SatisTarihi,SUM(sd.Miktar*sd.BirimFiyati) from Personeller as p inner join Satislar as s on p.PersonelID=s.PersonelID inner join &#x5B;Satis Detaylari] as sd on s.SatisID=sd.SatisID where s.SatisID&amp;gt;10500 and p.Adi like '%a%' group by p.Adi,s.SatisTarihi\r\n<\/pre>\n<hr \/>\n<p>Soru\u2019\u2019<br \/>\nPersonellerimin ba\u011fl\u0131 olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131 ki\u015fileri listele ?<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect p1.Adi,p2.Adi from Personeller as p1 inner join Personeller as p2 on p1.PersonelID = p2.BagliCalistigiKisi\r\n<\/pre>\n<hr \/>\n<p><strong><span style=\"color: #ff0000;\">Outer Join(Left,Right,Full)<\/span><\/strong><span style=\"font-size: small; font-family: terminal, monaco;\"><strong><br \/>\n<\/strong><\/span>Inner join sayesinde e\u015fle\u015fen kay\u0131tlar\u0131 getirebiliyorduk.\u015eimdi ise e\u015fle\u015fmeyen kay\u0131tlar\u0131da getirmek i\u00e7in outer joinleri kullanaca\u011f\u0131z.<\/p>\n<p><span style=\"color: #339966;\">LEFT \/ LEFT OUTER JOIN :<\/span> join ifadesinin solundaki tablodan t\u00fcm kay\u0131tlar\u0131 getirir.Sa\u011f\u0131ndaki tablodan e\u015fle\u015fenleri yan yana e\u015fle\u015fmeyenleri null olarak getirir. Sql Server 2000 ve \u00f6ncesi i\u00e7in left outer join yaz\u0131lmal\u0131. Sonras\u0131 i\u00e7in left join yeterlidir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect * from Filmler left\u00a0 join Oyuncular on Filmler.FilmId = Oyuncular.FilmId\r\n<\/pre>\n<hr \/>\n<p><span style=\"color: #339966;\">RIGHT JOIN :<\/span> joinin sa\u011f\u0131ndaki tablonun tamam\u0131n\u0131 getirecek, solundakinden e\u015fle\u015fenleri ayn\u0131 sat\u0131rsda e\u015fle\u015fmeyenleri de null olarak getirecek.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect * from Filmler right join Oyuncular on Filmler.FilmId = Oyuncular.FilmId\r\n<\/pre>\n<hr \/>\n<p><span style=\"color: #339966;\">FULL JOIN :<\/span> joinin 2 taraf\u0131ndaki tablolardan e\u015fle\u015fen e\u015fle\u015fmeyen hepsini getirir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect * from Oyuncular full join Filmler on Filmler.FilmId = Oyuncular.FilmId\r\n<\/pre>\n<hr \/>\n<p><span style=\"color: #339966;\">CROSS JOIN :<\/span> Matematikteki kartezyen \u00e7arp\u0131m i\u015flemini yapar. Bir tablodaki t\u00fcm kay\u0131tlar\u0131 di\u011fer tablodaki t\u00fcm kay\u0131tlarla teker teker e\u015fle\u015ftirir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nselect * from Personeller cross join Bolge\r\n<\/pre>\n<hr \/>\n<p><strong><span style=\"color: #ff0000;\">INSERT (KAYIT EKLEME)<\/span><\/strong><span style=\"font-size: small; font-family: terminal, monaco;\"><strong><br \/>\n<\/strong><\/span>T-SQL sayesinde veritaban\u0131na veri ekleyebiliriz.Bunuda \u201cinsert\u201d komutuyla ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<p>Genel anlamda \u015fu yap\u0131dad\u0131r.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nInsert into TabloAd\u0131 values(eklenecek veriler)\r\n<\/pre>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ninsert into Personeller(Adi,SoyAdi) values('Gen\u00e7ay','Y\u0131ld\u0131z')\r\n<\/pre>\n<hr \/>\n<p>Yukardaki yap\u0131da \u201cPersoneller\u201d tablosundaki \u201cAdi\u201d ve \u201cSoyadi\u201d kolonlar\u0131na s\u0131ras\u0131yla \u201cGen\u00e7ay\u201d ve \u201cY\u0131ld\u0131z\u201d verileri eklenmi\u015ftir.Di\u011fer kolonlar \u201cnull\u201d olacakt\u0131r.<\/p>\n<p>Dikkat etmeniz gereken nokta , otomatik artan identity kolona de\u011fer g\u00f6nderilemez.<br \/>\nE\u011fer bir tablodaki t\u00fcm kolonlara de\u011fer g\u00f6nderilecekse, () i\u00e7ine kolon isimlerinizi yazmak zorunda de\u011filiz.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ninsert into Oyuncular values('Gencay','Yildiz')\r\n<\/pre>\n<hr \/>\n<p>E\u011fer \u201cOyuncular\u201d tablosundaki b\u00fct\u00fcn kolonlara de\u011fer g\u00f6nderece\u011fimi s\u00f6yledi\u011fim halde g\u00f6ndermezsem hata verecektir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ninsert into Oyuncular values('Gencay')\r\n<\/pre>\n<hr \/>\n<p>Hata verecektir.<\/p>\n<p>Bir kolona de\u011fer g\u00f6nderirken o kolonla uyumlu tipte de\u011fer g\u00f6nderilmelidir.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>UPDATE (G\u00dcNCELLEME)<\/strong><\/span><\/p>\n<p>Veritaban\u0131ndaki bilgileri g\u00fcncellememiz gerekti\u011fi zaman Update komutunu kullan\u0131r\u0131z.<br \/>\nGenel yap\u0131s\u0131 \u015fu \u015fekildedir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nUpdate Tablo\u0130smi set Veri where \u015fart\r\n<\/pre>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nupdate Personeller set Adi='g' where Adi = 'Gen\u00e7ay'\r\n<\/pre>\n<hr \/>\n<p>Yukarda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi \u201cPersoneller\u201d tablosunda ad\u0131 \u201cGen\u00e7ay\u201d olan verilerin ad\u0131n\u0131 \u201cg\u201d harfine \u00e7evir diyorum.<\/p>\n<p>E\u011fer g\u00fcncellenecek olan kayd\u0131 \u015fart olarak belirtmezsek,tablomuzdaki b\u00fct\u00fcn kay\u0131tlar de\u011fi\u015ftirilecektir.<\/p>\n<p>Yani\u2026<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nupdate Filmler set FilmAdi = 'Arog'\r\n<\/pre>\n<hr \/>\n<p>Burada \u201cFilmler\u201d tablosundaki \u201cFilmAdi\u201d kolonundaki t\u00fcm veriler \u201cArog\u201d olacakt\u0131r.\u015eart olmad\u0131\u011f\u0131 i\u00e7in hepsi de\u011fi\u015fecektir.<\/p>\n<p><strong><span style=\"color: #ff0000;\">DELETE (KAYIT S\u0130LME)<\/span><\/strong><\/p>\n<p>Veritaban\u0131ndan kay\u0131t silmek i\u00e7in Delete yap\u0131s\u0131n\u0131 kullan\u0131r\u0131z.<\/p>\n<p>Genel yap\u0131s\u0131 \u015fu \u015fekildedir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nDelete from TABLOAD\u0130 where \u015fart\r\n<\/pre>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ndelete from Oyuncular\r\n<\/pre>\n<hr \/>\n<p>E\u011fer bu yap\u0131dada \u015fart\u0131 yazmazsak veritaban\u0131n\u0131n i\u00e7ine limon s\u0131km\u0131\u015f oluruz.Bu \u015fekilde \u201cOyuncular\u201d tablosundaki b\u00fct\u00fcn veriler silinecektir.<\/p>\n<hr \/>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ndelete from Oyuncular where OyuncuId &gt; 10\r\n<\/pre>\n<hr \/>\n<p>\u201cOyuncular\u201d tablosunda \u201cOyuncuId\u201d si 10\u2019dan b\u00fcy\u00fck olan kay\u0131tlar\u0131 sil.<\/p>\n<p>NOT : Select, Update,Delete, Insert komutlar\u0131na genel olarak DML (Data Manipulation Language)\u00a0 ismi verilir.<\/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>Bu yaz\u0131mda T-SQL\u2019e devam ediyorum.SQL de \u00e7ok kullanaca\u011f\u0131m\u0131z inser,update ve delete i\u015flemleri temel seviyede anlatmaya \u00e7al\u0131\u015faca\u011f\u0131m.Tabi bunlardan \u00f6nce baz\u0131 fonksiyonlar ve kullanaca\u011f\u0131m\u0131z \u00f6zelliklere de\u011finece\u011fim.<!-- 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":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[87,88,89,77,78,79,80,81,82,83,84,85,86],"class_list":["post-160","post","type-post","status-publish","format-standard","hentry","category-veritabani","tag-delete","tag-distinct","tag-escape","tag-group-by","tag-having","tag-insert","tag-joinler","tag-matematik-fonksiyonlari","tag-string-fonksiyonlari","tag-tarih-fonksiyonlari","tag-top","tag-transact-sql","tag-update"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/160","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=160"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/160\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}