当查询的结果来源于有关系的多张表时,需要使用到连接查询
连接查询分类:
- 内连接(inner join):表A inner join 表B,表A和表B都匹配的行出现在结果集当中(不区分两个表的先后顺序)
- 左连接(left join):表A left join 表B,表A与表B都匹配的行会出现在结果中,外加表A中独有的数据,未对应的数据使用null填充(区分先后顺序)
- 右连接(right join):表A right join表B,表A与表B都匹配的行会出现在结果中,外加表B中独有的数据,未对应的数据使用null填充(区分先后顺序)
连接查询中的列名和表名的使用:
- 在查询或条件中推荐使用“表名.列名”的语法
- 如果多个表中列名不重复,则可以省略"表名."部分,直接使用‘列名‘
- 如果表的名称太长,可以取个简写别名,表名后面使用"as 简写名"或者省去as,直接跟上“简写名”
练习:
-
查询学生的姓名、总分
select students.sname,sum(scores.score) from scores inner join students on scores.stuid=students.id group by students.sname;
-
查询各科的平均分、总分
select subjects.stitle,avg(scores.score),max(scores.score) from scores inner join subjects on scores.subid=subjects.id where subjects.isdelete=0 group by subjects.stitle;