Veri Tabanı Sorgularında Joinler Nedir?

Veri Tabanı Sorgularında Joinler Nedir?
SQL

Veri Tabanı Sorgularında Joinler Nedir?

Joinler, veri tabanında hazırladığımız bir sorgu ile birden fazla tabloyu tek tablo gibi göstermek istediğimiz durumlar olabilir. Örneğin filmler ve kategoriler isminde iki tablomuz olduğunu varsayalım. Select işlemi yaptığımız zaman filmlere ait bilgiler listelenirken kategori kısmı ID değeri olarak gelecektir. Biz burada ID değeri yerine bu ID değerinin karşılığı olan isimlerin gelmesini istersek yani filmler tablomuzda x filminin kategori kısmında 1 yerine komedi filmi (x filminin türüne göre) yazmasını istersek birleştirme yapmamız gerekir işte burada devreye joinler girmektedir.

JOIN Nedir?

SQL’de özellikle ilişkili tablolarda istediğimiz tabloları belirlenen şartlara göre birleştirmek için kullanılan bir türdür. Join işleminde ilk etapta birleştirilecek sütunlar SELECT sorgusu içinde yazılır. SELECT ifadesinden sonra kullanılacak tabloların sütun değerleri yazılır. Sonrasında FROM ifadesini kullanırız. Birleştirmek için kullanacağımız ilk tabloyu sonra ilgili join ifadesini ardından da birleştirmek için kullanacağımız ikinci tabloyu yazıyoruz. Yazım kuralı olan ON ifadesini kullanıyoruz. Son olarak 1.tablomuzdaki sütun ile birleştirmek istediğimiz ikinci tablonun sütununu eşleştiririz.

Syntax yapısı (sözdizimi)

SELECT Sutun1, Sutun2, ..., SutunN FROM Tablo1 JOIN_TÜRÜ Tablo2
ON Tablo1.PrimaryKey = Tablo2.PrimaryKey

Şimdi basit olarak filmler ve kategoriler isimli iki tablo oluşturup örnek yapalım;

Movies (Filmler) Tablomuzu Oluşturalım;

CREATE TABLE movies (
    movie_id INT PRIMARY KEY,
    movie_name VARCHAR(100),
    movie_vision_date DATE,
    movie_country VARCHAR(50)
);

Tablomuza Kayıtlar Ekleyelim;

INSERT INTO movies ( movie_id, movie_name, movie_vision_date, movie_country)
VALUES(1001, 'Recep İvedik 5', '2017-02-16', 'Türkiye');

INSERT INTO movies ( movie_id, movie_name, movie_vision_date, movie_country)
VALUES(1002, 'Babam ve Oğlum', '2005-10-18', 'Türkiye');

INSERT INTO movies ( movie_id, movie_name, movie_vision_date, movie_country)
VALUES(1003, 'Dağ II', '2016-10-04', 'Türkiye');

INSERT INTO movies ( movie_id, movie_name, movie_vision_date, movie_country)
VALUES( 1004, ' New Yorkta Beş Minare', '2010-10-05', 'Türkiye');

INSERT INTO movies ( movie_id, movie_name, movie_vision_date, movie_country)
VALUES(1005, '  Celal ile Ceren', '2013-01-18', 'Türkiye');

INSERT INTO movies ( movie_id, movie_name, movie_vision_date, movie_country)
VALUES ( 1006, '  Organize İşler', '2005-12-13', 'Türkiye');

Şimdi de Categories isimli tablomuzu oluşturalım;

Categories (Kategoriler) Tablomuz;

CREATE TABLE categories (
    categori_id INT PRIMARY KEY,
    categori_name VARCHAR(100),
    movie_id INT,
    Point DECIMAL FOREIGN KEY (movie_id) REFERENCES movies(movie_id)
);

Şimdi de Categories isimli tablomuza kayıtlarımızı ekleyelim;

INSERT INTO categories (categori_id, categori_name, movie_id, Point)
VALUES (1, 'Komedi', 1001, 8.2);

INSERT INTO categories (categori_id, categori_name, movie_id, Point)
VALUES (2, 'Dram', 1002, 10.2);

INSERT INTO categories (categori_id, categori_name, movie_id, Point)
VALUES (3, 'Aksiyon', 1003, 5.1);

INSERT INTO categories (categori_id, categori_name, movie_id, Point)
VALUES (4, 'Bilim Kurgu', 1004, 7.4);

 

JOIN Tipleri Ve Kullanımları

1. INNER JOIN

Bu join türümüz, Movies ve Categories isimli iki tablomuzu birleştirir ve sadece eşleşen kayıtları bize döndürür.

Sorgumuzu Yazalım,

SELECT * FROM categories INNER JOIN movies 
ON categories.movie_id = movies.movie_id

Çıktımız aşağıdaki gibi olacaktır,

2. LEFT JOIN

Bu join türümüz, Movies isimli birinci tablomuzdaki tüm kayıtları getirir ve her iki tablodaki eşleşen kayıtları bize getirir. Eşleşmeyen kayıtlar NULL olarak gelir.

Sorgumuzu Yazalım,

SELECT * FROM movies LEFT JOIN categories
ON movies.movie_id = categories.movie_id

Çıktımız aşağıdaki gibi olacaktır,

3. RIGHT JOIN

Bu join türümüz, Categories isimli ikinci tablodaki tüm kayıtları getirir ve her iki tablodaki eşleşen kayıtları bize getirir. Eşleşmeyen kayıtlar NULL olarak gelir.

Sorgumuzu Yazalım,

SELECT * FROM categories RIGHT JOIN movies 
ON categories.movie_id = movies.movie_id

Çıktımız aşağıdaki gibi olacaktır,

4. FULL OUTER JOIN

Bu join türümüz, hem left join hem de right join işlemini bir arada gerçekleştirir. Movies ve Categories isimli tablolarımızdaki tüm kayıtları getirir. Eşleşmeyen kayıtları da NULL olarak döndürür. Sorgumuzu Yazalım,

SELECT * FROM movies FULL OUTER JOIN categories
ON movies.movie_id = categories.movie_id

Çıktımız aşağıdaki gibi olacaktır,