İki adet tablomuzdaki kayıtları belli bir kritere göre birleştirmek için INNER JOIN komutu kullanılır.
INNER JOIN Kullanım Biçimi
Kod: Tümünü seç
SELECT alan_ad(lari)
FROM tablo1 INNER JOIN tablo2
ON tablo1.alan_adi=tablo2.alan_adiveya



SELECT *FROM musteriler JOIN satislar ON musteriler.id =satislar.id
SELECT Ad_Soyad,satilan_Mal FROM musteriler JOIN satislar ON musteriler.id =satislar.id
SELECT Ad_Soyad,satilan_Mal,musteriler.id AS id_no FROM musteriler JOIN satislar ON musteriler.id =satislar.id ORDERBY id_no ASC
LEFTJOIN –LEFT OUTERJOIN Kullanımı
LEFT JOIN ile iki adet tablomuzdaki kayıtları belli bir kriteregöre birleştirebilir. Burada asıl olan birinci tablondaki kayıtlardır. İkinci tablodan sadece birinci tabloda olan kayıtlar alınır. İkinci tabloda olupta birinci tabloda olmayan alanların değeri boş (NULL) olarak gelecektir.
LEFT JOIN Kullanım Biçimi
SELECT alan_ad(lari) FROM tablo1 LEFT JOIN tablo2 ON tablo1.alan_adi=tablo2.alan_adi
veya
SELECT alan_ad(lari) FROM tablo1 LEFT OUTER JOIN tablo2 ON tablo1.alan_adi=tablo2.alan_adi



SELECT *FROM Ogretmen o LEFTJOIN Ders d ON o.OgretmenID =d.DersID
RIGHTJOIN –OUTERJOIN Kullanımı
RIGHTJOIN ile iki adet tablomuzda ki kayıtları belli bir kritere göre birleştirebilir. Burada asıl olan İkinci tablondaki kayıtlardır. Birinci tablodan sadece ikinci tabloda olan kayıtlar alınır. Birinci tabloda olup ta ikinci tabloda olmayan alanların değeri boş (NULL) olarak gelecektir.



