JOIN
Şunlar için geçerlidir: Databricks SQL
Databricks Runtime
Birleştirme ölçütlerine göre iki tablo başvurusundaki satırları birleştirir.
Sözdizimi
left_table_reference { [ join_type ] JOIN right_table_reference join_criteria |
NATURAL join_type JOIN right_table_reference |
CROSS JOIN right_table_reference }
join_type
{ [ INNER ] |
LEFT [ OUTER ] |
[ LEFT ] SEMI |
RIGHT [ OUTER ] |
FULL [ OUTER ] |
[ LEFT ] ANTI |
CROSS }
join_criteria
{ ON boolean_expression |
USING ( column_name [, ...] ) }
Parametreler
-
Birleştirmenin sol tarafındaki tablo başvurusu.
-
Birleştirmenin sağ tarafındaki tablo başvurusu.
join_type
Birleştirme türü.
[ INNER ]
Her iki tablo başvurusunda da eşleşen değerlere sahip satırları döndürür. Varsayılan birleştirme türü.
SOL [ DıŞ ]
Sol tablo başvurusundaki tüm değerleri ve sağ tablo başvurusundan eşleşen değerleri döndürür veya eşleşme yoksa ekler
NULL
. Sol dış birleşim olarak da adlandırılır.SAĞ [ DıŞ ]
Sağ tablo başvurusundaki tüm değerleri ve sol tablo başvurusundan eşleşen değerleri döndürür veya eşleşme yoksa ekler
NULL
. Sağ dış birleşim olarak da adlandırılır.FULL [OUTER]
Her iki ilişkideki tüm değerleri döndürür ve
NULL
yan tarafta eşleşmesi olmayan değerleri ekler. Tam dış birleşim olarak da adlandırılır.[ SOL ] YARI
Tablo başvurusunun sol tarafından, sağdakiyle eşleşen değerleri döndürür. Sol yarı birleşim olarak da adlandırılır.
[ SOL ] ANTİ
Sol tablo başvurusundan, sağ tablo başvurusuyla eşleşmemiş değerleri döndürür. Sol birleştirmeye karşı koruma olarak da adlandırılır.
ÇAPRAZ BIRLEŞTIRME
İki ilişkinin Kartezyen çarpımını döndürür.
DOĞAL
İki ilişkideki satırların, eşleşen adlara sahip tüm sütunlar için eşitlik üzerinde örtük olarak eşleştirileceğini belirtir.
join_criteria
Bir tablo başvurusundaki satırların başka bir tablo başvurusunun satırlarıyla nasıl birleştirildiği belirtir.
ON boolean_expression
İki ilişkideki satırların nasıl eşleştirildiğine ilişkin bir BOOLEAN dönüş türüne sahip ifade. Sonuç doğruysa, satırlar eşleşme olarak kabul edilir.
USING ( column_name [, ...] )
Her iki ilişkide de bulunması gereken sütun
column_name
listesi için eşitliği karşılaştırarak satırları eşleştirir.
-
İsteğe bağlı sütun tanımlayıcısı listesine sahip geçici bir ad.
Notlar
veya NATURAL
belirttiğinizdeUSING
, SELECT *
önce eşleştirmek için kullanılan sütunların her biri için yalnızca bir oluşum, ardından soldaki sütunlar ve sonra birleştirilen sütunlar hariç sağ birleştirme tabloları gösterilir.
SELECT * FROM left JOIN right USING (a, b)
eşdeğerdir
SELECT left.a, left.b,
left.* EXCEPT(a, b),
right.* EXCEPT(a, b)
FROM left JOIN right ON left.a = right.a AND left.b = right.b
Herhangi birinin join_type
semantiğini atlarsanızjoin_criteria
, bu bir CROSS JOIN
olur.
Örnekler
-- Use employee and department tables to demonstrate different type of joins.
> CREATE TEMP VIEW employee(id, name, deptno) AS
VALUES(105, 'Chloe', 5),
(103, 'Paul' , 3),
(101, 'John' , 1),
(102, 'Lisa' , 2),
(104, 'Evan' , 4),
(106, 'Amy' , 6);
> CREATE TEMP VIEW department(deptno, deptname) AS
VALUES(3, 'Engineering'),
(2, 'Sales' ),
(1, 'Marketing' );
-- Use employee and department tables to demonstrate inner join.
> SELECT id, name, employee.deptno, deptname
FROM employee
INNER JOIN department ON employee.deptno = department.deptno;
103 Paul 3 Engineering
101 John 1 Marketing
102 Lisa 2 Sales
-- Use employee and department tables to demonstrate left join.
> SELECT id, name, employee.deptno, deptname
FROM employee
LEFT JOIN department ON employee.deptno = department.deptno;
105 Chloe 5 NULL
103 Paul 3 Engineering
101 John 1 Marketing
102 Lisa 2 Sales
104 Evan 4 NULL
106 Amy 6 NULL
-- Use employee and department tables to demonstrate right join.
> SELECT id, name, employee.deptno, deptname
FROM employee
RIGHT JOIN department ON employee.deptno = department.deptno;
103 Paul 3 Engineering
101 John 1 Marketing
102 Lisa 2 Sales
-- Use employee and department tables to demonstrate full join.
> SELECT id, name, employee.deptno, deptname
FROM employee
FULL JOIN department ON employee.deptno = department.deptno;
101 John 1 Marketing
106 Amy 6 NULL
103 Paul 3 Engineering
105 Chloe 5 NULL
104 Evan 4 NULL
102 Lisa 2 Sales
-- Use employee and department tables to demonstrate cross join.
> SELECT id, name, employee.deptno, deptname
FROM employee
CROSS JOIN department;
105 Chloe 5 Engineering
105 Chloe 5 Marketing
105 Chloe 5 Sales
103 Paul 3 Engineering
103 Paul 3 Marketing
103 Paul 3 Sales
101 John 1 Engineering
101 John 1 Marketing
101 John 1 Sales
102 Lisa 2 Engineering
102 Lisa 2 Marketing
102 Lisa 2 Sales
104 Evan 4 Engineering
104 Evan 4 Marketing
104 Evan 4 Sales
106 Amy 4 Engineering
106 Amy 4 Marketing
106 Amy 4 Sales
-- Use employee and department tables to demonstrate semi join.
> SELECT *
FROM employee
SEMI JOIN department ON employee.deptno = department.deptno;
103 Paul 3
101 John 1
102 Lisa 2
-- Use employee and department tables to demonstrate anti join.
> SELECT *
FROM employee
ANTI JOIN department ON employee.deptno = department.deptno;
105 Chloe 5
104 Evan 4
106 Amy 6
-- Use employee and department tables to demonstrate lateral inner join.
> SELECT id, name, deptno, deptname
FROM employee
JOIN LATERAL (SELECT deptname
FROM department
WHERE employee.deptno = department.deptno);
103 Paul 3 Engineering
101 John 1 Marketing
102 Lisa 2 Sales
-- Use employee and department tables to demonstrate lateral left join.
> SELECT id, name, deptno, deptname
FROM employee
LEFT JOIN LATERAL (SELECT deptname
FROM department
WHERE employee.deptno = department.deptno);
105 Chloe 5 NULL
103 Paul 3 Engineering
101 John 1 Marketing
102 Lisa 2 Sales
104 Evan 4 NULL
106 Amy 6 NULL
İlgili makaleler
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin