SQL İç İçe Select, İnnej Join ve Order By Kullanımı - Örnekle Anlatım

Temmuz 05, 2017 Mustafa BÜKÜLMEZ 0 Yorum

Bu derste sql de -aynı işi- iç içe select ve inner join ile birlikte yapılışını görelim.


Selamlar,
Bu dersin içeriği;
  • İç içe select kullanımının örnek üzerinde anlatımı
  • İnner Join kullanımının örnek üzerinde anlatımı
  • Order By kullanımının örnek üzerinde anlatımı
yer almaktadır. Aynı işi iki farklı yol ile yapacağız ve aradaki farklara göz atacağız.
Yapacağımız iş hemen hemen her dinamik web sitesinde kullandığımız "kategori" sistemi ile ilgili olacak. Bir kateogi listemiz olacak ve bu kategoriye ait kaç içerik varsa adedini kateogi adının yanına yazdıracağız.
Önce iç içe select kullanarak örneğimizi yapalım ve ekran görüntüsüne bir bakalım.
SQL
Select 
kat_adi as Kategori,
(Select Count(*) from Haberler Where Hbr_Kategori = kat_adi) as Adet
From Kategoriler
Where Aktif = 1

-ya
Order By Adet desc -- genelde bu kullanılır. 
-- Bu şekilde içerisinde en çok makale olan kategori en üstte olacaktır

--yada
Order By Kategori asc
-- Bu şekilde kategorileri alfabetik olarak a-z olarak sıralayacak
------------------------------------------
--iki kolona göre de sıralayabilirsiniz ancak;
Order By Kategori, Adet asc
-- Kategori a'dan z'ye sıralı ve adet az olandan çok olana doğru şekilde sıralanır.

Order By Kategori, Adet desc
-- Kategori z'den a'ya sıralı ve adet çok olandan az olana şeklinde sıralanır.

--aynı anda iki adet order by yazamazsınız.


iç içe select kullanımı bu şekildeydi.
NOT: Order by yazarken kolon adını yazmak şart değildir. Yani kolonun gerçek adı olan "kat_adi" yazarsakda doğrudur "as" dan sonraki "Kategori" yazsak da doğrudur. Her ikisinde de hata almayız.Nitekim "Adet" kolonunda bu şekilde yazdık. Aksi takdirde order by yapabilmek için o select sorgusunu olduğu gibi order by kısmına yazmak zorunda kalırdık.
-----
Şimdi de İnner join kullanarak aynı işlemi yapalım.
SQL
SELECT TOP 100 PERCENT
 Kat_Adi as kategori_Adi,
 COUNT(Haberler.Hbr_Kategori) adet
FROM Kategoriler
INNER JOIN Haberler
 ON Haberler.Hbr_Kategori = Kategoriler.Kat_Adi
WHERE Kategoriler.Aktif = 1
GROUP by Haberler.Hbr_Kategori,Kategoriler.Kat_Adi
ORDER BY Kategoriler.Kat_Adi ASC
1 - Her kategori adından bir tane görünmesi için 
SQL
GROUP by Haberler.Hbr_Kategori,Kategoriler.Kat_Adi
2 - Haberlerin sayısı için
SQL
COUNT(Haberler.Hbr_Kategori) adet
komutlarını eklemek zorundayız.
Sonucu:

İnner Join de "group by" kullanmadan bu işi yapamayız. Aksi takdirde "count()" dan dolayı hata verecektir. Sebebi ise Haberler tablomuzda A kategorisine ait on adet haber var ama kategoriler tablomuzda bir adet A kategorisi var. Bir tablodan bir kayıt diğer tablodan on kayıt geleceğinden dolayı listeyi yapamaycak bu sebeple de hata verecektir.
Hata almamak için Haberler tablosundaki haberleri kategori adıan göre grupluyoruz ki bir tane kategori bilgisi gelsin ve bu şekilde kategori tablosu ile eşleştirme yapılabilsin.
NOT: Bunu sadece Haberler tablosu üzerinden de yapabiliriz. Ancak o zamanda içerisinde haber olmayan kategorileri listelenmeyecektir. Inner Join kullanımı yerine sadece Haberler tablosu üzerinden de aynı sonucu aşağıdaki select sorgusu ile alabiliriz.
SQL
select  Hbr_Kategori as kat, count(*) as adet
from Haberler
group by Hbr_Kategori
Buradaki amacımız Inner Join'i de anlatmak olduğundan ve tek bir örnek üzerinde olması amacı ile bu şekilde anlattım.
Aradaki farkları bakalım.
İç İçe Select:
Avantajları:
  • Okunması, yazılması ve anlaşılması daha kolaydır.
  • Ana tablo baz alınarak işlemler yapılır.
