📜  SQL |联接(内联接、左联接、右联接和完全联接)

📅  最后修改于: 2021-09-10 02:10:08             🧑  作者: Mango

SQL Join 语句用于根据它们之间的公共字段组合来自两个或多个表的数据或行。不同类型的连接是:

  • 内部联接
  • 左加入
  • 右加入
  • 全面加入

考虑下面的两个表:

学生

截图来自 2016-12-19 12-53-29

学生课程

表5

最简单的 Join 是 INNER JOIN。

  1. INNER JOIN:只要条件满足,INNER JOIN 关键字就会从两个表中选择所有行。该关键字将通过组合两个表中条件满足的所有行来创建结果集,即公共字段的值将相同。
    语法
    SELECT table1.column1,table1.column2,table2.column1,....
    FROM table1 
    INNER JOIN table2
    ON table1.matching_column = table2.matching_column;
    
    
    table1: First table.
    table2: Second table
    matching_column: Column common to both the tables.
    

    注意:我们也可以用 JOIN 代替 INNER JOIN。 JOIN 与 INNER JOIN 相同。

    示例查询(INNER JOIN)

    • 此查询将显示注册不同课程的学生的姓名和年龄。
      SELECT StudentCourse.COURSE_ID, Student.NAME, Student.AGE FROM Student
      INNER JOIN StudentCourse
      ON Student.ROLL_NO = StudentCourse.ROLL_NO;
      

      输出
      表2

  2. LEFT JOIN :此连接返回连接左侧表的所有行以及连接右侧表的匹配行。右侧没有匹配行的行,结果集将包含null 。 LEFT JOIN 也称为LEFT OUTER JOIN。句法:
    SELECT table1.column1,table1.column2,table2.column1,....
    FROM table1 
    LEFT JOIN table2
    ON table1.matching_column = table2.matching_column;
    
    
    table1: First table.
    table2: Second table
    matching_column: Column common to both the tables.
    

    注意:我们也可以使用 LEFT OUTER JOIN 代替 LEFT JOIN,两者都是一样的。

    示例查询(左连接)

    SELECT Student.NAME,StudentCourse.COURSE_ID 
    FROM Student
    LEFT JOIN StudentCourse 
    ON StudentCourse.ROLL_NO = Student.ROLL_NO;
    

    输出
    表3

  3. RIGHT JOIN : RIGHT JOIN 类似于 LEFT JOIN。此连接返回连接右侧表的所有行以及连接左侧表的匹配行。左侧没有匹配行的行,结果集将包含null 。 RIGHT JOIN 也称为 RIGHT OUTER JOIN。句法:
    SELECT table1.column1,table1.column2,table2.column1,....
    FROM table1 
    RIGHT JOIN table2
    ON table1.matching_column = table2.matching_column;
    
    
    table1: First table.
    table2: Second table
    matching_column: Column common to both the tables.
    

    注意:我们也可以使用 RIGHT OUTER JOIN 代替 RIGHT JOIN,两者是一样的。

    示例查询(右连接)

    SELECT Student.NAME,StudentCourse.COURSE_ID 
    FROM Student
    RIGHT JOIN StudentCourse 
    ON StudentCourse.ROLL_NO = Student.ROLL_NO;
    

    输出:
    表6

  4. FULL JOIN: FULL JOIN 通过组合 LEFT JOIN 和 RIGHT JOIN 的结果来创建结果集。结果集将包含两个表中的所有行。没有匹配的行,结果集将包含NULL值。句法:
    SELECT table1.column1,table1.column2,table2.column1,....
    FROM table1 
    FULL JOIN table2
    ON table1.matching_column = table2.matching_column;
    
    
    table1: First table.
    table2: Second table
    matching_column: Column common to both the tables.
    

    示例查询(完全连接)

    SELECT Student.NAME,StudentCourse.COURSE_ID 
    FROM Student
    FULL JOIN StudentCourse 
    ON StudentCourse.ROLL_NO = Student.ROLL_NO;
    

    输出:
    表7

左连接(视频)
右加入(视频)
完全加入(视频)
SQL | JOIN(笛卡尔连接,自连接)