MySQL多表查询精解

1.合并结果集

select * from ab
union all
select * from cd;

条件:要求被合并的表中,列的类型和列数相同,不一定是相同的两个表,查询的结果相同也可合并
union :合并结果会去除重复行
unique:合并结果不会去除重复行

2.连接查询

1.内连接

select * from a,b;

查询结果为笛卡尔积。例如:{a,b},{1,2,3}={a1,a2,a3,b1,b2,b3};结果有冗余,我们只需要在后边加上限制条件即可。
自然连接:自动把重复值去掉

select * from a natural join b;

2.外连接

1.左外连接:以左边的表为主表,无论左表满足不满足条件,都打印出来。不满足条件的右表用NULL补位

select * from student  left outer  join sc 
on student.sno=sc.sno

2.右外连接:以右边的表为主表,无论右表满足不满足条件,都打印出来。不满足条件的右表用NULL补位

select * from student  right outer  join sc 
on student.sno=sc.sno

3.全外连接:无论左表和右表的条件满足不满足,全都显示出来,也就是查询结果左边和右边都可能出现NULL

select * from student full outer  join sc 
on student.sno=sc.sno

3.子查询

查询中有查询(查看select关键字的个数)

--查询每个学生超过其选修课程平均成绩的课程号
select sno, cno
from sc sc1
where grade >
(
  select avg(grade)
  from sc sc2
  where sc1.sno=sc2.sno
)

表后面也可以添加子查询

发布了100 篇原创文章 · 获赞 67 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44867340/article/details/105597516