SELECT *FROM Personel P RIGHTJOIN Departman D ON P.Dep_id =D.id
FULLJOIN –FULL OUTERJOIN Kullanımı
İki tablodaki tüm veriyi kesişimde dahil olarak verir.
SELECT *FROM Personel P FULLJOIN Departman D ON P.Dep_id =D.id
UNION Kullanımı
UNION ile iki adet tablomuzda ki seçeceğimiz alanları birleştirerek tek bir tablo alanıymış gibi kullanabiliriz. Union ile iki tablodaki alanlar birleştirilirken tekrarlayan kayıtlar bir defa alınır. Eğer tekrarlayan kayıtların alınması isteniyorsa UNION ALL kullanılmalıdır.
UNION Kullanım Biçimi
SELECT alan_ad(lari) FROM tablo1 UNION SELECT alan_ad(lari) FROM tablo2
UNION ALL Kullanım Biçimi
SELECT alan_ad(lari) FROM tablo1 UNION ALLSELECT alan_ad(lari) FROM tablo2
Görüleceği üzere iki tane SELECT ifadesi kullanılmaktadır. Yani iki ayrı sorgu yapısını UNION ile birleştirmiş oluyoruz. Burada dikkat edilecek olan nokta Select ifadesinden sonra yazılacak alan sayısı her iki sorgu ifadesinde de aynı olmalıdır. Alan adları farklı olabilir. Yani birinci select ifadesinde Şehir alanı kullanılırken diğer select ifadesinde Adres alanı kullanılabilir. Sonuçta anlamsız bir veri çıkabilir ancak yapı bu şekilde çalışmaktadır. Alanları birleştirirken yazım sırasına göre birleştirme yapmaktadır. Yani birinci Select ifadesinden sonra Adi_soyadi, Sehir yazıldıysa, çekilen verinin anlamlı olması için ikinci select ifadesinden sonra da Adi_soyadi, Sehir şeklinde yazılması gerekmektedir. Eğer ikinci bölüme Sehir, Adi_soyadi yazılırsa birinci tablodan adi_soyadi alanındaki veriler ile ikinci tablodan Şehir alanındaki veriler birleştirilir. Ancak bazı SQL editör programları böylesi bir durumun önün geçmek için kendi içlerinde kontrol mekanizması kurarak kullanıcıyı uyarabilmektedirler.
Örnek Tablo Uygulaması: Örnek olarak aşağıdaki gibi Personel isimli tablomuz olsun.
id | adi-soyadi | Sehir |
---|---|---|
1 | Salih EKŞİOĞLU | İstanbul |
2 | Ayhan ÇETİNKAYA | Kocaeli |
3 | Serkan ÖZGÜREL | Erzincan |
4 | İlhan ÖZLÜ | İstanbul |
1 | 2 | 3 |
---|---|---|
1 | Veysi Yamlı | Van |
2 | Sırrı Derman | Mersin |
SELECT Sehir FROM Personel UNION SELECT Sehir FROM Musteriler
Bu kod ile iki tabloda Sehir alanlarındaki veriler tekrar edenler bir defa alınmak suretiyle birleştirilmiş olunur. Dikkat edileceği üzere Personel tablosunda iki tane İstanbul bulunmaktadır.
Çıktısı:
Şehir |
---|
İstanbul |
Kocaeli |
Erzincan |
Van |
Mersin |
Normalizasyon yani diğer adı ile Ayrıştırma, veritabanlarında çok fazla sütun ve satırdan oluşan bir tabloyu tekrarlardan arındırmak için daha az satır ve sütun içeren alt kümelerine ayrıştırma işlemidir. Bunların tabi ki kuralları vardır bu kurallara uyduğumuzda her tabloda aynı sütun ve satırları tekrar etmemiş olacağız ve veritabanındaki verilerimiz sağlıklı kullanıma uygun olacaktır. Şimdi hazırsanız başlayalım.
Amacı: Gereksiz veri tekrarını ortadan kaldırarak, veri fazlalığını en aza indirmektir. Veri tekrarı, veri sapmasına yol açar.Bu da veri bütünlüğünün bozulmasına neden olur.
* Veri bütünlüğünün sağlanması
* Uygulamadan bağımsızlık
* Performansı artırmak
Avantajları:
* Veri bütünlüğünü sağlar.
* Verimli bir veri yapısı sunar.
* Gereksiz veri tekrarını engeller ve min. Alan kullanılır ve yerden tasarruf sağlar
* Saklanan veri daha anlaşır hale gelir.
* Hızlı sorgulama imkanı verir.
NormalizasyonKuralları: Normalizasyonun her bir kuralı yani seviyeleri normal form olarak adlandırılır. Bu seviyeler gereksiz veri tekrarlarını ne derecede engellediği ve tutarlılığı ne kadar sağladığına bağlı olarak derecelendirilir. Seviye yükseldikçe veri tutarlılığı artar, veri tekrarı düşer.
Örnek : Aşağıda excel tablosu olarak verilmiş olan ham veri tablosunu normalize ederek veritabanı olarak oluşturalım.
Adı Soyadı | Doğum Yılı | Doğum Yeri | Baba Adı | Mail Adresleri |
---|---|---|---|---|
Ali Veli | 01.01.1976 | İstanbul | Ali | ali@ali.com, alim@veli.com |
Ali Deli | 02.01.1976 | İstanbul | Hasan | hasan@ali.com, kasan@veli.com |
Ali Veli | 03.01.1976 | İstanbul | Ali | ali@ali.com, alim@veli.com |
Ali Veli | 04.01.1976 | İstanbul | Ali | ali@ali.com, alim@veli.com |
Aşağıda normalizasyon uygulanmış halde veritabanı içeriği olarak görünebilir.



