前言面试
咱们使用SQL查询不能只使用很简单、最基础的SELECT语句查询。若是想从多个表查询比较复杂的信息,就会使用高级查询实现。学习
常见的高级查询包括多表链接查询、内链接查询、外链接查询与组合查询等,今天咱们先来学习最经常使用、面试也很容易被问到的链接查询。spa
咱们今天以一个简单的学生信息表(学生ID、学生姓名、学生性别)与一个学生成绩表(学生ID、学生成绩、成绩等级)做演示:3d
student_info表:blog
student_score表:基础
1、内链接(INNER JOIN)语法
一、等值链接im
概述:指使用等号"="比较两个表的链接列的值,至关于两表执行笛卡尔后,取两表连结列值相等的记录。查询
语法:SELECT 列 FROM 表1 img
INNER JOIN 表2
ON 表1.列 = 表2.列
示例:
SELECT A.*, B.* FROM student_info A
inner join student_score B
ON A.student_id = B.student_id
结果:
二、非等值链接
概述:指使用大于号">"或小于号"<"比较两个表的链接列的值,至关于两表执行笛卡尔后,取一个表大于或小于另外一个表的连结列值的记录。
语法:
SELECT 列 FROM 表1 INNER JOIN 表2 ON 表1.列 <> 表2.列
示例:SELECT A.*, B.* FROM student_info A
inner join student_score ON A.student_id > B.student_id
结果:
2、外联结
一、左外链接(LEFT OUTER JOIN)
概述:指将左表的全部记录与右表符合条件的记录,返回的结果除内链接的结果,还有左表不符合条件的记录,并在右表相应列中填NULL。
示例:SELECT A.*, B.*
FROM student_info A left join student_score B
ON A.student_id = B.student_id
结果:
二、右外链接(RIGHT OUTER JOIN)
概述:与左外链接相反,指将右表的全部记录与左表符合条件的记录,返回的结果除内链接的结果,还有右表不符合条件的记录,并在左表相应列中填NULL。
示例:SELECT A.*, B.* FROM student_info A right join student_score B ON A.student_id = B.student_id
结果:
三、全外链接(FULL JOIN)——MySQL不支持
概述:指将左表全部记录与右表全部记录进行链接,返回的结果除内链接的结果,还有左表与右表不符合条件的记录,并在左表与右表相应列中填NULL。
3、天然链接(NATURAL JOIN)
概述:指自动将表中相同名称的列进行记录匹配。
示例:SELECT A.*, B.* FROM student_info A natural join student_score B
结果:
4、自链接
概述:指用表的别名实现表自身的链接。
示例:SELECT B.*
FROM student_score A, student_score B
WHERE A.student_id = B.student_id
AND B.student_score > 80