8. Hafta Ders Notları

ASP.Net MVC Core, C#, Ado.Net, Entity Framework, Windows Form, SQL Server, Console, HTML, CSS, JQuery, Web Api
Kullanıcı avatarı
AzS
1500+
1500+
Mesajlar: 8953
Kayıt: 02 Ağu 2019 08:10

8. Hafta Ders Notları

Mesaj gönderen AzS »

INNER JOIN –JOIN Kullanımı
İ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 alan_ad(lari) FROM tablo1 JOIN tablo2 ON tablo1.alan_adi=tablo2.alan_adi[/c]

Resim
Resim
Resim

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

Resim
Resim
Resim

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.
Resim
Resim
Resim

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
İkinci tablomuz olan Musteriler ise aşağıdaki gibi olsun.
1 2 3
1 Veysi Yamlı Van
2 Sırrı Derman Mersin
Örnek1:
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
NORMALİZASYON
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
Yukarıdaki excel tablosunda 1NF ile normalizasyon kurallarını uygularsak Doğum yeri alanında veri tekrarlarını engellemek amacıyla iller tablosu oluşturulabilir. Bunun dışında mail adresleri aynı kolon içerisinde tanımlanmış ya da mail adresi1, mail adresi2...şeklindede tanımlanabilirdi. Bu durumu düzeltmek için mailler tablosu da oluşturulabilir.

Aşağıda normalizasyon uygulanmış halde veritabanı içeriği olarak görünebilir.
Resim
Resim
Resim

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:
Resim

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:
Resim

Ç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:

Resim
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)
Kullanıcı avatarı
AzS
1500+
1500+
Mesajlar: 8953
Kayıt: 02 Ağu 2019 08:10

Re: 8. Hafta Ders Notları

Mesaj gönderen AzS »

Yeni Başlık Cevapla

“Yazılım Uzmanlığı Ders Notları” sayfasına dön