• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

SQL Inner, Equi, Self, Outer, Left, Right, Cross Join Kullanımı

Veritabanı programlamada SQL Join yapısını ve Inner Join, Equi Join, Self Join, Left, Right, Outer Join, Cross Join ifadelerinin nasıl kullanıldığını öğrenelim.

18.07.2013

Yazar: Muhammed ÖNAL (Google+)

Kategori: T-SQL

19083

SQL JOINS

Merhaba arkadaşlar,

Bu yazımızda SQL Server içinde JOINS konusuna değineceğim. SQL sorgularımızı gerçekleştireceğimiz veri tabanı işlemlerimizde oldukça önem arz eden bir konu olduğundan dolayı SQL programlamaya yeni başlayan değerli arkadaşlara yol gösterici olması amacıyla temel düzeyde örnekler eşliğinde değinmiş olacağız.
 

JOIN:

Bildiğiniz gibi tablo birleştirme işlemlerini gerçekleştirdiğimizde birbiri ile ilişkili verilerimizi farklı tablolardaki birbirini tamamlayan verilerin tek bir tablo gibi sorgu sonucunda birleştirilerek verilerimizin listelenmesine olanak sağlayan ifadelere JOIN demekteyiz.

Temel anlamda JOIN ifadesi ile bir tabloyu kendisiyle birleştirebileceğimiz gibi birden fazla tabloyu da bu ifade ile birleştirmek mümkündür. Bu birleştirme işlemlerini gerçekleştirdiğimizde istediğimiz işlemlere yönelik farklı metotlar baş gösterir. Bu farklı metotlar JOIN ifadesi ile kendi içinde farklı komutlar vasıtasıyla gerçekleştirilmektedir. Dolayısıyla, veri tabanı programlarken JOIN ifadeleri olmazsa olmazlar arasındadır diyebiliriz.

Örnek verecek olursak;
Bir Maaş Bordro Sisteminde, işçilerin maaşlarını tutan tablo ile İşçi tablosu birleştirilerek herhangi bir işçiye ait maaşı, hatta Departmanına göre işçiler arasında maaş zammı veya maaşı daha fazla olan işlemleri gerçekleştirmeyi sağlayan verileri listelemek için kullanılabilir.

Klasik JOIN’lere ait tablo birleştirme işlemleri söz dizimi genel anlamda aşağıdaki gibidir:

SELECT  sutun_adi1,sutun_adi2...
FROM     tablo_adi1,tablo_adi2...
WHERE  tablo_adi1.sutun_adi1 = tablo_adi2.sutun_adi2
…


Bu metot orta ve büyük ölçekli ileri düzeydeki projelerimizde önerilmeyen bir metotdur diyebiliriz.

SQL SERVERDA JOIN’lerin FARKLI ÇEŞİTLERİ

Genel anlamda çeşitleri aşağıdaki gibidir.

  1. Inner Join veya Equi Join
  2. Outer Join
    a- Left Outer Join
    b- Right Outer Join
    c- Full Outer Join
     
  3. Cross Join

Şimdi, tblIsciler ve tblBolum adlı 2 tablo oluşturarak örneklendirmeler üzerinde göstermeye çalışalım.

SQL Server Studio Management üzerinde Deneme adlı bir Veri tabanı oluşturuyoruz. Deneme adlı veri tabanımızı oluşturduktan sonra söz konusu iki tablomuzu oluşturmak için yeni ve boş bir sorgu sayfası açıyoruz, ve aşağıdaki tablo oluşturma SQL kodlarımızı yazarak Execute ediyoruz.

CREATE TABLE tblIsciler(
    IsciID int identity (1,1) NOT NULL Primary Key,
    IsciNo nvarchar (50) NOT NULL,
    IsciAdi nvarchar (50) NOT NULL,
    IsciSoyadi nvarchar (50) NOT NULL,
    IsciEmail nvarchar (50) NULL,
    YoneticiID int NULL,
    BolumID int 
)
CREATE TABLE tblBolum(
    BolumID int identity(1,1) NOT NULL Primary Key,
    BolumAdi nvarchar (75) NOT NULL
)

Tablolarımızı şekildeki gibi boş sorgu alanına yazdıktan sonra EXECUTE (F5) butonu vasıtasıyla çalıştırarak Deneme veri tabanımızın Table klasörü altında söz konusu 2 tablomuzu oluşturmuş oluruz.

