الانضمام

ينطبق على:التحقق تم وضع علامة نعم على التحقق من 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 [, ...] ) }

معلمات

  • left_table_reference

    مرجع الجدول على الجانب الأيسر من الصلة.

  • right_table_reference

    مرجع الجدول على الجانب الأيمن من الصلة.

  • 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.

  • table_alias

    اسم مؤقت مع قائمة معرف عمود اختيارية.

تلاحظ

عند تحديد 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