MSSql Join Yapısı Ders 11
Merhaba,
Bu dersimizde Sql de join yapısını inceleyeceğiz. Join yapısı tablolar arasında Unique (Benzersiz) değerler kullanarak birleştirme, farklı farklı tablolardan aynı yapıya ait dataları çekerek tek bir alanda görüntüleme, bu sayede yönetimi kolaylaştırma amacıyla kullanılan yapıya verilen addır. Ancak Sql de anlatıma başlamadan önce güncel yaşantımızdan bir örnek vererek nerelerde kullanılabileceğine ve hangi durumlarda ihtiyacımız olabileceğine değinmek isterim.
Bir okulumuz olsun. Bu okulda 10 tane sınıfımız olsun. Her sınıfta da 40 tane öğrencimiz olsun. Her bir öğrencinin aldığı 10 tane ders olsun. Her bir dersin 3 tane sınavı olsun ve ilk sınavları bitmiş olsun. Şu an itibari ile ortalaması 45 in altında olan öğrencilerin adları ve ev telefon numaralarını bulalım ki ailelerini arayıp herhangi bir sorun olup olmadığını teyid e edebilelim.
Şimdiye kadarki bilgilerimizle sql de bu tabloları oluşturabilir miyiz. Tabi ki oluşturabiliriz ancak oluştururken dikkat etmemiz gereken bazı trickler bulunmaktadır. İşte burada olayın mantığını anlıyor olacağız.
Hatta okul dan bir üst kademe daha ekleyelim. Belediyede olsun. Belki incelenir de yaptığımız örneği hayata geçirirler 🙂
Şimdi en baştan yapıyı kuralım.
DATABASE ADIMIZ ISTANBUL OLSUN
1 |
Create DATABASE ISTANBUL |
Her yazdığımız kod blogundan sonra f5 sekmesine basıp kodu çalıştırmamız gerekmektedir. Örn :
1 |
 USE ISTANBUL |