Tabloları oluşturduktan sonra şimdi gelelim oluşturduğumuz tablolarımıza veri ekleme işlemine. Bir tabloya veri ekleme işlemini SQL komutlarından
INSERT INTO …. VALUES …  Komutunu kullanıyorduk. Veri ekleme işlemleri için aşağıdaki gibi bir query oluştururuz.


INSERT INTO tblIsciler(IsciNo,IsciAdi, IsciSoyadi, IsciEmail, YoneticiID, BolumID)
VALUES('MP001','Muhammed','ÖNAL','muhammed.onal@yazilimdilleri.net',2,1)

INSERT INTO tblIsciler(IsciNo,IsciAdi, IsciSoyadi, IsciEmail, YoneticiID, BolumID)
VALUES('MP002','Veysel Uğur','KIZMAZ','veyselugur.kizmaz@yazilimdilleri.net',1,2)

INSERT INTO tblIsciler(IsciNo,IsciAdi, IsciSoyadi, IsciEmail, YoneticiID, BolumID)
VALUES('MP003','Burak','TUNGUT','burak.tungut@yazilimdilleri.net',1,3)

INSERT INTO tblIsciler(IsciNo,IsciAdi, IsciSoyadi, IsciEmail, YoneticiID, BolumID)
VALUES('MP004','Selin','YETİMOĞLU','selin.yetimoglu@yazilimdilleri.net',1,NULL)

INSERT INTO tblBolum(BolumAdi)
VALUES('Gömülü Sistemler')

INSERT INTO tblBolum(BolumAdi)
VALUES('Admin')

INSERT INTO tblBolum(BolumAdi)
VALUES('Teknoloji ve Yazılım')

INSERT INTO tblBolum(BolumAdi)
VALUES('İnsan Kaynakları')

Tablolarımıza ait içeriklerimizi de şekildeki gibi doldurmuş olduk. Şimdi bu tablolar üzerinden KLASİK JOIN işlemlerimize dair sorgular gerçekleştirelim.

Klasik Join ifadesine ait bir örneğe geçmeden önce şunu belirtmekte fayda vardır. Klasik Join; WHERE cümleciği ile gerçekleştirilen SQL standartlarında belirtilen söz dizimine sahip bir metotdur diyebiliriz. Bundan dolayı SQL Server, Klasik Join’i bir INNER JOIN olarak işler.

Örnek olarak, basit bir tablo birleştirme işlemini gerçekleştirecek sorgumuzu yazacak olursak, aşağıdaki gibi bir çıktı almış oluruz.

SELECT tblIsciler.IsciNo,tblIsciler.IsciAdi,tblIsciler.IsciSoyadi,tblBolum.BolumAdi
FROM tblIsciler,tblBolum
WHERE tblIsciler.bolumID = tblBolum.BolumID

Klasik Join Sorgu, Classic Join in SQL

Görüldüğü gibi tblIsciler ve tblBolum tablolarındaki birleştirmek istediğimiz alanları SELECT ile seçerek, WHERE şartında her iki tabloda da bulunan BolumID ortak sütun adını şart olarak eşitlemiş olduk.

INNER JOIN

Equi Join olarak da bilinen JOIN ifadesinin bir çeşididir. İki tablo arasında birleştirme işlemi gerçekleştirilirken, her iki tabloda da yer alan değerler seçilir.

Örneğin yukarıda vermiş olduğumuz örnekte her iki tabloda da ortak bulunan alanlar BolumID idi. Bu nedenden ötürü tablolardan herhangi birinde bulunup da diğer tabloda bu alana uygun ortak ilişkili değer bulunmuyorsa WHERE şartı ile bu kayıtlar seçilme işlemine tabi tutulmaz.

Kabaca belirtecek olursak, INNER JOIN tablo birleştirme işlemlerinde en çok kullanılan metotdur denilebilir.

inner join in math, inner join ile tablo birleştirmek

Şimdi, Eğer; IsciID, IsciAdi, IsciSoyadi ve işçilere ait BolumAdi sütunlarını almak istersek, bu birleştirme işleminde INNER JOIN kullanabiliriz.

İşlemimize ait sorgumuzu yazacak olursak, yukarıda yaptığımız sorguyu bu defa INNER JOIN ifadesi ile gerçekleştirmeye çalışırız.

SELECT Isci.IsciID,Isci.IsciAdi,Isci.IsciSoyadi,Departman.BolumAdi
FROM tblIsciler Isci
     INNER JOIN tblBolum Departman
             ON Isci.BolumID = Departman.BolumID

