SQL_连接(Join),内部连接(INNER JOIN),左连接(LEFT JOIN ),右连接(RIGHT JOIN)完整外部连接(FULL OUTER JOIN),自连接(Self JOIN)(

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL_连接(Join),内部连接(INNER JOIN),左连接(LEFT JOIN ),右连接(RIGHT JOIN)完整外部连接(FULL OUTER JOIN),自连接(Self JOIN)(相关的知识,希望对你有一定的参考价值。

SQL_连接(Join)

  1. SQL join用于把来自两个或多个表的行结合起来。就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。
  2. 连接是在WHERE子句中执行的。可以使用几个操作符连接表,例如=、<、>、<=、>=、!=、BETWEEN、LIKE、 和NOT。

SQL_内部连接(INNER JOIN)

  1. 内部链接INNER JOIN关键字选择两个表中具有匹配值的记录。

INNER JOIN 语法

SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
  1. INNER JOIN 与 JOIN 是相同的,
    Java1_student表

    Java1_studentGrade表

使用 INNER JOIN连接两个表并按照成绩从高到低返回学生信息

SELECT Java1_student.id, Java1_student.name,Java1_studentGrade.id,Java1_studentGrade.Grade
FROM Java1_student
INNER JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;

注意:
如果表中至少有一个匹配项,INNER JOIN关键字将返回一行。如果 “Student” 表中的行与"studentGrade" 不匹配,则不会列出行。

SQL_左连接

  1. SQL左链接LEFT JOIN关键字返回左表(表1)中的所有行,即使在右表(表2)中没有匹配。如果在正确的表中没有匹配,结果是NULL

LEFT JOIN 语法一:

SELECT column_name(s)                
FROM table1                
LEFT JOIN table2                
ON table1.column_name=table2.column_name;

LEFT JOIN 语法二:

SELECT column_name(s)                
FROM table1                
LEFT OUTER JOIN table2                
ON table1.column_name=table2.column_name;      


连接两个表并按照成绩从高到低返回学生信息

SELECT Java1_student.id, Java1_student.name,Java1_student.sex,Java1_studentGrade.id,Java1_studentGrade.Grade
FROM Java1_student
LEFT JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;

注意:

  1. LEFT JOIN 关键字返回左表(student)中的所有行,即使在右边表(studentGrade)中没有匹配。

SQL_右连接(RIGHT JOIN)

  1. RIGHT JOIN 关键字返回右表(table2)的所有行,即使在左表(table1)上没有匹配。如果左表没有匹配,则结果为 NULL

右连接语法:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

注意:

  1. 在一些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。


注意:RIGHT JOIN关键字返回右表(studentGrade)的所有行,即使在左表(student)中没有匹配。

SELECT Java1_student.id, Java1_student.name,Java1_student.sex,Java1_studentGrade.id,Java1_studentGrade.Grade
FROM Java1_student
RIGHT JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;

SQL_完整外部连接(FULL OUTER JOIN)

  1. 当左(表1)或右(表2)表记录匹配时,FULL OUTER JOIN关键字将返回所有记录
  2. FULL OUTER JOIN可能会返回非常大的结果集!

完整外部连接语法:

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

SELECT Java1_student.id, Java1_student.name,Java1_studentGrade.Grade
FROM Java1_student
FULL OUTER JOIN Java1_studentGrade
ON Java1_student.id = Java1_studentGrade.id
ORDER BY Java1_studentGrade.Grade DESC;


注意

  1. FULL OUTER JOIN关键字返回左表(StudentGrade)中的所有行,以及右表(student)中的所有行。
  2. 如果 "StudentGrade"中的行中没有"student"中的匹配项,或者"student"中的行中没有 "StudentGrade"中的匹配项,那么这些行也会列出。

SQL_自连接

  1. 自联接是一种常规联接,但表本身是连接的。

自连接语法

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
SELECT Java1_student.id, Java1_student.name,Java1_studentGrade.Grade
FROM Java1_student,Java1_studentGrade
WHERE Java1_student.id = Java1_studentGrade.id;

以上是关于SQL_连接(Join),内部连接(INNER JOIN),左连接(LEFT JOIN ),右连接(RIGHT JOIN)完整外部连接(FULL OUTER JOIN),自连接(Self JOIN)(的主要内容,如果未能解决你的问题,请参考以下文章