Dezavantaları:
  • Göstermek istediğin her kolon için ayrı ayrı select sorgusu yazman gerekir.
  • Çok fazla tablo kullanmak gerektiğinde hız açısından yavaştır.
Inner Join:
Avantajları:
  • SQL Management Studio üzerinde Views bölümünden kolayca oluşturulabilir.
  • Çoklu tablolarda kolayca ilişkilendirme yapılabilir
  • Sorgular hızlı çalışır.
Dezavantajları:
  • Okunması, yazılması ve anlaması zordur.
  • Manuel olarak yazmak istediğinde daha çok zorlanırsın ve uzun zaman alır.
  • Tablolardaki ortak bilgiler baz alınarak işlemler yapılır.
Bu açıklamada kafanızı karıştırabileceğini yada kafanızda soru işareti oluşturacağını düşündüğüm yerler
  1. Ana tablo baz alınarak işlemler yapılır.
  2. Tablolardaki ortak bilgiler baz alınarak işlemler yapılır.
maddeleridir.
Arkadaşlar yukarıdaki ekran çıktılarında farketmişsinizdir.
İç içe select de karşısında 0 sıfır olan bir kategori var iken inner joinde yoktur..
İç içe select'te önce en dıştaki tablodaki (ana tablo diyorum) tüm veriler listelenir. Daha sonra diğer tablolara gidilerek iç select'teki where şartına göre istenen veriler listeye eklenir. Ana tabloda var olan ama diğer tabloda olmayan bir kayıt olduğunda karşısına 0 sıfır yazar.
Yani şöyle düşünün; "önünüzde iki kutu var ve içlerinde renkli toplar var. İlk kutudaki tüm topları yerine yerleştirdiniz. Sonrasında diğer kutuya bakıp aynı renkte olanları da yerlerine yerleştirdiniz. İlk kutuda olan ama diğer kutuda olmayan birkaç rengin karşısı boş kaldı."
Inner joinde listeyi oluşturacak tüm veriler aynı anda toparlanıp yerlerine koyulduğu için birine olup diğerinde olmayan kayıtlar listelenmez.
Yani şöyle düşünün; "önünüzde iki kutu var ve içlerinde renkli toplar. Her iki kutuyada aynı anda bakıp aynı anda aynı renkli topları aynı anda bir yerlerine koyuyorsunuz. Bu şekilde olduğundan ilk kutuda olup ikinci kutuda olmayan renklere elinizi hiç uzatmıyorsunuz."
Uzun bir ders oldu umarım düzgünce anlatbilmiş ve sizlerinde anlamasını sağlayabilmişimdir.
Bu dersimizde bu kadar arkadaşlar.
Bol Kodlu Günler.
https://mustafabukulmez.com/

0 Yorum:

Google'nin Snapchat'e Gizlice Yatırım Yaptığı Ortaya Çıktı

Temmuz 04, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Google'nin Snapchat'e Gizlice Yatırım Yaptığı Ortaya Çıktı


Google Capital, marka adını ve kurumsal kimliğini değiştirerek CapitalG olarak anılmaya başlayacağını duyurdu.
Bu değişim kapsamında internet sitesi de yenileyen CapitalG, yatırım yaptığı şirketleri listelediği sayfada Snapchat logosuna yer vermesiyle Snapchat'e yatırım yaptığını resmen açıkladı. Ancak CapitalG tarafından yapılan yatırımın tutarlarına dair hiçbir ipucu bulunmuyor. Ayrıca Snapchat ve Google'nin daha öncedende bir bağı bulunuyor. Snapchat, Google'nin bulur servislerinin önemli bir müşterisi konumunda.
https://mustafabukulmez.com/

0 Yorum:

PayPal, "Türkiye’ye Geri Dönüyor" İddialarını Yalanlandı!

Temmuz 04, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Paypal, Twitter'dan paylaştığı açıklamayla Türkiye ile ilgili iddiaları yalanladı.