Tablolar Arası İlişki Türleri
1’e1 ilişki
Örnek üzerinden konuyu anlatmaya çalışalım. Meselabir bilet otomasyonu olsun. Bir tiyatroiçin bilet satılıyor ve her bileti yani koltuğuyalnızca bir kişi satın alabiliyor. Elimizde iki tane tablo bulunsun bunlardan biri müşteri tablosu ikincisi ise bilet tablosu. Bu iki tablo arasındaki ilişki birebir olur. Çünkü her müşteri yalnızca bir bilet satın alabiliyor ve her bilet yalnızca bir kişiye ait olabiliyor. Peki ilişkiyi kurarken hangi tabloya ekleme yapacağız? Müşteri tablosu mu Bilet tablosu mu? Bu durumu şu açıdan bakmamız gerekiyor. Eğer bilet tablosuna müşteri id’sini eklersem bu durum da satılmayan biletler için bu bölüm null değerini alacaktır. Ancak bu bizim istediğimiz bir durum değil. Onun yerine müşteri tablosuna bilet id’sini eklersek her eklenen müşteri bir bilet satın almış olacağı için herhangi bir null değeri söz konusu değildir. Bu durumda örnek tablomuz aşağıdaki gibidir:

1’e Çok (1-n) İlişki
En fazla rastalanan ilişki türüdür. Bir dershanede öğrenciler ve bu öğrencilere danışmanlık yapan öğretmenleri tutan iki adet tablomuz olsun. Bu iki tablo arasında kurulan ilişki 1’e n ilişki olur. Çünkü bir öğretmen birden fazla öğrenciye danışman olabiliyor ancak bir öğrenci en fazla bir öğretmenden danışmanlık alabiliyor. Peki hangi tabloya ekleme yaparak ilişkiyi kuracağız? Öğretmen tablosunu ele alalım. Eğer bu tabloya öğrenci id’lerini eklemeye başlarsak her öğrenci için o öğretmen tablosuna tekrar tekrar aynı öğretmenin verisini girmiş olacağız. Veri tekrarı en son isteyeceğimizolaydır. Bu yüzden öğretmen id’lerini öğrenci tablosunda tutmak daha sağlıklı olacaktır. Şimdi doğru ve yanlış tablolara bakalım:

ÇokaÇok (n-m) İlişki
Son ilişki türümüz en karmaşık olan çoktan çoğa ilişki türü. Bu ilişki türünde iki tabloda birden fazla bağa sahiptir. Bu yüzden iki tablo bu ilişkiyi açıklamak için yeterli olmaz. Yine bir ilişki türü örneği ile konuya giriş yapalım. Bir üniversitededersseçimi yapan öğrenciler ileseçilen derslerin kayıtlarının tutulduğunu düşünelim. Bu durumda elimizde iki adet tablo bulunmaktadır:Öğrenci ve dersler. Bir öğrencibirden fazla dersseçebilirken, bir derste birden fazla öğrenci tarafından seçilebilmektedir. Bu durumda aralarında çoktan çoğa bir ilişki oluşmaktadır. Bu durumu tablolaştırırken bir üçüncü tabloya daha ihtiyacımız olmaktadır. Üçüncü tablo seçim tablosu olacak ve burada ders ile öğrencinin id’leri tutulacaktır. Aşağıdaki tabloda bu ilişkiyi görelim:

DML VE DDL KOMUTLARI
DML (Data Manupilation Language)
SELECT
INSERT
DELETE
UPDATE
Sorgularda genel olarak kullanıldı.
DDL (DataDefinition Language)
CREATE
DATABASE
CREATE
TABLE
SELECT INTO
DROP
DELETE
ALTER
ÖRNEKLER:
Kod: Tümünü seç
CREATE DATABASE TEST1
CREATE TABLE Personel
(
id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
adi_Soyadi nvarchar(50),
Sehir nvarchar(30)
)
DROP TABLE Personel
SELECT * INTO Yedek FROM Personel
ALTER TABLE Personel ADD Yas int
ALTER TABLE Personel DROP COLUMN Yas
ALTER TABLE Personel ALTER COLUMN Ad varchar(40)