📜  SQL |联接(笛卡尔联接和自联接)

📅  最后修改于: 2021-05-20 06:55:32             🧑  作者: Mango

SQL | JOIN(内部,左侧,右侧和完全联接)
在本文中,我们将讨论剩余的两个JOINS:

  • 笛卡尔联接
  • 自我加入

考虑下面的两个表:
桌子

学生课程

表5

    1. 笛卡尔联接:笛卡尔联接也称为交叉联接。在“笛卡尔联接”中,一个表的每一行与另一表的每一行都有一个联接。当未指定匹配列或WHERE条件时,通常会发生这种情况。
      • 在没有WHERE条件的情况下,笛卡尔联接的行为类似于笛卡尔乘积。也就是说,结果集中的行数是两个表的行数的乘积。
      • 在存在WHERE条件的情况下,此JOIN将像INNER JOIN一样函数。
      • 一般而言,交叉联接类似于内部联接,其中联接条件将始终评估为True

      句法:

      SELECT table1.column1 , table1.column2, table2.column1...
      FROM table1
      CROSS JOIN table2;
      
      
      table1: First table.
      table2: Second table
      

查询示例(CARTESIAN JOIN):

  • 在下面的查询中,我们将从“学生”表中选择“姓名”和“年龄”,并从“学生课程”表中选择“ COURSE_ID”。在输出中,您可以看到表格Student的每一行都与表格StudentCourse的每一行连接在一起。结果集中的总行数= 4 * 4 = 16。
    SELECT Student.NAME, Student.AGE, StudentCourse.COURSE_ID
    FROM Student
    CROSS JOIN StudentCourse;
    

    输出
    table_final

  1. SELF JOIN :顾名思义,在SELF JOIN中,一个表被连接到自身。也就是说,表的每一行都与自身以及所有其他行(取决于某些条件)结合在一起。换句话说,我们可以说这是同一张表的两个副本之间的联接。句法:
    SELECT a.coulmn1 , b.column2
    FROM table_name a, table_name b
    WHERE some_condition;
    
    table_name: Name of the table.
    some_condition: Condition for selecting the rows.
    

    查询示例(SELF JOIN):

    SELECT a.ROLL_NO , b.NAME
    FROM Student a, Student b
    WHERE a.ROLL_NO < b.ROLL_NO;
    

    输出:
    受餐者