Birden Çok Tablodan Veri Alın
Birden Çok Tablodan Verileri Görüntüleme
Büyük bir veritabanının ilgili tabloları, yabancı ve birincil anahtarların kullanılmasıyla veya genellikle ortak sütunlar olarak adlandırılanlarla bağlantılıdır. Tabloları birleştirme yeteneği, üretilen sonuç tablosuna daha fazla anlam katmanızı sağlayacaktır. Bir sorguda 'n' numaralı tabloların birleştirilmesi için minimum (n-1) birleştirme koşulları gereklidir. Oracle, birleştirme koşullarına bağlı olarak eşleşen satır çiftini birleştirir ve birleştirme koşulunu karşılayan birini görüntüler.
Birleşimler aşağıdaki şekilde sınıflandırılır
Doğal birleştirme (aynı zamanda eşitlik veya basit birleştirme olarak da bilinir) - Yaygın olarak adlandırılmış ve tanımlanmış bir sütun kullanarak bir birleştirme oluşturur.
Eşit olmayan birleştirme - Birleştirilecek tablolarda eşdeğer satır olmadığında, örneğin bir tablonun bir sütunundaki değerleri başka bir tablodaki bir değer aralığıyla eşleştirmek için tabloları birleştirir.
Kendi kendine katıl - Bir masayı kendisine katar.
Dış birleşim - Diğer tabloda eşleşen kayıt olmadığında çıktıdaki bir tablonun kayıtlarını içerir.
Kartezyen birleştirme (Kartezyen ürünü veya çapraz birleştirme olarak da bilinir) - İlk tablodaki her satırı ikinci tablodaki her satırla çoğaltır. Olası her kayıt kombinasyonunu görüntüleyerek tablolar arasında bir birleştirme oluşturur.
Doğal Birleştirme
NATURAL anahtar sözcüğü bir equijoin sözdizimini basitleştirebilir. DOĞAL BİRLEŞTİRME, iki (veya daha fazla) tabloda aynı ada sahip sütunlara sahip olduğunda ve sütunlar uyumlu olduğunda, yani sütunların paylaşılan bir değer alanına sahip olması durumunda mümkündür. işlem, aynı adlandırılmış sütunlar için eşit sütun değerlerine sahip tablolardaki satırları birleştirir.
DEPARTMENTS ve EMPLOYEES tabloları arasındaki bire çok ilişkisini düşünün. Her tabloda DEPARTMENT_ID adlı bir sütun vardır. Bu sütun DEPARTMENTS tablosunun birincil anahtarı ve EMPLOYEES tablosunun yabancı anahtarıdır.
SELECT E.first_name NAME,D.department_name DNAME
FROM employees E NATURAL JOIN departments D;
FIRST_NAME DNAME
---------- ------
MILLER DEPT 1
JOHN DEPT 1
MARTIN DEPT 2
EDWIN DEPT 2
Aşağıdaki SELECT sorgusu, ON anahtar sözcüğüyle birleştirme koşulunu açıkça belirterek iki tabloyu birleştirir.
SELECT E.first_name NAME,D.department_name DNAME
FROM employees E JOIN departments D
ON (E.department_id = D.department_id);
DOĞAL BİRLEŞTİRME ile ilgili bazı sınırlamalar vardır. DOĞAL BİRLEŞTİRME ile bir LOB sütunu belirtemezsiniz.Ayrıca, birleştirmeye dahil olan sütunlar bir tablo adı veya takma adla nitelendirilemez.
MADDE KULLANIMI
Oracle, Natural birleştirmeleri kullanarak, birleştirmenin temelini oluşturmak için sütunları örtük olarak tanımlar. Çoğu durum, birleştirme koşullarının açık bir şekilde beyan edilmesini gerektirir. Bu gibi durumlarda, birleştirme kriterlerini belirtmek için USING cümlesini kullanırız. USING cümlesi, tabloları sütunların eşitliğine göre birleştirdiğinden, Equijoin olarak da bilinir. İç birleşimler veya basit birleşimler olarak da bilinirler.
Sözdizimi:
SELECT <column list>
FROM TABLE1 JOIN TABLE2
USING (column name)
Aşağıdaki SELECT sorgusunu göz önünde bulundurun, EMPLOYEES tablosu ve DEPARTMENTS tablosu DEPARTMENT_ID ortak sütunu kullanılarak birleştirilir.
SELECT E.first_name NAME,D.department_name DNAME
FROM employees E JOIN departments D
USING (department_id);
Kendinden Katılma
Bir SELF-JOIN işlemi, ilgilenilen ilişki tek bir tabloda depolanan satırlar arasında mevcut olduğunda bir sonuç tablosu üretir. Başka bir deyişle, bir tablo kendisine birleştirildiğinde, birleştirme Kendi Kendine Birleştirme olarak bilinir.
Çalışanı ve raporlama yöneticilerini içeren ÇALIŞANLAR tablosunu düşünün.Bir çalışanın yöneticisinin adını bulmak için EMP tablosunun kendisine katılmanız gerekir. Bu, tipik bir Self Join adayıdır.
SELECT e1.FirstName Manager,e2.FirstName Employee
FROM employees e1 JOIN employees e2
ON (e1.employee_id = e2.manager_id)
ORDER BY e2.manager_id DESC;
Equijoins Dışı
Eşit olmayan birleştirme, ilgili sütunlar eşittir işaretiyle birleştirilemediğinde kullanılır, yani birleştirilecek tablolarda eşdeğer satırlar yoktur Eşit olmayan bir birleştirme, bir aralığın minimum değerini bir sütunda depolamanıza olanak tanır bir kaydın ve başka bir sütundaki maksimum değeri. Dolayısıyla, sütundan sütuna bir eşleşme bulmak yerine, gönderilen öğenin sütunlardaki minimum ve maksimum aralıklar arasında olup olmadığını belirlemek için eşit olmayan bir birleştirmeyi kullanabilirsiniz. Birleştirme öğe için eşleşen bir aralık bulursa, ilgili gönderim sonuçlarda ücret iade edilebilir. Geleneksel eşitlik birleştirmelerinde olduğu gibi, eşitlik dışı bir birleştirme bir WHERE cümlesinde gerçekleştirilebilir. Ek olarak, JOIN anahtar sözcüğü, birleşim için ilgili sütunları belirtmek için ON deyimiyle birlikte kullanılabilir.
SELECT E.first_name,
J.job_hisal,
J.job_losal,
E.salary
FROM employees E JOIN job_sal J
ON (E.salary BETWEEN J.job_losal AND J.job_losal);
Eşitlik ve eşitsizlik operatörleri gibi daha önce tartışılan tüm karşılaştırma parametrelerini, BETWEEN, IS NULL, IS NOT NULL ve RELATIONAL gibi kullanabiliriz.
Dış Birleşimler
Bir Dış Birleştirme, bir tablodaki satırların, iki tablo ilişkili olsa bile ikinci tablodaki satırlarla eşleşmediği durumları tanımlamak için kullanılır.
Üç tür dış birleşim vardır: LEFT, RIGHT ve FULL OUTER JOIN. Hepsi bir INNER JOIN ile başlar ve sonra bırakılan satırların bazılarını geri eklerler. LEFT OUTER JOIN, birleştirme koşulunda ilk (sol) tablodan bırakılan tüm satırları geri ekler ve ikinci (sağ) tablodaki çıktı sütunları NULL olarak ayarlanır. SAĞ DIŞ BİRLEŞTİRME, birleştirme koşulunda ikinci (sağ) tablodan bırakılan tüm satırları geri ekler ve ilk (sol) tablodan çıktı sütunları NULL olarak ayarlanır. FULL OUTER JOIN, her iki tablodan da bırakılan tüm satırları geri ekler.
Sağ Dış Birleştirme
SAĞ DIŞ BİRLEŞTİRME, birleştirme koşulunda ikinci (sağ) tablodan bırakılan tüm satırları geri ekler ve ilk (sol) tablodan çıktı sütunları NULL olarak ayarlanır. Aşağıdaki sorgunun çalışanları ve ilgili departmanlarını listelediğini unutmayın. Ayrıca 30 numaralı departmana herhangi bir çalışan atanmamıştır.
SELECT E.first_name, E.salary, D.department_id
FROM employees E, departments D
WHERE E.DEPARTMENT_ID (+) = D.DEPARTMENT_ID;
FIRST_NAME SALARY DEPARTMENT_ID
---------- ---------- ----------
JOHN 6000 10
EDWIN 2000 20
MILLER 2500 10
MARTIN 4000 20
30
Sol dış katılma
LEFT OUTER JOIN, birleştirme koşulunda ilk (sol) tablodan bırakılan tüm satırları geri ekler ve ikinci (sağ) tablodaki çıktı sütunları NULL olarak ayarlanır. Yukarıda gösterilen sorgu, (+) işaretinin konumunu değiştirerek sol dış birleşimi göstermek için kullanılabilir.
SELECT E.first_name, E.salary, D.department_id
FROM employees E, departments D
WHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID (+);
FIRST_NAME SALARY DEPARTMENT_ID
---------- ---------- ----------
JOHN 6000 10
EDWIN 2000 20
MILLER 2500 10
MARTIN 4000 20
30
Tam Dış Birleştirme
FULL OUTER JOIN, her iki tablodan da bırakılan tüm satırları geri ekler. Aşağıdaki sorgu gösterileri çalışanları ve departmanlarını listeler. Çalışan 'MAN' şimdiye kadar herhangi bir departmana atanmamış (NULL) ve departman 30 herhangi bir çalışana atanmamış.
SELECT nvl (e.first_name,'-') first_name, nvl (to_char (d.department_id),'-') department_id
FROM employee e FULL OUTER JOIN department d
ON e. depARTMENT_ID = d. depARTMENT_ID;
FIRST_NAME DEPARTMENT_ID
---------- --------------------
MAN -
JOHN 10
EDWIN 20
MILLER 10
MARTIN 20
- 30
6 rows selected.
Kartezyen ürün veya Çapraz birleştirme
A ve B iki varlık için, A * B, Kartezyen ürün olarak bilinir. Kartezyen bir ürün, her bir tablodan satırların olası tüm kombinasyonlarından oluşur. Bu nedenle 10 sıralı bir tablo 20 sıralı bir tablo ile birleştirildiğinde, Kartezyen ürün 200 satırdır (10 * 20 = 200) Örneğin, çalışan masası sekiz sıralı ve üç sıralı departman tablosu birleştirildiğinde 24 satırlık bir Kartezyen çarpım tablosu (8 * 3 = 24).
Çapraz birleşim, iki tablonun Kartezyen çarpımını ifade eder. İki tablonun çapraz çarpımını üretir. Yukarıdaki sorgu CROSS JOIN deyimi kullanılarak yazılabilir.
Kartezyen ürün sonuç tablosu normalde pek kullanışlı değildir. Aslında, böyle bir sonuç tablosu son derece yanıltıcı olabilir. ÇALIŞANLAR ve BÖLÜMLER tabloları için aşağıdaki sorguyu yürütürseniz, sonuç tablosu her çalışanın her departmanla bir ilişkisi olduğu anlamına gelir ve bunun kesinlikle böyle olmadığını biliyoruz!
SELECT E.first_name, D.DNAME
FROM employees E,departments D;
Çapraz birleşim şu şekilde yazılabilir:
SELECT E.first_name, D.DNAME
FROM employees E CROSS JOIN departments D;