连接查询
根据两个或多个表之间的关系,实现多表查询;主要有内连接、外连接、全连接、交叉连接。
准备工作:学生信息表,教师信息表,课程表,学生成绩表(见笔记02)
一、内连接查询
inner join 表名 on 关联条件
--查询本次考试有语文成绩的学生信息及语文成绩
--显式写法
select s.s_id as '学生ID', s.s_name as '学生姓名', s_score
from student s
inner join score sc on s.s_id=sc.s_id and sc.c_id=1
--隐式写法
select s.s_id as '学生ID', s.s_name as '学生姓名', s_score
from student s,score as sc
where s.s_id=sc.s_id and sc.c_id=1
知识点:
s.s_id as '学生ID'--as后面跟着别名,as可省略,也可写成'学生ID'=s.s_id,底下student s也是别名,可以加as,但是不能写成等号形式。给表命名别名是为了区分不同表的相同名称的列。
拓展训练:查询本次语文成绩大于数学成绩的学生信息及语文和数据的成绩
二、外连接查询
1、左/右连接:left/right (outer) join 表名 on 关联条件 --返回左/右表所有行,右/左表如无数据的显示null
2、全连接:full (outer) join --返回左、右表所有行,右、左表如无数据的显示null
--查询所有学生的成绩
select * from student s
left outer join score sc on s.s_id=sc.s_id --outer可省略
3、交叉连接:cross join --又称笛卡尔积,如果不带where子句,返回两个表行数乘积的行数;如果带where子句,结果等价于inner join。
select s.s_id as '学生ID', s.s_name as '学生姓名', s_score
from student s
cross join score sc where s.s_id=sc.s_id and sc.c_id=1
结果与内连接的案例一致。