You are on page 1of 8

VER TABANI YNETM SSTEMLER I

BLM 11 Alako BURMA

11. SQL de JOIN (BRLETRME) LEM

11.1. JOIN (Birletirme) lemi

Veri taban kaytlar oluturulurken btn bilgiler bir tabloda deil de, birka
tablo zerinde tutulur. Bu datalarn daha dzenli olmasn, gereksiz veri tekrarlarnn
engellenmesini ve veri ynetimini kolaylatrr. Daha nce bu konu ile ilgili 4. ve
5.Blmde veri taban ve normalizasyon konusundan detaylar ile bahsedilmi ve
rnekler verilmitir.
Bu blme kadar yazlan tm sorgularda tek tablo zerinde ilem yapld. Bu
blmde, ilikisel veri tabanlarnn ve SQLin ok nemli ve yararl bir zellii olan
birletirme (join) ilemi anlatlacaktr. likisel veri tabanlarna ilikisel denmesinin
nedeni olan Birletirme ilemi iki veya daha ok tablo arasnda balant (link)
kurarak tek bir tablo oluturur ve sorgu bu tablo zerinde alr .
Birden fazla tablo zerinde ilem yaplaca zaman; select cmleciinden
sonra tabload.tablo_alanlar aralarna virgl konularak yazlr ve kullanlacak tablolar
from cmleciinden sonra aralarna virgl konularak yazlr. Daha sonra da WHERE
art ile tablolar arasndaki ilikili ortak alanlar eitlenir. Buradaki en nemli zelliin
iki tablo arasnda ilikili ortak bir alann olmas gerektiidir. Aada projemize ait
tablolar ve ilikili alanlar belirtilmitir.
Tablolar
arasndaki
ilikiyi
belirten
izgi

ekil 11.1.1. rnek Personel Projenin MS Access deki diyagram


Tablo simleri Ortak Alanlar
Personel-Maa tablosu SicilNo
Personel-Meslekler tablosu MeslekKodu
Personel-CalslanBirim tablosu BirimKodu

81
VER TABANI YNETM SSTEMLER I Alako BURMA

Projedeki her tablonun bir alan ana tablo olan personel tablosunun bir alan ile
ortaktr ve tanmlanan alanlar ayn zelliktedir.
rnek-1) SQL> select * from personel where birimkodu=301;
BirimKodu 301 olan personelin listesini verir.

ekil 11.1.2. Join Sorgu Ekran-1

Bu sorgu sonucunda personele ait birimler birimKodu 301 olarak ve


mesleklerde meslekkodu olarak listelenmektedir. Kod olarak listelenen bilgiler ok
aklayc deildirler. rnein Salih Baar isimli personelin meslekkodu 6 olarak
grntlenmekte ama 6 kodunun hangi meslek olduu anlalamamaktadr. Personel
tablosundaki meslekkodunun karl olan deer meslekler tablosundan bulunarak
getirilmelidir. Bu meslekkodlarnn hangi meslee denk geldiini bulmak iin personel
ve meslekler tablosu arasnda join yaplmaldr. yleki; personel tablosunda Salih
Bayar isimli personele ait 6 olan meslek kodu meslekler tablosunda aranacak ve
meslekler tablosunda meslekkodu 6 olan kaytta bulunan programc meslei
personelin meslei olarak yazlacaktr. Bu ilemden sonra meslek alanna programc
yazlacak ve veriler daha anlaml hale gelecektir. Bu karlatrma ilemini yapan
ifade WHERE karlatrmasndan sonra kullanlacak olan ifadedir.

ekil 11.1.2. Join Sorgu Ekran-2

82
VER TABANI YNETM SSTEMLER I Alako BURMA

Sorgu ok uzun ve kark gibi grnmesine ramen aslnda ok basittir.


Select komutunun ardndan birden fazla tablo kullanld iin alann hangi tabloya ait
olduunu bildirmek iin listelenecek her alan iin tabload.tablo_alan kullanlmtr.
Personel.sicilno veya meslekler.meslekkodu gibi. From komutundan sonra
kullanlan tablolar virgl ile ayrlarak yazlmtr. Daha sonra personel tablosundaki
meslekkodunun meslekler tablosundaki karln bulmak iin
where personel.meslekkodu=meslekler.meslekkodu karlatrmas yaplmtr.
and personel.birimkodu=301 ifadesi tm personel yerine 301 nolu birimde
alan personelin listelemesi iindir.
and And ile iki art birbiri ile birletirilmitir.

Yukardaki sorgu aadaki gibi de yazlabilir.

ekil 11.1.3. Join Sorgu Ekran-3

