الانضمام
ينطبق على: التحقق من Databricks SQL Databricks Runtime
يجمع بين الصفوف من مرجعين للجدول استنادا إلى معايير الانضمام.
بناء الجمله
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 [, ...] ) }
معلمات
-
مرجع الجدول على الجانب الأيسر من الصلة.
-
مرجع الجدول على الجانب الأيمن من الصلة.
join_type
نوع الصلة.
[ INNER ]
إرجاع الصفوف التي تحتوي على قيم مطابقة في كل من مراجع الجدول. نوع الصلة الافتراضي.
LEFT [ OUTER ]
إرجاع كافة القيم من مرجع الجدول الأيسر والقيم المتطابقة من مرجع الجدول الأيمن، أو إلحاقها
NULL
إذا لم يكن هناك تطابق. ويشار إليه أيضا باسم صلة خارجية اليسرى.RIGHT [ OUTER ]
إرجاع كافة القيم من مرجع الجدول الأيمن والقيم المتطابقة من مرجع الجدول الأيسر، أو إلحاقها
NULL
إذا لم يكن هناك تطابق. ويشار إليه أيضا باسم الصلة الخارجية اليمنى.FULL [OUTER]
إرجاع كافة القيم من كلا العلاقات، مع إلحاق
NULL
القيم على الجانب الذي لا يحتوي على تطابق. ويشار إليه أيضا على أنه صلة خارجية كاملة.[ LEFT ] شبه
إرجاع القيم من الجانب الأيسر من مرجع الجدول الذي يحتوي على تطابق مع اليمين. ويشار إليه أيضا باسم الصلة شبه اليسرى.
[ LEFT ] مكافحه
إرجاع القيم من مرجع الجدول الأيسر التي لا تتطابق مع مرجع الجدول الأيمن. ويشار إليه أيضا على أنه صلة مضادة لليسار.
CROSS JOIN
إرجاع المنتج الديكارتي للعلاقات الثنائية.
الطبيعيه
يحدد أنه سيتم مطابقة الصفوف من العلاقات بينهما ضمنيا على المساواة لجميع الأعمدة ذات الأسماء المطابقة.
join_criteria
يحدد كيفية دمج الصفوف من مرجع جدول مع صفوف مرجع جدول آخر.
تشغيل boolean_expression
تعبير بنوع إرجاع منطقي يحدد كيفية مطابقة الصفوف من العلاقات. إذا كانت النتيجة صحيحة، تعتبر الصفوف مطابقة.
USING ( column_name [, ...] )
يطابق الصفوف عن طريق مقارنة المساواة لقائمة الأعمدة
column_name
التي يجب أن تكون موجودة في كلتا العلاقات.USING (c1, c2)
هو مرادف لON rel1.c1 = rel2.c1 AND rel1.c2 = rel2.c2
.
-
اسم مؤقت مع قائمة معرف عمود اختيارية.
تلاحظ
عند تحديد USING
أو NATURAL
، SELECT *
سيظهر تكرار واحد فقط لكل عمود من الأعمدة المستخدمة للمطابقة.
إذا حذفت join_criteria
دلالية أي join_type
تصبح من CROSS JOIN
.
امثله
-- 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