Ve sorgumuza ait çıktımız;

inner join sorgu, query in inner join

Şeklinde olur.

Görüldüğü gibi sorgumuzda INNER JOIN ifadesi ile her iki tabloda ortak olan BolumID sütunu kullanılarak birleştirilmiş oldu.
NOT: tblIsciler tablosunun adı Isci olarak, tblBolum tablosu ise Departman olarak takma isimleriyle değiştirilmiştir. Tablo ismini değiştirirken aralarına AS konulabilir.

SELF JOIN

Bazen, tek bir tablo üzerinde JOIN işlemleri gerçekleştirmeye ihtiyaç duyarız. Bu tip JOIN çeşidine SELF JOIN denilmektedir. Birleştirme işlemine tabii tutulacak sütunlar aynı tablo üzerindedir.

Bu JOIN işleminde, hafızada aynı tablonun 2 kopyasını açmaya ihtiyaç duyarız. Aşağıdaki sorgumuzu incelediğinizde neyi ifade etmek istediğimizi daha net bir şekilde anlamış olursunuz.

Örneğin: Eğer, biz IsciAdi,ve işçilere ait yönetici adını (YoneticiAdi) çekmeğe ihtiyaç duyarsak, bu noktada SELF JOIN ifadesini kullanmamız gerekir. YoneticiID sütun  adı zaten tblIsciler adlı tabloda mevcut olarak bulunmaktadır. SELF JOIN ifadesi ile aynı tabloda YoneticiAdi oluşturup listeleyeceğiz.

SELECT Isci1.IsciID,
       Isci1.IsciAdi+'   '+Isci1.IsciSoyadi AS IsciTamAdi,
       Isci2.IsciAdi+'   '+Isci2.IsciSoyadi AS YoneticiAdi
       
       FROM tblIsciler Isci1
            INNER JOIN tblIsciler Isci2
                    ON Isci1.YoneticiID = Isci2.IsciID

self join

Şeklinde bize bir sonuç çıktısı vermiş olur.

OUTER JOIN

Kabaca en basit tanımını yapacak olursak,
Outer Join; Aynı anda her iki tabloda da bulunmayan kayıtları listelemek için kullanılan JOIN ifadesidir.

Kullanımına göre üç’e ayrılır.

  1. Left Outer Join
  2. Right Outer Join
  3. Full Outer Join

Olmak üzeredir.

Outer Join işlemleri ile sorgular gerçekleştirildiğinde tablolardan biri veya her ikisi üzerinde gerçekleştirilebilir. Outer Join kullanımında yazdığımız sorguda kullanılan ilk tablo soldaki tablo, ikinci kullanılan tablo ise sağdaki tablo olarak kabul edilmiş olur.

Left Outer Join: İlk Kullanılan tablo soldaki tablodur. Soldaki tablo içinde kullanılan kayıtların karşılığı sağdaki tabloda olmasa bile söz konusu kayıtlar sorgu sonucunda listelenir.

Right Outer Join: İkinci kullanılan tablo sağdaki tablodur. Yukarıdaki ifademize benzer olarak sağdaki tablo içinde kullanılan kayıtların karşılığı soldaki tabloda olmasa bile söz konusu kayıtlar sorgu sonucunda listelenir.

Full Outer Join: Hem soldaki hem de sağdaki tablolarda karşılıklı olarak eşit bir satır bulunmayan kayıtları sorgu sonucunda listeleyen join ifadesidir. (Yani İki tablo üzerinde hem LEFT hem de RIGHT OUTER işlemleri gerçekleştirilir)

ÖRNEK SORGULAR:

SELECT Isci.IsciID,Isci.IsciAdi,Isci.IsciSoyadi,Departman.BolumAdi
FROM tblIsciler Isci
     LEFT OUTER JOIN tblBolum Departman
                  ON Isci.BolumID = Departman.BolumID

outer join

Yukarıdaki sorgumuza baktığımızda, Eğer sorgumuzu LEFT OUTER JOIN ile gerçekleştirmeseydik INNER JOIN ile gerçekleştirseydik, BolumAdi sütununda bulunan NULL kaydı listelenmeyecekti.

SELECT Isci.IsciID,Isci.IsciAdi,Isci.IsciSoyadi,Departman.BolumAdi
FROM tblIsciler Isci
     INNER JOIN tblBolum Departman
             ON Isci.BolumID = Departman.BolumID

