إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على:
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 أو NATURAL، SELECT * سيظهر تكرار واحد فقط لكل عمود من الأعمدة المستخدمة للمطابقة أولا، متبوعا بأعمدة اليسار، ثم ربط الجداول اليمنى باستثناء الأعمدة المنضمة إليها.
SELECT * FROM left JOIN right USING (a, b)
مكافئ ل
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
إذا حذفت 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