Geçen Haziran ayında Bankacılık Düzenleme ve Denetleme Kurumu (BDDK) tarafından lisansı iptal edilen PayPal, Türkiye’deki faaliyetlerini durdurma kararı almıştı. NTV’nin haberine göre şirket Mart 2017’de ‘Cross Border’ (Sınır ötesi) sistemiyle geri dönmeye hazırlanıyor.
Cross Border adı verilen sınır ötesi sistem sayesinde tekrar faaliyetlerine başlayacak olan PayPal, zaman içerisinde de sunucularını Türkiye’ye taşıyacak. Alınan karar, BDDK tarafından da onaylanmış durumda.
Şirket yetkilileri de PayPal’ın Mart 2017’de ülkemizde aktif hale geleceğini onayladı.
Paypal, İddiaları Yalanladı
Paypal, resmi Twitter hesabından yaptığı açıklamayla "Türkiye'ye Geri Dönüyor" iddialarını yalanladı. Konu ile ilgili Paypal'ın yayınladığı açıklama şu şekilde;
“Yakın zamanda basında çıkan PayPal ile ilgili haberleri gördük. Ancak, şu an PayPal’ın Türkiye’deki faaliyetleri ile ilgili paylaşacağımız yeni bir bilgi bulunmamaktadır.  Gelecekte Türkiye'deki müşterilerimize yeniden hizmet verebilmek için gerekli iznin alınması yönündeki çalışmalarımız devam edecektir.”

0 Yorum:

Instagram Fotoğraflarınızdan Depresyon Analizi Yapan Algoritma

Temmuz 04, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Araştırmalara göre depresyondaki insanların en çok kullandığı filtre Inkwell, mutlu insanların en çok kullandığı filtre ise Valencia imiş.

Harvard Üniversitesi‘nden Andrew Reece ve Vermont Üniversitesi ‘nden Chris Danfort isimli iki araştırmacı Instagram fotoğraflarına göre depresyon analizi yapan bir algoritma geliştirdi. Araştırmalara göre depresyondaki insanların en çok kullandığı filtre Inkwell, mutlu insanların en çok kullandığı filtre ise Valencia imiş.




Araştırmalarda verileri elde etmek için instagramınızda bir çok bilgi bulunuyor.
• Fotoğraflar daha çok gündüz mü çekiliyor, gece mi?
• Ev içerisinde mi çekiliyor, dışarıda mı?
• Fotoğrafta başka insanlar var mı, yoksa tek başına mı çekilmiş?
• Filtre kullanılmış mı, kullanılmışsa hangi filtre?
• Ne sıklıkla fotoğraf paylaşıyor, ne sıklıkla öylesine geziniyor?
• Fotoğraftaki hakim renk ne, parlaklık azaltılmış mı?
Araştırmanın çıkış noktası, renklerle duygu durumları arasındaki ilişkiye dayanıyor. Örnek olarak; daha parlak ve canlı renkler genel olarak pozitif duyguları yansıtırken, daha koyu ya da mat renkler negatif duygular ile ilişkilendiriliyor. Chris Danfort ve Andrew Reece bu ilişkiden yola çıkarak; Amazon ‘un Mechanical Turk servisinde çalışan 500 Instagram kullanıcısının dahil olduğu bir çalışma yaptılar. Öncelikle çalışanlara depresyon durumlarıyla ilgili anketler yapıldı. Ardından ise çalışanların instagram profilleri incelemeye alındı. Paylaşımlarda kullanılan renkler, filtreler ve fotoğraflarda yer alan bazı detaylar değerlendirildiğinde 170 katılımcının depresyonda olduğu sonucuna ulaşıldı.

Çalışma boyunca araştırmacılar tarafından 40 bin fotoğraf analiz edildi. Herhangi bir depresyon sorunu olmayan kullanıcıların paylaştıkları son 100 fotoğraf ile depresyon sorunu olan kullanıcıların depresyona girmeden önce paylaştıkları 100 ‘er fotoğraf detaylı bir şekilde incelendi. Ardından bu fotoğraflar katılımcılara gösterildi ve katılımcılardan bu paylaşımları ilgi çekicilik ve mutluluk kriterlerini göz önünde bulundurarak 0 ‘dan 5 ‘e kadar puanlamaları istendi. Bunlara ek olarak paylaşımlardaki kontrast ya da renk doygunluğu gibi metrikler de araştırmaya eklendi.
Araştırmaya göre depresyondaki bireyler, filtreleri daha az kullanıyormuş. Ayrıca fotoğrafa daha çok yorum geliyorsa, genelde fotoğrafın sahibi depresyondaki bireyler oluyormuş. Beğenisi daha çok olan fotoğraflar ise yüksek oranda depresyonda olmayan insanlara ait çıkmış.
Ayrıca depresyondaki insanların fotoğraflarında, mutlu insanlarınkine kıyasla daha az insan bulunuyormuş. Hatta genelde tek başlarına fotoğraf çekiliyorlarmış ve bu insanların instagram fotoğraflarında gerçekten de daha koyu, daha soluk ve karanlık fotoğraflar paylaştığını farketmiş. Ve yapılan pek çok araştırmaya göre, depresyondaki insanlar hem daha az renk algılıyor; hem de karanlığı, karanlık mekanları veya solgun görselleri tercih ediyor. Sağlıklı insanlarsa tam tersi şekilde, renkli ortamları veya görselleri tercih ediyorlar.
Bu bakımdan, renk tonunun artırılması (hue), doygunluğun (saturation) ve parlaklığın (brightness) azaltılması depresyonda olduğunuza işaret ediyor olabilir.
 Kaynak: Ceotudent
