知识回顾
1.去重复 distinct
distinct 列, 列 如果是两个列, 两个列的组合当做整体
列, distinct列 可能会产生第二个列去重复后个数减少
2.分组之后想要再深入进行分析
分组条件+分组函数
1.group by 列
2.一旦搭配了分组条件来进行分析
想要显示的最终结果只能是两种情况 分组条件 分组函数
3.分组时候可能会产生与条件筛选相关的操作
如果先进性条件筛选 后分组 where group by
如果先进行分组 后进行筛选 group by having
分析之后还需要进行排序 order by 最后处理
3.嵌套
将一条完整的SQL嵌套在另外一条完整的SQL内部
1.可以将查询的结果当做条件 再次查询
select from student where chinese = (select max(chinese) fromm student);
在这种情况下有可能 嵌套的子SQL查询的表格与当前的SQL不一致
2.可以将查询的结果当做一张新的表格 表格基础上再次查询
select from(select sid, sname, sex, sage from student) xxx;
需要注意from 后面的表格需要有名字 给表格起名字
================================================================
几个关键字使用
i in 满足查询自己中的某一个即可 默认=比较
in后面的子集内 可以是常量固定值
也可以是通过另一条sql语句查询出来的结果
如下的三个使用起来与in类似 查询是否满足后面的子集中的条件
ii any >any || < any 这个是大于或小于any中的其中一个
例子: select * from student where classid >any (select classid from student where classid>2);
iii some 与any完全一致
iiii all 满足查询自己中的全部才可以
select * from student where classid >all(select classid from myclass where chassid>2);
—————————————————————————————————————————————————————————
集合操作 并集 (oracle数据库有—->交集intersect 差集minus);
union(结合 合并的意思 并集);
select * from student;
有两张表格 学生信息 老师信息
我们的学校想要召开运动会
学校想要给所有的老师和同学都准备同意的服装
这时候就需要统计全学校所有的人的信息
这个就是并集 列数不一样不可以并集
select tid, tname, tsex from teacher union select sid, sname , ssex from student;
1.要求前后两个查询子集的列数是一致的
2.类型没有要求
3.拼接后显示的列名是前一个子集默认的列名
4.注意 union和union all的区别
create table newteacher as select from teacher;
select from newteacher union select from teacher;
union合并后去做重复的处理 性能比较慢
如果产生重复元素 记录的是第一次出现的那一行
union all 将两个查询的字节直接做合并
不做任何处理 性能比较快
建议以后尽量使用 union all来进行合并处理
select from teacher union all select * from newteacher;
select from newteacher union all select from teacher