(bunu yazıp f5 e basarsak oluşturduğumuz ISTANBUL adlı database? i seçmiş ve bundan sonra yapacağımız işlemleri bu database üzerinde yapacağımızı belirtmiş oluruz.
Şimdi tablolarımızı oluşturmaya başlayalım.
1 |
CREATE TABLE BELEDIYE ( ID_BELEDIYE INT IDENTITY PRIMARY KEY, BELEDIYEADI NVARCHAR(50) ) |
Benim tavsiyem kodları kopyalamak yerine bakarakda olsa kendiniz yazın yaptığınız yanlışlar aklınızda daha iyi oturmasına neden olacaktır.
1 |
CREATE TABLE OKUL ( ID_OKUL INT IDENTITY PRIMARY KEY, OKULADI NVARCHAR(50), ID_BELEDIYE INT ) CREATE TABLE SINIF ( ID_SINIF INT IDENTITY PRIMARY KEY, SINIFADI NVARCHAR(50), ID_OKUL INT ) CREATE TABLE OGRENCI ( ID_OGRENCI INT IDENTITY PRIMARY KEY, OGRENCIADI NVARCHAR(50), OGRENCISOYADI NVARCHAR(50), OGRENCITELEFONU NVARCHAR(50), OGRENCIADRESI NVARCHAR(50), ID_SINIF INT ) CREATE TABLE DERS ( ID_DERS INT IDENTITY PRIMARY KEY, DERSADI NVARCHAR(50), ) CREATE TABLE DERSNOTLARI ( ID_DESTNOTU INT IDENTITY PRIMARY KEY, ID_DERS INT, DERSNOTU NVARCHAR(50), ID_OGRENCI INT ) |
Şu an tüm tablolarımızı oluşturduk. Peki neyi neden yaptık.
Bildiğiniz üzere bir belediyede birden fazla okul olabilir ki hiçte olmayabilir. Biz birden fazla olabilir yapısı üzerinde duracağız.
Örneğin Üsküdar Belediyesi nin sınırları içerisinde kaç tane okul vardır. Belki 10 belki 20 peki biz bunları sistemde nasıl tutabiliriz.
Okul Adı Belediye Adı
A Okulu Üsküdar
B Okulu Üsküdar
C Okulu Kadıköy
D Okulu Üsküdar
Aslında yukarıda bir tablo yaptık ve hangi okulun hangi belediyede olduğunu görebiliyoruz. Üsküdar okulları diye bir arama yaptığımızda karşımıza 3 tane sonuç gelecektir. Ancak biz şunu biliyoruz ki (Bilmeyebilirsiniz 🙂 ) yazılımlarda işlemler en hızlı şekilde sayılar üzerinden yapılmaktadır. Ayrıca şu an 4 kayıt var görebiliyoruz ya bu 1000 olsaydı yada abartalım 20000000 olsaydı o zaman da sayacak mıydık ? İşte burada yaptığımız sistem devreye girmektedir.
Üsküdarda olan tüm okulları getir. Nasıl ?
Hemen sisteme kayıtlarımızı girmeye başlayalım. Önce 3 tane belediye oluşturalım.
1 |
INSERT INTO BELEDIYE VALUES ('USKUDAR') INSERT INTO BELEDIYE VALUES ('KADIKOY') INSERT INTO BELEDIYE VALUES ('BESIKTAS') |
Şimdede okul bilgilerinin girişini yapalım :
1 |
INSERT INTO OKUL VALUES ('A OKULU',1) GO INSERT INTO OKUL VALUES ('B OKULU',1) GO INSERT INTO OKUL VALUES ('C OKULU',1) GO INSERT INTO OKUL VALUES ('D OKULU',2) GO INSERT INTO OKUL VALUES ('E OKULU',2) GO INSERT INTO OKUL VALUES ('F OKULU',2) GO INSERT INTO OKUL VALUES ('G OKULU',3) GO INSERT INTO OKUL VALUES ('H OKULU',2) GO |
Araya go komutunu koyarak birden fazla scripti ard arda çalıştırabileceğimizide bilgilerimiz arasına eklemiş olduk.
Insert yaparken okul adlarının hemen yanında bulunan sayıların beledıylerımıze ait Id ler oldugu konusunda sanırım anlaşılmayan bir nokta yoktur.Var ise lütfen yorumlara yazınki düzeltebilelim.
Hemen sorgumuzu yazıyoruz.
Seç okuladını okul tablosundan nerede belediyesi Üsküdar ise
Yukarıda yazdığım bildiğiniz sqlin TÜRKÇE?si
1 |
Select OKULADI from OKUL where ID_BELEDIYE = 1 |
Bunu zaten yapabilirdik. Peki ben desem e okul adlarını getirdikde nerden bileyim bunların Üsküdarda olduğunu ??
Hemen geldik yazdık
1 |
Select OKULADI, ID_BELEDIYE from OKUL where ID_BELEDIYE = 1 |
B OKULU 1
C OKULU 1
Gelen sonuç bu! 1 benim için hiç bir şey ifade etmiyor. Kadıköyde olabilir, Saksıda olabilir
Hemen ekliyoruz joini ;
1 |
Select O.OKULADI,B.BELEDIYEADI from OKUL O JOIN BELEDIYE B ON O.ID_BELEDIYE = B.ID_BELEDIYE WHERE O.ID_BELEDIYE = 1 |
Select = Seç
O.OKULADI = OKUL Tablosundaki OKULADI
B.BELEDIYEADI = BELEDIYE Tablosundaki BELEDIYEADI
OKUL O = OKUL Tablosunu kısaltıp O dedik
JOIN = Birbirine ekle (Sadece 2 taraftada da doğru olan sonuçları. Bu ne demek açıklayacağım.)
BELEDIYE B = BELEDIYE Tablosunu kısaltıp B Dedik
ON = İlişki kurma hazırlıkları 🙂
O.ID_BELEDIYE = B.ID_BELEDIYE = İşte kilit nokta bu 2 tablo arasındaki ilişki bu iki kolon üzerinden kurulmaktadır. Bu kolonlardaki bilgiler iki tablo içinde aynı şeyi ifade etmektedir. Kolon İsimlerinin aynı olmasına aldanmayın biri ahmet biri mehmet te olabilirdi.
Burada önemli olan.
Ikı tabloda içerisinde INT tipinde değerler barındırıyor.
İkiside Belediyelere ait olan ID Leri barındırıyor.
Yani ben ikisinde de 1 dediğimde aynı USKUDARI bana işaret etmektedir.
Burada anlaşılmayan bir şey yoktur umarım var ise lütfen yine yorumlara eklersiniz.
Gelen sonuç :
A OKULU USKUDAR
B OKULU USKUDAR
C OKULU USKUDAR
Bu değilse eyvah 🙂 Yukarıdaki yaptıklarımıza bir kez daha göz atın derim. Zira çalışması lazım 🙂
Buraya kadar olan kısımda bir dersi tamamladık. Bir sonki dersimizde sınıfları öğrencileri ve dersleri oluşturup yukarıda verdiğimiz örneği tamamlayacağız. Yazım hatalarım olabilir dilbilgisi kısmına takılmazsanız sevinir,
İyi Günler Dilerim,
Cevapla
Want to join the discussion?Feel free to contribute!