Şeklindeki sorgumuzda INNER JOIN ile sorguyu gerçekleştirdiğimizde

inner join sorgusu

Sonuç çıktısını almış oluruz.

Aynı tablolar üzerinde benzer bir sorgumuzu RIGHT OUTER JOIN ile gerçekleştirirsek, Bu sorgumuzda tblBolum tablosunu JOIN deyiminin sağ tarafında tutarız.

SELECT Departman.BolumAdi,Isci.IsciID,Isci.IsciAdi,Isci.IsciSoyadi 
FROM tblIsciler Isci
     RIGHT OUTER JOIN tblBolum Departman
                   ON Isci.BolumID = Departman.BolumID

Eğer, tblBolum tablosunda herhangi bir işçiye ait içerik yoksa İşçi tablosundan yani tblIsciler’den NULL ifadesini söz konusu sütunlara ekleyecektir.

right outer join

Şeklinde bir sonuç çıktısı bizlere verir. Sorgu sonucunda da gördüğümüz gibi Gömülü Sistemler, Admin, Teknoloji ve Yazılım, İnsan Kaynakları adlı bölüm adlarının NULL olarak eklenmiştir.

İşlemlerimizi FULL OUTER JOIN ile gerçekleştirmek istediğimizde ise hem LEFT hem de RIGHT OUTER JOIN işlemleri gerçekleştirilir.

İlk olarak soldaki tabloda bulunan girdi kayıtları listelenir. Listelenen girdilerimiz/kayıtlarımız sağdaki tabloda bu kayıtların karşılığı var ise sağdaki tablodaki karşılığı olan kayıtlarda listelenir, eğer karşılığı mevcut değilse NULL olarak listelenir.

SELECT Isci.IsciID,Isci.IsciAdi,Isci.IsciSoyadi,Departman.BolumAdi 
FROM tblIsciler Isci
     FULL OUTER JOIN tblBolum Departman
                  ON Isci.BolumID = Departman.BolumID

full outer join

Şeklinde bir çıktı sonucu alınır.

NOT:

Sorgularda çalıştırdığımız LEFT OUTER JOIN, RIGHT OUTER JOIN ve FULL OUTER JOIN ifadelerindeki OUTER ifadesi kullanılmadan LEFT JOIN, RIGHT JOIN ve FULL JOIN şeklinde de sorguya tabi tutularak aynı sonucu elde etmek mümkündür.

CROSS JOIN

En kaba ifadeyle matematiksel işlemlerde kullanılan Kartezyen çarpım ifadesi olarak adlandırılabilir. İki tablo arasında çaprazlama işlemine tabi tutulur.

Örneğin;

Söz konusu tablolardan 1. Tabloda 4 kayıt olduğunu farz edelim, 2.tabloda da 4 kaydın olduğunu düşünürsek. Her iki tablo arasında CROSS JOIN yapıldığında sonuç çıktısı olarak 4*4=16 kayıt döndürecektir.

Aşağıdaki sorgumuzu çalıştıralım ve sonucunu görelim:

SELECT Isci.IsciID,Isci.IsciAdi,Isci.IsciSoyadi,Departman.BolumAdi 
FROM tblIsciler Isci
     CROSS JOIN tblBolum Departman

cross join, çapraz birleştirme,

Şeklinde bir sorgu çıktısı oluşturulur.

Bugünlük te bizden bu kadar diyor, bir sonraki makalemizde görüşmek dileğiyle faydalı olmasını temenni ederim.

 

Muhammed ÖNAL
Bilgisayar Mühendisi
RFID Sistemleri Uzmanı
BT Yönetişimcisi

Blog:  http://www.muhammedonal.com
Web : http://www.yazilimdilleri.net

Copyright @ 2013, Muhammed ÖNAL

Yazar Hakkında

Muhammed ÖNAL

Muhammed ÖNAL

www.muhammedonal.com

Bilgisayar Mühendisi | RFID Sistemleri Uzmanı | BT Yönetişimcisi | Strateji Planlama ve İş Geliştirme 2015 itibariyle sağlık sektöründe Bilgi Sistemleri Yöneticisi ve Üst yönetim Stratejik Planlama ve İş Geliştirme Koordinatörü pozisyonunda çalışmaktadır.

Sosyal Medya

ORANLAR

  • 19083izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 124113
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 71306
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51908
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