ki sorguda ayndr. Tek fark yazlm farkdr. Dikkat edilirse p.sicilno gibi
ifadeler vardr. Burada olduu gibi from szcnden sonra yazlan tablo adlar iin
bir boluk braktktan sonra ksa bir isim verilebilir. Bylece uzun tablo adn srekli
yazmaktansa o tablo ad iin alias olarak adlandrlan ksa isim kullanlabilir. Alias
olarak verilen tablo ismi alanlar listelenirken yazm olarak byk kolaylk
salamaktadr. Burada personel tablosu iin p, meslekler tablosu iin m kullanlmtr.
En ok kullanlan yntem ilk tabloya a harfinden balamak, dierlerine de b,c, gibi
alias isimler vermektir.
NOT : where personel.meslekkodu=meslekler.meslekkodu Bu ifade kodun
karln bulmak asndan en nemli olan ifadedir. kullanlmaz ise sorgu sonucu
yanl kacaktr. yleki; her bir personel meslek tablosundaki tm mesleklere
karlk gelecek ekilde listelenecektir.

83
VER TABANI YNETM SSTEMLER I Alako BURMA

ekil 11.1.4. Join Sorgu Ekran-4

Yukarda where artnda eksik yazlan sorgu ekrannn bir ksm


bulunmaktadr. Listelenen kayt says 56 dr. Bu say 7 (meslek says) * 8 (301 de
bulunan personel says) arpmdr. Bu sorgu alan 30 personel ait bir liste olsayd
ve where personel.meslekkodu=meslekler.meslekkodu art yazlmasayd liste
7*30 = 210 tane olurdu. Bu nedenle Where koulunda ilikili ortak alanlarn
karlatrlmasna ok dikkat edilmelidir.

84
VER TABANI YNETM SSTEMLER I Alako BURMA

11.2. JOIN lemine Ait rnekler

rnek-1) Personel tablosundaki her meslek grubunda ka personel olduunun


listesini veren sorgu.

ekil 11.2.1. rnek Join Sorgu Ekran-1

rnek-2) Personel tablosundaki her birimde alan ka personel olduunun


listesini veren sorgu.

ekil 11.2.2. rnek Join Sorgu Ekran-2

85
VER TABANI YNETM SSTEMLER I Alako BURMA

rnek-3) Tm personelin ald maalarn listesini veren sorgu. Bu sorguda 30


personel olmasna ramen 29 personele ait maa bilgisi listelenmitir. Daha nce de
bunun zellikle yapld belirtilmiti. Birletirme ilemleri yaplrken karmza yle
bir problem kmaktadr. Birletirme yaplan tablolardan ikinci tabloda birinci tablodaki
her kaydn karl olmazsa, karl olmayan kaytlar sorgu sonucunda sadece
olmayan kaytlar deil bilakis hi kayt gelmez. Bunun iin d birletirme kullanlr.
D birletirme ilemi, kaytlar eksik olan tablonun art tarafna (+) iareti konularak
yaplr. rnek 4 de buna ait uygulama yaplmtr.

ekil 11.2.3. rnek Join Sorgu Ekran-3

86
VER TABANI YNETM SSTEMLER I Alako BURMA

rnek-4) Tm personelin ald maalarn listesini veren sorgu. Maalar tablosunda


1077 sicil numaral Orhan Sezgin isimli personele maa bilgisi yazlmas
unutulmutur. Buradan SQLin ayn zamanda bir kontrol mekanizmas olarak da
kullanlabileceini karabiliriz.

ekil 11.2.4. rnek Join Sorgu Ekran-4

87
VER TABANI YNETM SSTEMLER I Alako BURMA

rnek-5) Aylk creti 1300 den byk olan personelin listesini veren sorgu.

ekil 11.2.5. rnek Join Sorgu Ekran-5

NOT : Bu blm sonuna kadar temel SQL komutlar anlatlmtr. SQL komutlar ok
kullanl ve yararldr. rnein: personel bilgileri ierisinden maa 1500 den byk
olanlarn listesi ve says alnrken SQL dili deil de klasik programlama dili
kullanlm olsayd byle bir liste hangi programlama mant ile elde edilebilirdi.
Sonuca ulaabilmek iin birok satrdan meydana gelen kod yazlmas gerekirdi.
Programlama dilleri ile elde edilecek sonuta izlenebilecek yntemlerden biri u
olabilirdi : Bilgilerin yazld dosyann ilk kaydna gidilir, sonra dosyann sonuna
gelinene kadar her bir personel maann 1500den byk olup olmad art sorulur
ve bu arta uyan elemanlar listelenir. Ka kii olduunun bilgisini bulmak iinde bu
bilgi bir deikende tutularak deikenin deeri 1er artrlarak arta uyan ka eleman
olduu bilgisine ulalr.
Ayn ekilde; her blmde alan personel says nedir veya ka farkl blm
vardr? SQL sorgusu iin dnlecek olursa bu tip sonularn klasik programlama
mant ile yaplabilmesinin ne kadar zor ve vakit alc olduunu dnn.
COUNT, AVG, SUM, DISTINCT, GROUP BY ve HAVING ile elde edilen sorgu
sonularnn klasik programlama mant ile nasl yaplabileceini dnn.
Bu rneklerden sonra SQL ile ilem yapmann ne kadar kolay olduu, SQLin
ne kadar yetenekli bir dil olduu ve SQLin nemi anlalabilir. Bu nedenle V.Basic,
Delphi, Asp, PHP gibi programlama dillerinde SQL desteini kullanarak ilemlerinizi
kolaylatrnz.

88

You might also like