📜  SQL |联接(内部联接,左侧联接,右侧联接和完全联接)

📅  最后修改于: 2021-05-20 08:28:49             🧑  作者: Mango

SQL Join语句用于根据两个或多个表之间的公共字段合并数据或行。不同类型的联接为:

  • 内部联接
  • 左联接
  • 正确加入
  • 完全加入

考虑下面的两个表:

学生

2016-12-19 12-53-29的屏幕截图

学生课程

表5

最简单的联接是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,两者相同。

    查询示例(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,两者都是相同的。

    查询示例(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.
    

    查询示例(FULL JOIN)

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

    输出:
    表7

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