https://mustafabukulmez.com/

0 Yorum:

Instagram ve Snapchat Kıyaslandı, Sonuçlar Şaşırtıcı

Temmuz 04, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Yeni nesil hem Instagram’ı hem de Snapchat’i kullanmaktan keyif alıyor fakat farklı noktalarda elbette biri diğerinden öne çıkıyor.


Yeni nesil hem Instagram’ı hem de Snapchat’i kullanmaktan keyif alıyor fakat farklı noktalarda elbette biri diğerinden öne çıkıyor.
Dijitale özellikle son dönemde yapılan yatırımların artmasıyla ortaya önemli bir soru çıkıyor: Hangi sosyal ağ daha gündemde ve reklam bütçeleri hangisine gitmeli? Bu soruya yanıt bulma çabasıyla, pazar araştırma şirketi olan Survey, 13-34 yaş arası 511 Instagram ve Snapchat kullanıcısına bir anket düzenliyor ve uygulamalar hakkındaki fikirlerini alıyor. Sonuçlar birçok kişi tarafından tahmin edilenin aksini gösteriyor. İşte o sonuçlar:
Kaynak: CEOtudent
https://mustafabukulmez.com/

0 Yorum:

SQL 2014 Server Management Stduio'da Yapılması Gereken Bazı Ayarlar

Temmuz 04, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Bu dersimizde SQL 2014 Server Management Stduio'da Yapılması Gereken Ayarlara değinelim


Selamlar,
Bu dersimizde  SQL 2014 Server Management Stduio programında yapmamız gereken bir kaç ayarı göstermek istiyorum. Aslında zorunda değiliz ama bize kolaylık sağlar.
  1. Tablodaki verileri görmek istediğimizde tablo adi > sağ tık > select top ** Rows  yaparız. Başlangıçta burada 100 olur. Zamanla bu sayı size yetmez. Bunu değiştirebiliriz. Tools >  Options >  SQL Server Object Explorer alanında 100 leri görürsünüz buralara 2147483647 yazın. Bun sayının anlamı tüm kayıtlardır. Yani sql de bir tabloda olabilecek max satır sayısıdır. 
  2. Tools >  Options >  Text Editör  alanındaki All Languages, Plain Text, Transact-SQL ve XML kısmındaki Word Wrap'ı aktif edebilirsiniz. Bu kod ekrana sığmayacak kadar uzun olduğunda otomatik olarak bir alt satıra indirir.
  3.  Tools >  Options > Designers > Table and Database Designers alanındaki tüm işaretleri kaldırın. Burada en önemlisi bir tabloda değişiklik yapmanız gerektiğinde size tabloyu silip yeniden oluşturmaya zorlayan bir seçenektir. Onu da kaldırmış oluyoruz.
bu dersimizde bu kadar arkadaşlar. Bu 2014 versiyonu içindir ancak diğer versiyonlar dada benzer yerlerdedir bir arama ile bulabilirsiniz.
Bol Kodlu Günler.
https://mustafabukulmez.com/

0 Yorum:

C# Formda 24 Saat Formatında Göründüğü Halde SQL'e 12 Saat Formatında Kaydolması Sorunu

Temmuz 04, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Bu dersimizde C# Formda 24 Saat Formatında Görünüp SQL'e 12 Saat Formatında Kaydolması Sorununun çözümünü anlatacağım


Selamlar arkadaşlar,
Bu dersimizde C# projelerinde, formdaki tarih nesnesinde 24 saat formatında göründüğü halde sql 12 saat formatında kaydolması sorununa değineceğim.
Yaptığım bir projede başıma geldi. SQL Insert işlemi için bir class oluşturmuştum. Bu class'ı kullandığım yerlerde saatler nedense hep 12 saat formatında kaydolmuş ve bunu yeni farkettim. C#'dan sql de 
C#
DateTime.Now.ToString("yyyyMMdd hh:mm")
şeklinde kaydediyordum ve bir sorun yaşamıyordum ancak bahsettiğin insert classından sonra tarihler hep 12 saat formatında kaydolmuş. Bunu düzeltmenin bir yolu var. Yukarıdaki işlemi yaparken 
C#
DateTime.Now.ToString("yyyyMMdd HH:mm")
C#
hh:mm
// 12 saat formatında algılaması için
kısmını
C#
HH:mm
// 24 saat formatında algılaması için
olarak değiştirdiğinizde saatler otomatik olarak 24 saat formatında kaydoluyor. Sizde bu şekilde bir sorun yaşıorsanız yukarıdaki işlemi yapmanız yeterlidir.
Bu dersimizde bu kadar arkadaşlar.
Bol Kodlu Günler.
https://mustafabukulmez.com/

