当前位置: 首页>后端>正文

mysql 上下级 父级关系 合并到一起 mysql级联查询

一、进阶查询

  • 链接查询
  • 子查询
  • 联合查询

1、链接查询

将两张或者多张表联合起来进行查询,这就是链接查询【join】,有两种

  • 交叉链接:

表中每一行,分别和其他表的每一行,组成一个新的行

              2.新表的行数是两个表的行数相乘,列数是两个表的列数相加

  • 自然链接【内链接、等值链接】

1.将多个表中,符合条件进行链接

得到交叉连接的结果

 select * from 表1,表2;

得到自然连接的结果

select * from 表1,表2 where 表1.字段=表2.字段;

案例:

#1 查询显示学生的班级名称、学生姓名、班级id

select name, class, classes.classid from students,classes where students.classid = classes.classid;

#2 查询显示学生的姓名和老师的姓名
#表1:学生表:students,关键有两个字段:学生姓名和老师的id,字段名name teacherid
#表2:老师表:teachers,关键有两个字段:老师姓名和老师的id,字段名name tid

select s.name,t.name from students as s,teachers as t where s.teacherid=t.tid;

#3 查询各个班级所开设的课程名,结果显示班级名和课程名
# 首先分析三张表的关联关系
#表1,班级表:classes,表中有班级id和班级名称,字段名classid和class
#表2,课程表:courses,表中有课程id和课程名,字段名courseid和course
#表3,班级课程关联关系表:coc,表中班级id和课程id,字段名classid和courseid

select class as "班级名",course as "课程表" from classes as c1,courses as c2,coc as c3 where c1.classid = c3.classid and c2.courseid = c3.courseid;

表别名

select 字段 from 表名 as 新名;

注意:如果有了新的名字,那么必须使用,否则报错

案例:在进行联合查询的时候,为表定义别名

  • 为students表取别名叫做s
  • 为classes表取别名叫做c

select name,c.classid from students as s,classes as c where s.classid = c.classid;

使用自然链接存在问题:

  • 会导致数据缺失
  • 解决方法:用左外链接、右外链接
  • 左表:前面的
  • 右表:后面的

左外链接

  • 显示结果以左表为准,左表中的数据会全部出现,右边中的数据,有就显示,没有的显示为空

左表 left join 右表 on 条件;

右外链接

  • 显示结果以右表为准,右表中的数据会全部出现,左边中的数据,有就显示,没有的显示为空

左表 right join 右表 on条件;

2、子查询

  • 在查询语句中,使用另外一个语句的查询结果

案例:查询所有年龄大于平均年龄的学生

select *from students where age >(select avg(age) from students);


https://www.xamrdz.com/backend/3vq1925081.html

相关文章: