-
6.
查看全部 -
5.
查看全部 -
4.
查看全部 -
3.
查看全部 -
2.
查看全部 -
1.
\
查看全部 -
instr( a,b):如果字符串b在字符串a的里面,则返回的是b在a中的位置,即返回值大于0;
wm_concat(cols):对学生姓名用逗号进行拼接
查看全部 -
问题:统计员工入职年份:
1.使用函数的方式:
select count(*) from Total,
sum(decode(to_char(hiredate,'YYYY'),'1980',1,0))"1980",
sum(decode(to_char(hiredate,'YYYY'),'1982',1,0))"1982"
from emp;
to_char:将A按照XXX的格式转换成字符串
decode:hiredate是1980就返回1,否则返回0
2.使用子查询的方式解决(使用到oqacle的维表,dual)
(select count(*) emp) Total,
(select count(*) from emp where to_char(hiredate,'YYYY')='1980')"1980",
(select count(*) from emp where to_char(hiredate,'YYYY')='1982
3.存储过程来解决(ORACLE之PL/SQL基础中的课程中有提到)
查看全部 -
e1表中可以查询出前8个,(rownum只能写<=,不能写>=,另外这里排序完rownum也是乱的),
e2表把e1查出的rownum别名为r,此时作为e2表的第一列数值,可以查询r>=5 的,则得到查询结果。
查看全部 -
单行操作符:=,>,>=,<,<=,<>
多行操作符:in,any,all
查看全部 -
上面的图1:rownum伪列,这里会默认根据伪列排序。
要找出员工表中工资最高的前三名,(在Top-n分析问题中,必须对子查询进行排序)
行号永远按照默认顺序生成,行号只能用<,<=;不能使用>,>=
图2,这种结果是错的,因为它会根据伪列去取了三个,就算根据sal排序,行号还是不会发生变化;
需要在排序后,行号自动生成才可以,如下图三(先根据子查询生成新的伪列,再取前三个):
查看全部 -
1.如上图:子查询一般先执行子查询,再执行主查询,相关子查询例外,上面的举例就是相关子查询,(截图是我为了这种用法,可以将select avg 放在筛选语句里。
相关子查询,我的理解就是在子查询中,通过表别名,将外面表关键字段等于子查询中字段,自己平时也经常用,应该清楚这个概念)
2.还有另一种方法可以查询(多表查询的方式),如下图:
3.explain plan for XXX查询语句;
执行完之后查询:select * from table(dbms_xplan.display);
总结:通过3的解释计划,相关子查询的方式消耗cpu资源较少,而多表查询这种消耗较大。
查看全部 -
可以使用子查询的位置,group by后不可使用子查询,having where from select后面可以。
查看全部 -
先执行子查询再执行主查询,但是相关子查询例外。
select 后的子查询,只能是单行子查询。
查看全部 -
这里第5行指的是从根节点开始遍历,第9行表示从具体某个节点7839开始遍历。
level为伪列,树的深度。相关关键字:
connect by prior A=BB
star with A=XXX;
总结:
自链接不适合查询大表(因为会产生笛卡尔里),
可以层次查询(树状结构,可以从任意一个节点向下遍历,缺点是结果不够直观)
查看全部
举报