1.去重复 instinct (可以理解为分组)
select instinct 列 from 表名;//列相同的 合并只显示一条
select instinct 列1,列2 from 表名;//如果是两个列 两个列的组合当做整体 只有当两个列同时满足值相同才合并显示
select 列1,instinct 列2 from 表名;//语法错误
2.分组 group by
想要显示的最终结果只能是两种情况 分组条件 分组函数
分组时候可能会产生与条件筛选相关的操作
如果先进行条件筛选 后分组 where group-by ,where优先级高于group by
如果先进行分组 后进行筛选 group-by having,having用法与where一样,但优先级低于group by
如果分析之后还需要进行排序 order-by 最后处理
3.嵌套
将一条完整的SQL嵌套在另一条完整的SQL内部
*1.可以将查询的结果当做条件 再次查询
select * from student where chinese = (select max(chinese) from student);
在这种情况下有可能 嵌套的子SQL查询的表格与当前的SQL不一致
2.可以将查询的结果当做一张新的表格 表格基础上再次查询
select * from (select sid,sname,ssex,sage from student) xxx;
需要注意from后面的表格需要有名字 给表格起别名
4.in,any,some,all 是否满足子集中的条件
in(包含):where条件之后,列 in(值,值,值)。只要满足括号里的一个值就可以,默认=比较
括号里可以是常量,也可以是sql查询到的结果
select * from 表名 where 列 (not)in(值1,值2,。。。);
select * from 表名 where 列 (not)in(select 列 from 表名);
not in(不包含)
以下三个关键字都只能用子集,不能用常量。
any:满足查询子集中的某一个即可 >any <any =any(结果与in) !=any
some:与any完全一致
all :满足查询子集中的全部才可以 >all <all =all !=all(结果与not in)
5.集合 union 、union all
集合操作 并集 (oracle数据库有-->交集intersect 差集minus)
union(结合 合并的意思 并集)
select t1.列,t1.列 from 表1 union select t2.列,t2.列 from 表2;
将两张表的数据合并在一起显示出来,查询的列个数需要一致。
union跟union all区别在于,union查询结果会去重复,union all不会,哪怕两条相同的数据也会显示,
因此性能上union all更好,建议用union all。