Oracle_Day2 查询练习,以及分页
来源:互联网 发布:安卓6.0 移动数据开关 编辑:程序博客网 时间:2024/04/26 08:59
1.伪列:rownum:
ROWNUM注意点:
(1)按照默认的顺序生成(就是没有排序的)
(2)ROWNUM只能使用<或<=,不能使用>或>=。(经过测试发现>或>=1是可以查询出结果的,但是1以上就不能查询出结果了)
查询出工资前3的员工信息
SELECT ROWNUM,ENAME,SAL FROMEMP ORDER BY SAL DESC
进行排序后发现ROWNUM顺序是错误的。
如果希望ROWNUM排列正确的话,那么可以在外面再套一层ROWNUM的查询语句。注意ORDER BY要写在子查询里,要不然顺序还是乱的。
SELECT ROWNUM,ENAME,SAL FROM(SELECT ROWNUM,ENAME,SAL FROMEMP ORDER BY SAL DESC)
分页:由于ROWNUM不支持>=,那么可以采用在子查询外边加一层查询子查询的ROWNUM的语句,使子查询的ROWNUM(取个别名)结果作为外层查询的条件使用。这样就可以使用>=了。
SELECT E.R,E.ENAME,E.SAL FROM(SELECT ROWNUM R,ENAME,SAL FROM(SELECT ROWNUM,ENAME,EMPNO,SAL FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <=3)EWHERE E.R>=2
练习:
练习一.查询出员工表中工资最高的前三名,格式如下:
SELECT ROWNUM R,ENAME,SAL FROM(SELECT ROWNUM,ENAME,EMPNO,SAL FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <=3
练习二.查询出员工表中薪水大于本部门平均薪水的员工,结果如下:
方法一:
SELECT E.EMPNO,E.ENAME,E.SAL,D.SFROM EMP E, (SELECT DEPTNO,AVG(SAL) S FROM EMP GROUP BY DEPTNO)DWHERE E.DEPTNO=D.DEPTNO AND E.SAL>D.S方法二:
相关子查询:将主查询中的某个值 作为参数传递给子查询
SELECT EMPNO,ENAME,SAL,(SELECT AVG(SAL) FROM EMP WHERE DEPTNO=E.DEPTNO)FROM EMP EWHERE SAL>(SELECT AVG(SAL) FROM EMP WHERE DEPTNO=E.DEPTNO)--子查询根据主查询的员工DEPTNO,查询出员工所在部门的工资平均值
练习三
create table pm_ci(ci_id varchar(20) primary key,stu_ids varchar(100));insert into pm_ci values('1','1,2,3,4');insert into pm_ci values('2','1,4');create table pm_stu(stu_id varchar(20) primary key,stu_name varchar(20));insert into pm_stu values('1','张三');insert into pm_stu values('2','李四');insert into pm_stu values('3','王五');insert into pm_stu values('4','赵六');
这道题需要用到WM_CONCAT函数: 按照部门分组,将同一部门的员工姓名显示在一行中
要用这个函数,首先需要把表的查询结果变成下面这种形式
部门 员工姓名
1 xxc1
2 xxc2
3 xxc3
所以需要把第三题的两张表变成这种形式
课程编号 学生姓名
1 张三
1 李四
2 张三
......
由于PM_CO表中STU_IDS是字符串类型,那么就可以用到INSTR(a,b)函数当a中包含b就返回b的索引位置(从1开始),不包含返回0.
SELECT C.CI_ID,S.STU_NAMEFROM PM_STU S,PM_CI CWHERE INSTR(C.STU_IDS,S.STU_ID)>0查询结果如下:
然后就可以使用WM_CONCAT函数:
SELECT CI_ID,WM_CONCAT(STU_NAME) NAMES FROM(SELECT C.CI_ID,S.STU_NAMEFROM PM_STU S,PM_CI CWHERE INSTR(C.STU_IDS,S.STU_ID)>0)GROUP BY CI_ID
- Oracle_Day2 查询练习,以及分页
- Oracle_Day2 子查询
- extjs分页以及查询分页
- oracle 的分页查询练习
- MySQL分页查询以及优化
- easyUi分页以及条件查询
- sql server 分页查询以及区间查询
- 学生信息查询之分页练习
- JDBC的分页查询以及hibernate高级查询分页
- LigerUI真假分页以及过滤查询功能
- 实现查询分页以及隔行变色
- LigerUI真假分页以及过滤查询功能
- sqlserver 2005 分页查询支持 以及分页存储过程
- rownum与Oracle分页SQL 以及提高分页查询效率
- 数据库分页查询技术以及实现查询随机数
- 【04】SSH练习——简单分页查询的实现
- Oracle_Day2集合运算
- 分页练习
- 2014年1月7日Google实习电面
- 学习STM8的好文章 .
- cocos2d-x学习笔记17:记录存储2:SQLite基本使用
- JAVA计划任务
- AR应收
- Oracle_Day2 查询练习,以及分页
- openCV中IplImage的使用
- java正则表达式提取数字的方法实例
- 用的友盟安卓社会化组件,然后客户端安装了微博4.2,做的应用用友盟的新浪授权登陆 提示:sso package or sign error。
- MD5及邮件发送
- linux shell
- ios动画
- 职场新人如何招架同事倚老卖老?
- 地址空间的归纳总结