<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Aykut Önen &#187; Access</title>
	<atom:link href="http://www.aykutonen.com/Etiket/access/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aykutonen.com</link>
	<description>Gerekirse Yazarım</description>
	<lastBuildDate>Tue, 31 Jan 2012 18:32:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>&#8220;InnerJoin&#8221; Kullanılmış SQL Sorgusunda &#8220;Select Top&#8221; Kullanımı</title>
		<link>http://www.aykutonen.com/innerjoin-kullanilmis-sql-sorgusunda-select-top-kullanimi/</link>
		<comments>http://www.aykutonen.com/innerjoin-kullanilmis-sql-sorgusunda-select-top-kullanimi/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 00:04:19 +0000</pubDate>
		<dc:creator>Aykut Önen</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[Benden]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[inner join]]></category>
		<category><![CDATA[Select Top]]></category>
		<category><![CDATA[Sorgu]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Tablo]]></category>
		<category><![CDATA[Veri Tabanı]]></category>

		<guid isPermaLink="false">http://www.aykutonen.com/?p=270</guid>
		<description><![CDATA[Bugüne kadar birden fazla tabloyu innerjoin ve benzeri ile birbirine bağlayarak bir sorgu oluşturmuşsanız ve bu sorguda sadece 5 adet kayıt gelsin gibi bir beklentiniz olmuş ise hüsrana uğramış olmanız muhtemeldir. Böyle bir durumla karşılaşmışsanız ya da karşılaşma ihtimaliniz varsa &#8230; <a href="http://www.aykutonen.com/innerjoin-kullanilmis-sql-sorgusunda-select-top-kullanimi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bugüne kadar birden fazla tabloyu innerjoin ve benzeri ile birbirine bağlayarak bir sorgu oluşturmuşsanız ve bu sorguda sadece 5 adet kayıt gelsin gibi bir beklentiniz olmuş ise hüsrana uğramış olmanız muhtemeldir.</p>
<p>Böyle bir durumla karşılaşmışsanız ya da karşılaşma ihtimaliniz varsa eğer çözümü burada. Sizi daha fazla oyalamadan hemen örneğimize geçelim.<span id="more-270"></span></p>
<p>Kategori ve Urun adında 2 adet tablomuz olsun. Tablolarımızın özellikleri de şöyle olsun;</p>
<p><strong>KATEGORİ</strong><br />
<img class="alignnone size-full wp-image-277" title="kategori" src="http://www.aykutonen.com/wp-content/uploads/kategori.JPG" alt="kategori" width="337" height="60" /></p>
<p><strong>URUN</strong><br />
<img class="alignnone size-full wp-image-278" title="urun" src="http://www.aykutonen.com/wp-content/uploads/urun.JPG" alt="urun" width="338" height="98" /></p>
<p>Tablolarımızın içerikleride şu şekilde olsun&#8230;</p>
<p><img class="alignnone" title="tbl_kategori" src="http://www.aykutonen.com/wp-content/uploads/tbl_kategori.JPG" alt="tbl_kategori" width="304" height="61" /><br />
<img class="size-full wp-image-272 alignnone" title="tbl_urun" src="http://www.aykutonen.com/wp-content/uploads/tbl_urun.JPG" alt="tbl_urun" width="376" height="242" /></p>
<p>Bu tablolardan aşağıdaki gibi bir sorgu ile fiyatı en düşük 5 adet kaydı, ürün adları, fiyatları ve kategori adları ile almayı deneyelim.</p>
<blockquote><p>SELECT Top 5 Urun.UrunAdi, Urun.UrunFiyat, Kategori.kategoriAdi<br />
FROM Kategori<br />
INNER JOIN Urun ON Kategori.kategoriID = Urun.kategoriID Order By UrunFiyat;</p></blockquote>
<p>Bu şartlar altında elde edeceğimiz sonuç şöyle olacaktır,<br />
<img class="size-full wp-image-273 alignnone" title="islem01" src="http://www.aykutonen.com/wp-content/uploads/islem01.JPG" alt="islem01" width="281" height="225" /></p>
<p><strong>Peki neden tüm kayıtlar geldi?</strong></p>
<p>Çünki tüm kayıtlardaki <strong>&#8220;ORDER BY&#8221;</strong> ile belirttiğimiz koşul yani <strong>UrunFiyat</strong> alanlarının hepsi birbirine eşitti.</p>
<p>Sorgumuzu bir daha çalıştıralım ama ondan önce fiyat alanlarından bazılarına değşik değerler girelim&#8230;<br />
<img class="alignnone size-full wp-image-274" title="tbl_urun02" src="http://www.aykutonen.com/wp-content/uploads/tbl_urun02.JPG" alt="tbl_urun02" width="375" height="237" /></p>
<p>Ardından sorgumuzu çalıştıralım ve</p>
<p><img class="alignnone size-full wp-image-275" title="islem02" src="http://www.aykutonen.com/wp-content/uploads/islem02.JPG" alt="islem02" width="285" height="161" /></p>
<p><strong>Bu sefer de 6 kayıt gelmiş. Peki bu sefer sorun nedir?</strong></p>
<p>İlk 4 kaydın fiyat değeri 10,00TL 5. kaydın fiyat değeri 20,00TL ama 6. kaydın fiyat değeride 20,00 TL. Yine bir önceki durum ile aynı sebebten yani order by ile belirtilen koşulun aynı değerlere sahip olması sonucu burada tüm kaytlar gelmedi fakat istediğimizden fazla kayıt geldi. Fiyat değeri 20,00TL olan bir kayıt daha olsaydı 7 kayıt gelecekti sorgu çalıştırılınca.</p>
<p><strong>Peki bunun bir çözümü yok mu?</strong></p>
<p>Tabiki var! <strong>&#8220;ORDER BY&#8221;</strong> ile belirtilen koşulua yeni bir değişken daha ekliyoruz, yalnız bu değişkenin <strong>OtomatikSayı</strong> olarak tanımlanmış bir <strong>ID</strong> kolonu gibi tablo içerisinde benzersiz bir alan olması gerekiyor.</p>
<p>Şimdi sorgumuzun son haline bir göz atalım;</p>
<blockquote><p>SELECT Top 5 Urun.UrunAdi, Urun.UrunFiyat, Kategori.kategoriAdi<br />
FROM Kategori<br />
INNER JOIN Urun ON Kategori.kategoriID = Urun.kategoriID Order By UrunFiyat, UrunID;</p></blockquote>
<p>Şimdide sorgumuzu son kez çalıştıralım ve sonucu hep birlikte görelim;</p>
<p><img class="alignnone size-full wp-image-276" title="islem03" src="http://www.aykutonen.com/wp-content/uploads/islem03.JPG" alt="islem03" width="283" height="141" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aykutonen.com/innerjoin-kullanilmis-sql-sorgusunda-select-top-kullanimi/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Access ve Random Kayıt</title>
		<link>http://www.aykutonen.com/access-ve-random-kayit/</link>
		<comments>http://www.aykutonen.com/access-ve-random-kayit/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 21:01:06 +0000</pubDate>
		<dc:creator>Aykut Önen</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[Benden]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[Random]]></category>
		<category><![CDATA[Sorgu]]></category>

		<guid isPermaLink="false">http://www.aykutonen.com/?p=212</guid>
		<description><![CDATA[Veritabanı olarak access kullanılan bir projede rasgele seçilmiş 5 tane resmi sayfada göstermemiz gerekiyordu. Fakat Sql`de çalışan ve bize her seferinde 5 farklı kayıt getiren şu kod access`de çalışmıyor. SELECT top 5 ID FROM Tablo_Adi ORDER BY newid() Çünki newid() &#8230; <a href="http://www.aykutonen.com/access-ve-random-kayit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Veritabanı olarak access kullanılan bir projede rasgele seçilmiş 5 tane resmi sayfada göstermemiz gerekiyordu.</p>
<p>Fakat Sql`de çalışan ve bize her seferinde 5 farklı kayıt getiren şu kod access`de çalışmıyor.</p>
<p><code>SELECT top 5 ID FROM Tablo_Adi ORDER BY newid()</code></p>
<p>Çünki newid() fonksiyonu access için geçerli değildi. Bende zaman sorunu olduğu için en iyi kod çalışan koddur mantığından yola çıkarak dolaylı bir çözüm bulmuştum.</p>
<p>Önce ID leri bir arrayList`e çekip bunların içerisinden rasgele 5 ID yi çekiyordum ama aynı kaydın gelme ihtimali yüzünden her bulduğum ID`yi farklı bir arrayList`e aktarıp bir önceki arrayList`imden çıkartıyordum. Sonuçta elimde birbirinden farklı rasgele seçilmiş 5 adet ID vardı. İşlemin geri kalanını bu 5 ID üzerinden tamamlıyordum. Fakat performans açısından çokta verimli değildi açıkçası :)</p>
<p>Neyse zaman sorunu olduğu için bu şekilde projeyi tamamladım ama araştırmalarım devam ediyordu. Araştırmalar sonucunda şöyle bir örnek buldum;</p>
<p><code>SELECT TOP 5 ID FROM Tablo_Adi Order By rnd(ID)</code></p>
<p>Fakat bu seferde rasgele gelen 5 kayıt sorgumuz her çalıştığında aynı geliyordu. Bunun üzerine ufak bir araştırma yaptıktan sonra sorgumuz aşağıdaki son halini almış oldu. Böylece sorgumuz her çalıştığında rasgele seçilmiş 5 farklı kayıt getirir hale geldi.</p>
<p><code>SELECT TOP 5 ID FROM Tablo_Adi Order By rnd(-(ID)*Time())</code></p>
<p>Sorgumuzun bu son hali ile ihtiyacımız olan işlemi kolayca gerçekleştirdim. Benzer bir durumla karşılaşan olursa ve benim tekrar ihtiyacım olursa diye buradan da paylaşmak istedim, umarım faydası olur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aykutonen.com/access-ve-random-kayit/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

