子查询。
可以出现在where中,from中,h**ing中,select中。
当前查询需要建立在另一个查询的结果基础之上,这里就要利用到子查询。
子查询在where子句中。
1. 单行单列子查询通常用在where子句中。
2. 多行单列子查询通常用在where 子句,in中。
3. 多行多列子查询通常用在from 中。
4. >这些比较都只能使用单选单列子查询。
5. >any,>all单行多列。
2、exists后边的子查询至少返回一行数据,则整个条件返回true:不关心返回的是什么,只关心返回有没有数据。
3、在from子句**现了子查询,那么我们要将子查询的结果当做一张表的看待,从中再次查询想要的结果。那么就应当注意:
子查询的select语句中,出现了非字段名的字段通常是表达式或者函数,那么一定要给他们加上别名。
例子:select ename,sal, from emp_lxl e,(select deptno,**g(sal) **gsal from emp_lxl group by deptno) a
where = and >
分页查询。1、 rownum
不要创建表时,创建列名为rownum的列。
伪列,用于返回标识行数顺序的数字(并不是真实存在的)
select rownum,empno,ename,sal from emp_tc where rownum>3;
rownum是当oracle进行select查询表数据时,确定一条数据需要时,才会对其进行编号(伪劣的值),这就导致,没有数据被查出前,rownum永远没有值。所以rownum不能在第一次查询时作为where条件。
rownum:有数据了才有值。
where里出现:有值才有数据。
所以这里有一个矛盾。
分页的三步:
1·排序。2·编号。
3·取范围。
实现:select * from( select rownum rw,e.* from (select empno,ename,sal from emp order by empno )e )where rw between 1 and 3;
取数据(从页面(分页算法)):
page页数 pagesize 一页的条数。
开始:(page-1)*pagesize +1
结束:page*pagesize
mysql: limit(1,3)函数。
2、 decode(相当于switch) 解码:可以把一个东西换成另一个东西。
select ename , job, sal , decode ( job , manager', sal*1.2, 'analyst' ,sal*1.1, 'salesman' ,sal*1.
05 , sal ) bonus
from emp_lxl;
1) -和decode函数功能相似的有case语句。
例子:当job为不同的值时,bonus的值不同(上面一个例子的另一个形式)。
select ename,job,sal,case job when 'manager' then sal *1.2
when 'analyst' then sal *1.1
when 'salesman' then sal*1.05
else sal end
bonusfrom emp_lxl;
2) deconde还可以放在order by中。
例子:实现自己想要的排序顺序。
select * from dept_tc order by decode (dname, 'operations' ,2 , accounting' ,1 , sales' ,0 , 3) ;
3) decode也可以放在group by中。
例子:20号部门一组,其他部门是另一组。
思路:将其他不同部门的值改成相同的值即可。
select sum(sal) from emp group by decode (deptno , 20 , 20’ ,other’ )
3、 row_number:生成组内连续且唯一的编号。
select ename,sal,deptno,row_number() over ( partition by deptno order by sal desc) rank from emp_lxl;
4、 rank :生成组内不连续且不唯一的编号。
排序的列若值相同,会得到相同的编号。
5、 dense_rank() 生成组内连续且不唯一的编号。
6、 union、union all
7、 minus 获取两个结果集的差集。
8、 rollup( )这个更有意义。
9、 cube( )是cube的子集,统计的很全面,意义不够大,每个维度都来一遍。
10、 grouping sets:想显示什么,就把什么括起来。
select year_id,month_id,day_id,sum(sales_value) from sales_tab
group by grouping sets((year_id,month_id,day_id),(year_id,month_id))
order by year_id,month_id,day_id;
linux高级编程day
linux高级编程day04 笔记 posted on 2012 12 31 15 30 鑫龙阅读 207 评论 0 编辑收藏引用所属分类 杨强linux 笔记系列 一。io与文件映射。的共享与效率。read与write其中数据缓冲的大小。读取数据的缓冲大小 getpagesize。2.定位与定位读...
ORACLE高级查询
本章目标 多表查询。联接查询 inner join 内联接 left outer join 左外联接 right outer join 右外联接 full join 全联接 子查询。集合操作。union 联合 union all 联合所有 intersect 交集 minus 减集 一 连接类型。o...
SQL高级查询
高级查询概念。在掌握查询的基础知识后,您就可以探知查询解决方案中使用的下列高级查询概念 在选择列表中使用聚合函数。使用 group by 对多行分组。使用 union 组合结果。子查询基础知识。使用 case 处理条件数据。并行查询。汇总数据 在选择列表中使用聚合函数。聚合函数 例如 sum g c...