PostgreSQL JOIN: Birden Çok Tablodan Veri Birleştirme
PostgreSQL eğitim serimize tekrar hoş geldiniz! Bu derste, PostgreSQL'de, ilişkili sütunlara dayalı olarak iki veya daha fazla tabloyu birleştirmenize olanak tanıyan güçlü bir özellik olan JOIN komutunu inceleyeceğiz. JOIN'leri anlamak, ilişkisel veritabanlarında etkili sorgulamalar yapmak için çok önemlidir.
JOIN'lere Giriş
PostgreSQL'de, JOIN ifadesi, ilişkili bir sütuna dayalı olarak iki veya daha fazla tablodan satırları birleştirmek için kullanılır. JOIN'ler, verilerin birden fazla tabloya dağıtıldığı durumlarda veri elde etmek için temeldir.
Temel Sözdizimi
SELECT sütunlar
FROM tablo1
JOIN tablo2 ON tablo1.sütun_adi = tablo2.sütun_adi;SELECT: Elde etmek istediğiniz sütunları belirtir.FROM: Birincil tabloyu belirtir.JOIN: Diğer tabloda satırları birleştirir.ON: Satırların eşleştiği koşulu belirtir.
PostgreSQL'de JOIN Türleri
PostgreSQL, çeşitli JOIN türlerini destekler:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL OUTER JOIN
- CROSS JOIN
Her JOIN türüne örneklerle bakalım.
1. INNER JOIN
Bir INNER JOIN, iki tabloda da eşleşen satırlar olduğunda sonuç döndürür.
Örnek: Kitapları ve yazarlarının isimlerini getir
Diyelim ki bir books tablomuz ve bir authors tablomuz var. Kitap başlıklarını yazarlarının isimleriyle birlikte almak için:
SELECT books.title, authors.name
FROM books
INNER JOIN authors ON books.author = authors.name;Açıklama:
booksveauthorstablolarını,bookstablosundakiauthorsütunu ileauthorstablosundakinamesütunu eşleştirildiğinde birleştiririz.- Sadece her iki tabloda eşleşen yazara sahip satırlar döndürülür.
2. LEFT JOIN
Bir LEFT JOIN, sol tablodaki tüm satırları ve sağ tablodan eşleşen satırları döndürür. Sağ tablodan eşleşmeyen satırlar için sonuç NULL olur.
Örnek: Yazar tablosunda karşılık gelmeyen yazarları da içeren tüm kitapları ve yazarlarını getir
SELECT books.title, authors.name
FROM books
LEFT JOIN authors ON books.author = authors.name;Açıklama:
- Tüm kitaplar döndürülür.
- Eğer bir kitabın yazarı
authorstablosunda bulunamazsa,authors.namedeğeriNULLolacaktır.
3. RIGHT JOIN
Bir RIGHT JOIN, sağ tablodaki tüm satırları ve sol tablodan eşleşen satırları döndürür. Sol tablodaki eşleşmeyen satırlar için sonuç NULL olur.
Örnek: Kitap yazmamış olan yazarlar dahil tüm yazarları ve kitaplarını getir
SELECT books.title, authors.name
FROM books
RIGHT JOIN authors ON books.author = authors.name;Açıklama:
- Tüm yazarlar döndürülür.
- Eğer bir yazarın
bookstablosunda bir kitabı yoksa,books.titledeğeriNULLolacaktır.
4. FULL OUTER JOIN
Bir FULL OUTER JOIN, iki tablodan birinde eşleşme olduğunda tüm satırları döndürür. Eşleşmeyen satırlarda, eşleşmeyen tabloya ait sütunlarda NULL değerleri olur.
Örnek: Eşleşmeyen kayıtları da içeren tüm kitapları ve yazarları getir
SELECT books.title, authors.name
FROM books
FULL OUTER JOIN authors ON books.author = authors.name;Açıklama:
- Hem LEFT hem de RIGHT JOIN'lerin sonuçlarını birleştirir.
- Tüm kitaplar ve yazarlar listelenir, eşleşmeyen alanlar
NULLolur.
5. CROSS JOIN
Bir CROSS JOIN, tabloların satırları arasında Kartezyen çarpım üretir. İlk tablodaki her satırı ikinci tablodaki tüm satırlarla birleştirir.
Örnek: Kitaplar ve filmler arasında tüm olası kombinasyonları üret
Filmlerin yer aldığı bir movies tablomuz olduğunu varsayalım:
SELECT books.title AS book_title, movies.title AS movie_title
FROM books
CROSS JOIN movies;Açıklama:
- Her kitap başlığı her film başlığı ile eşleşir.
- Kombinasyonlar veya test amaçları için kullanışlıdır.
Birden Fazla Tabloyu Birleştirme
Tek bir sorguda ikiden fazla tabloyu birleştirebilirsiniz.
Örnek: Kitap başlıklarını, yazarları ve ilgili filmleri getir
Bir book_movies tablosunun kitapları ve filmleri birleştirdiğini varsayalım:
-- book_movies tablosunun book_title ve movie_title sütunlarına sahip olduğunu varsayın
SELECT books.title, authors.name, movies.title
FROM books
INNER JOIN authors ON books.author = authors.name
INNER JOIN book_movies ON books.title = book_movies.book_title
INNER JOIN movies ON book_movies.movie_title = movies.title;Açıklama:
bookstablosu önceauthors, ardındanbook_moviesvemoviestablolarıyla birleştirilir.- Sadece tüm tablolarda eşleşen kayıtlar döndürülür.
Tablo Takma İsimleri Kullanma
Takma isimler, özellikle birden fazla tablo ile çalışırken sorguları daha okunabilir hale getirir.
Örnek: Takma isimlerle sorguyu netleştir
SELECT b.title, a.name
FROM books AS b
INNER JOIN authors AS a ON b.author = a.name;bvea, sırasıylabooksveauthorstabloları için takma adlardır.
Self JOIN
Bir Self JOIN, bir tabloda kendiyle bağlantı kurulan bir JOIN işlemidir.
Örnek: Aynı fiyata sahip kitapları bul
SELECT b1.title AS book1, b2.title AS book2, b1.price
FROM books AS b1
INNER JOIN books AS b2 ON b1.price = b2.price AND b1.title <> b2.title;Açıklama:
- Aynı fiyatlara sahip ancak başlıkları farklı olan kitapları bulmak için
bookstablosu kendiyle birleştirilir. - Aynı tablo içindeki yinelenen veya ilişkili kayıtları bulmak için kullanışlıdır.
USING İfadesi ile JOIN
USING ifadesi, her iki tablo da aynı ada sahip bir sütuna sahipse, birleştirme koşulunu basitleştirir.
Örnek: Birleştirme koşulunu basitleştir
SELECT books.title, authors.name
FROM books
INNER JOIN authors USING (name);Not: Şemamızda, books tablosunda author, authors tablosunda ise name adlı sütunlar bulunur. Sütun adları farklı olduğu için, USING ancak sütun adları aynı olduğunda uygulanabilir.
NATURAL JOIN
Bir NATURAL JOIN, aynı ada sahip sütunlara dayanarak tabloları otomatik olarak birleştirir.
Örnek: Ortak sütun adlarına sahip tablo arasında doğal birleştirme yap
-- Her iki tabloda da 'author' adında bir sütun varsa
SELECT *
FROM books
NATURAL JOIN authors;Dikkat: NATURAL JOIN dikkatle kullanılmalıdır, çünkü istemediğiniz sütunlarda da eşleşme yapabilir.
Sonuç
PostgreSQL'de JOIN'ler, birden fazla tablo arasında veri sorgulama konusunda hayati öneme sahiptir. JOIN'leri ustalıkla kullanarak, ilişkisel verilerden değerli bilgiler elde edebileceğiniz karmaşık sorgular yazabilirsiniz.
Önemli Noktalar:
- INNER JOIN: İki tablodaki eşleşen satırları döndürür.
- LEFT JOIN: Sol tablodaki tüm satırları ve sağ tablodaki eşleşen satırları döndürür.
- RIGHT JOIN: Sağ tablodaki tüm satırları ve sol tablodaki eşleşen satırları döndürür.
- FULL OUTER JOIN: Bir tabloda eşleşme olduğunda tüm satırları döndürür.
- CROSS JOIN: Her iki tablonun Kartezyen çarpımını döndürür.
- Okunabilirliği artırmak için tablo takma isimleri kullanın.
NATURAL JOINveUSINGifadelerinde dikkatli olun.
Schema Initialization
-- Create the books table
CREATE TABLE books (
title VARCHAR(255),
author VARCHAR(255),
price NUMERIC(10, 2),
pages INTEGER
);
-- Insert sample data into the books table
INSERT INTO books (title, author, price, pages) VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 10.99, 180),
('To Kill a Mockingbird', 'Harper Lee', 7.99, 281),
('1984', 'George Orwell', 8.99, 328),
('Pride and Prejudice', 'Jane Austen', 6.99, 279),
('The Catcher in the Rye', 'J.D. Salinger', 9.99, 214),
('Moby-Dick', 'Herman Melville', 11.99, 635),
('War and Peace', 'Leo Tolstoy', 12.99, 1225);
-- Create the authors table
CREATE TABLE authors (
name VARCHAR(255)
);
-- Insert sample data into the authors table
INSERT INTO authors (name) VALUES
('F. Scott Fitzgerald'),
('Harper Lee'),
('George Orwell'),
('Jane Austen'),
('J.D. Salinger'),
('Herman Melville'),
('Leo Tolstoy');
-- Create the movies table
CREATE TABLE movies (
title VARCHAR(255)
);
-- Insert sample data into the movies table
INSERT INTO movies (title) VALUES
('The Shawshank Redemption'),
('The Godfather'),
('The Dark Knight'),
('Pulp Fiction'),
('The Lord of the Rings');Verileri anlamak için örneklerle oynayın ve sorgularını değiştirerek PostgreSQL JOIN'lerini daha derinlemesine öğrenin. İyi sorgulamalar!