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)
SQL join
用于把来自两个或多个表的行结合起来。就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。- 连接是在WHERE子句中执行的。可以使用几个操作符连接表,例如
=、<、>、<=、>=、!=、BETWEEN、LIKE、 和NOT。
SQL_内部连接(INNER JOIN)
- 内部链接
INNER JOIN
关键字选择两个表中具有匹配值的记录。
INNER JOIN 语法
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
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_左连接
- 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;
注意:
LEFT JOIN 关键字返回左表
(student)中的所有行,即使在右边表(studentGrade)中没有匹配。
SQL_右连接(RIGHT JOIN)
RIGHT JOIN
关键字返回右表(table2)的所有行,即使在左表(table1)上没有匹配。如果左表没有匹配,则结果为NULL
。
右连接语法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
注意:
- 在一些数据库中,
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)或右(表2)表记录匹配时,
FULL OUTER JOIN
关键字将返回所有记录 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;
注意
FULL OUTER JOIN
关键字返回左表(StudentGrade)中的所有行,以及右表(student)中的所有行。- 如果 "StudentGrade"中的行中没有"student"中的匹配项,或者"student"中的行中没有 "StudentGrade"中的匹配项,那么这些行也会列出。
SQL_自连接
- 自联接是一种常规联接,但表本身是连接的。
自连接语法
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的区别