多表查询
笛卡尔积
select * from [表1],[表2],...;
例如这两张表,如果我想输出全部数据,会产生下面的情况
会发现现在class表中的数据随机组合了stu表,这就产生了笛卡尔积的情况;
多表查询
如果想要其中的几行数据,可以这么写
select [列1],[列2],... from [表1],[表2],... where [表1].[列1]=[表2],[列2];
1、一定要表明字段属于哪一个表,特别是拥有相同名字的列的时候
2、使用该约束条件可以过滤两张表形成的笛卡尔积,筛选出来想要的数据
自连接
自连接是指在一张表连接查询
例如在下表中我想知道有人得了99分的班级的所有人的成绩
1、可以使用子查询的方式(嵌套查询)
首先我需要查出来这个人是哪个班的,再输出那个班级所有人的成绩
采用子查询的方式后便是
2、可以给这张表定义别名
子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
单行子查询
返回单行单列记录的子查询
多行子查询
返回多行记录的字查询
好像在说废话
in关键字
指的是匹配结果任意一个满足就返回
这有一张表,我要找到跟赵铁柱成绩一样的人,输出班级姓名成绩
all关键字
必须和结果中的所有都进行比较,全部满足条件才返回
还是那张表,我想找到成绩比3班所有人都成绩高的
any关键字
只需要满足条件之一就返回
依旧是那张表,我想找到比3班任意学生分数高的,包括自己班的学生
在from语句中使用子查询
将每个子查询都当做临时数据表来看
合并查询
union
用于取得两个结果集的并集,当使用时会自动去掉重复行
union all
用于取得两个结果集的并集,当使用时不会自动去掉重复行