一,多表连接查询
1.多表连接查询是通过各个表之间共同列的关联性(例如:外键)来查询的。
2.多表连接查询的分类:
内连接(INNER JOIN) ,可简写为 JOIN;
左外连接(LEFT OUTER JOIN),可简写为LEFT JOIN;
右外连接(RIGHT OUTER JOIN),可简写为RIGHT JOIN;
自连接查询;
交叉连接(CROSS JOIN)也称为 笛卡儿乘积连接,基本上用不到。
二,内连接
内连接:内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。
语法:
#第一种写法
SELECT 字段列表 FROM 表1 INNER JOIN 表2
ON 表1.通用字段名=表2.通用字段名
#第二种写法
SELECT 字段列表 FROM 表1 ,表2
WHERE 表1.通用字段名=表2.通用字段名
注意:
如果两个表中有相同的字段名,必须在列名前加表名。否则将出现 错误代码:1052 Column 'studentno' in field list is ambiguous
内连接案例:
(1)查询学生的学号、姓名和成绩,并按照成绩降序排列
#第一种写法
SELECT s.studentno,s.studentname,r.studentresult FROM
student AS s INNER JOIN result AS r
ON s.studentno=r.studentno ORDER BY r.studentresult DESC
#第二种写法
SELECT s.studentno,s.studentname,r.studentresult FROM
student AS s,result AS r
WHERE s.studentno=r.studentno
ORDER BY r.studentresult DESC
三,左外连接
语法:
#左外连接
SELECT 字段列表 FROM 表1 LEFT JOIN 表2
ON 表1.通用字段名=表2.通用字段名
左外连接:左表(表1)的记录将会全部表示出来,而右表(表2)只会显示符合匹配条件的记录。
1.匹配,返回到结果集
2.无匹配,NULL值返回到结果集
左外连接案例:
查询学生的学号、姓名和成绩,并按照成绩降序排列
SELECT s.studentno,s.studentname,r.studentresult FROM
student AS s
LEFT JOIN
result AS r
ON s.studentno=r.studentno
ORDER BY r.studentresult DESC
四,右外连接
语法:
#右外连接
SELECT 字段列表 FROM 表1 RIGHT JOIN 表2
ON 表1.通用字段名=表2.通用字段名
右外连接:右表(表2)的记录将会全部表示出来,而左表(表1)只会显示符合匹配条件的记录。
1.匹配,返回到结果集
2.无匹配,NULL值返回到结果集
五,不同的SQL JIN对比