0 Yorum:

MS-SQL Insert Into Select Kullanımı

Temmuz 04, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Bu dersimizde insert sorgusu içerisinde select sorgusunu nasıl kullanacağımızı göreceğiz.


Selamlar arkadaşlar,
Bu dersimizde insert sorugu içerisinde select sorgusunu nasıl kullanacağımızı görelim. bu işlem ile  bir tablodaki bütün değerleri veya filtrelediğimiz verileri başka bir tabloya nasıl tek seferde aktaracağımızı göreceğiz.
Bu işlem işlerini çok kolaylaştıran br işlemdir arkadaşlar. bunun varlığını bilmeden önce verileri aktarmak için bile küçük programcıklar yazmak zorunda kalıyordum. Ama artık buna gerek kalmadı.
Hemen kodlarımızı görelim.
SQL
INSERT INTO table2

SELECT * FROM table1 WHERE condition;
Yukarıdaki örnekte birbirini aynısı olan iki tablodan birinden diğerine filtrelenen verileri aktarmayı görüyoruz. 
Peki bu ne işe yarar derseniz; Bir revizyon tablosu olarak kullanabilirsiniz. Örneğin sipariş tablonuz var ve yapılan her değişikliği kaybetmeniz gerekmektedir. Bu gibi durumlar SIPARISLER tablonuzun aynısı olan SIPARISLER_REV olarak bir tablo daha açarsınız ve eski kayıtları REV tablosuna aktarırsınız.
SQL
INSERT INTO table2 (column1, column2, column3, ...)

SELECT column1, column2, column3, ... FROM table1 WHERE condition;
Yukarıdaki bu kodumuz da da bir tablodaki istediğimiz kolonları başka bir tablonun istediğimiz kolonuna katarabilirsiniz.
Peki bunu nasıl bir yerde kullanabiliriz? 
Örneğin kapsamlı bir rapor oluşturmanız gerekiyor. Firma ve yıl bazlıı Alış tutarları ve miktarları, Satış tutarları ve miktarları, toplam adetleri, kalan stoklar, stokların max min miktarlarıi kaç fatura kesilmiş vs bir çok tablodan verileri toplayıp tek raporda göstermeniz gerekiyor. Bu gibi işlemlerde karmakarışık sorgular yerine bunu kullanabiliriz. 
Temsili olarak şu şekilde görünecektir.
SQL
CREATE TABLE YILLIK_RAPOR ( 
 CariAdi  [nvarchar](190) NULL, 
 SatisTutari [float] NULL,
 AlisTutarı [float] NULL, 
 FaturaAdedi [int] NULL,
) 

INSERT INTO YILLIK_RAPOR (CariAdi)
SELECT CariAdlari FROM CARILER WHERE Aktif=1 order by CariKodu asc

INSERT INTO YILLIK_RAPOR (SatisTutari)
SELECT SUM (Tutar) FROM SATISLAR group by CariKodu order by CariKodu asc;

INSERT INTO YILLIK_RAPOR (AlisTutarı)
SELECT SUM (Tutar) FROM ALISLAR group by CariKodu order by CariKodu asc;

INSERT INTO YILLIK_RAPOR (FaturaAdedi)
SELECT COUNT (Tutar) FROM FATURALAR group by CariKodu order by CariKodu asc;

select CariAdi, SatisTutari, AlisTutarı, FaturaAdedi from YILLIK_RAPOR
Tablo oluşturulur, değerler toplanır, veriler çekilir. Liste alındıktan sonra tabloyu drop edebilirsiniz.
Tabiki bu şekilde %100' de çalışır ihtimalini veremem. Böyle birşey denemediğim için tahmini olarak bu kodları yazdım.Ama mantıken çalışması ve doğru sonuçlar vermesi gerektiğini düşünüyorum.
Amacım olayın mantığını anlatmaya çalışmaktı arkadaşlar. Anladıysanız ne mutlu bana anlamadığınız bir yer varsa yorum olarak sorabilirsiniz.
Bu dersimizde bu kadar arkadaşlar.
Bol Kodlu günler...
https://mustafabukulmez.com/

0 Yorum: