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)(的主要内容,如果未能解决你的问题,请参考以下文章

SQL中inner join,outer join和cross join的区别

sql中的inner join ,left join ,right join

SQL——左连接(Left join)右连接(Right join)内连接(Inner join)

SQL中inner join,outer join和cross join的区别

SQL表连接查询(inner joinfull joinleft joinright join)

SQL语句(inner join,left out join,right out join三者的不同