PL/SQL中SELECT总结
一、SELECT 语句的各个关键词的顺序及作用简解(这个我简略点写~)
1.SELECT
2.FROM
3.WHERE
4.GROUP BY ---对结果集进行分组,通常与聚合函数一起使用
5.HAVING
6.ORDER BY
举个例子如下:
select item_name,count(item_name) from lab_item_dict where price='25' group by item_name having count(item_name)>1 order by count(item_name);

注意这个顺序。
二、SELECT语句基本执行过程详解:
当执行SELECT语句时,DBMS的执行步骤可以表示如下:
step1:首先执行FROM子句,组装来自不同数据源的数据,及根据FROM子句中的一个或多个表创建工作表。如果在FROM子句中有两个或多个表,DBMS将执行 CROSS JOIN运算对表进行交叉连接,作为工作表。
step2:若果有WHERE子句,实现基于制定的条件对记录进行筛选,即DBMS将WHERE子句列出的搜索条件作用于step1中生成的工作表。DBMS将保留哪些满座搜索条件的行,删除那些不满足条件的行。
step3:若果有GROUP BY子句,它讲把数据划分为多个分组。DBMS将step2生成的结果表中的行分成多个组,每个组中有行的group_by_expression字段具有相同的值。接着,DBMS将每组减少到单行,而后将其添加到新的结果表中,用以代替step1的工作表。
step4:如果有HAVING子句,他将筛选分组。DBMS将HAVING子句列出的搜索条件作用于step3生成的“组合”表中的每一行。DBMS将保留哪些满足搜索条件的行,删除那些不满足条件的行。
step5:将SELECT子句作用于结果表,删除表中不包含再select_list中的列。如果SELECT子句包含DISTINCT关键词,DBMS将从结果中删除重复的行。
step6:如果有ORDER BY子句,则按指定的排序规则对结果进行排序。
step7:对于交互式的SELECT语句,在屏幕上出现结果;对于嵌入式的SQL,使用游标将结果传递给宿主程序。
以上就是SELECT语句的基本执行过程。理解它对于提高SQL查询的效率将有帮助。
3、PL/SQL中的rownum在查询中用法举例
主要是最近项目遇到,很实用的一些功能,给大家分享:
有表如下:

(1)查询表中价格最大的药品记录
select distinct * from LAB_ITEM_DICT t where price in (select max(price) from lab_item_dict);

(2)查询表中的前5行记录
select * from lab_item_dict where rownum<=5;
select * from lab_item_dict where lnnvl(rownum>5);
select * from CLINIC_MASTER where rownum!=6;
注意第二条:lnnvl 排除指定条件;第三条:理解关键点为rownum是伪列,先计算结果集,然后在结果集上加上rowmun列。
上面3条语句,等价。

(3)查询表中第6-10行数据
select * from lab_item_dict where item_code not in (select item_code from lab_item_dict where rownum<=5) and rownum<=5
或者:
select * from lab_item_dict where lnnvl(item_code in (select item_code from lab_item_dict where rownum<=5)) and rownum<=5;

(4)查询表中价格前5大的数据
select distinct * from lab_item_dict where price in(select distinct price from (select distinct price from lab_item_dict order by price desc) where rownum<=5)and rownum<=5 order by price desc;

(5)查询另一张表中,就诊序号分别为‘1’和‘4’的两个病人日期最近的各前5条数据(这个是百度上面有人提问的一道淘宝网的面试题,类似的意思~)
select * from (select * from OUTP_PRESC t where visit_no='1' order by visit_date desc ) where rownum<=5
union all
select * from (select * from OUTP_PRESC t where visit_no='4' order by visit_date desc ) where rownum<=5

暂时,想到常用的这么多~有空续。。。
PL/SQL中SELECT总结的更多相关文章
- oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)
在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT, ROLLBACK, 和SA ...
- PL/Sql 中创建、调试、调用存储过程
存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...
- PL/SQL中如何执行DDL、SCL?
PL/SQL程序中不能直接执行DDL语句.为什么? 假设我们在pl/sql程序中有这样的一条DDL语句—— drop table emp:在第一次解析pl/sql中的“drop table emp;” ...
- 在PL/SQL中调用Oracle存储过程
存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...
- 使用集成SOA网关的PL / SQL中的REST
使用集成SOA网关的PL / SQL中的REST Oracle电子商务套件集成SOA网关(ISG)是一款开箱即用的模块,支持在Oracle Integration Repository中发布支持的接口 ...
- pl/sql中误删表中数据并提交恢复办法
最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_tim ...
- 在PL/SQL中如何让程序暂停几秒钟
在编写PL/SQL中,有时需要程序中暂停几秒钟再继续执行,查了一下,oracle内置有这个功能dbms_lock.sleep(10):不过dbms_lock包需要用户自己安装,演示如下: C:\Doc ...
- 问题:PLS-00204: 函数或伪列 'EXISTS' 只能在 SQL 语句中使用;结果:PL/SQL中不能用exists函数?
怎么写了一个语句带出这样的结果. 语句: if exists (select * from sysdatabases where name='omni') then 结果: ERROR 位于第 4 行 ...
- PL/sql中如何声明变量,常量,控制语句及for,loop,while和顺序控制的使用
pl/sql 什么是PL/SQL PL/SQL是结合oracle过程语言和机构化查询运行(SQL) 的一种扩展语言.使用PL/SQL可以编写具有很多高级功能的程序,有以下优点 PL/SOL可以采用过程 ...
随机推荐
- POJ 1990 MooFest(树状数组)
MooFest Time Limit: 1000MS Mem ...
- Qt之QComboBox(基本应用、代理设置)(转)
QComboBox下拉列表比较常用,用户可以通过选择不同的选项来实现不同的操作,如何实现自己的下拉列表呢? 很多人在问QComboBox如何设置选项的高度.代理等一些问题!今天就在此分享一下自己的一些 ...
- latch: cache buffers chains故障处理总结(转载)
一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓.急匆匆的赶到现场发现进行了基本的检查后发现是latch: cache buffers chains 作祟,处理过程还算顺利,当 ...
- Java注释Override、Deprecated、SuppressWarnings详解(过时方法,即将删除的方法或成员变量)
Override 这个注释的作用是标识某一个方法是否覆盖了它的父类的方法.那么为什么要标识呢?让我们来看看如果不用Override标识会发生什么事情. Deprecated 这个注释是一个标记注释.所 ...
- [zz] be similar with和be similar to的区别
http://wenda.tianya.cn/question/4cb13da080ee34c9 be similar to后边既可以加物主代词又可以加人,即:be similar to sth/sb ...
- 正常月报表年初未分配利润修改backup
原来:GLQC('3132',K('年')-1,'12',,,'本币','N','','本币','0001')+GLQC('314115',K('年')-1,'01',,,'本币','N','','本 ...
- Hadoop学习14--Hadoop之一点点理解yarn
yarn是一个分布式的资源管理系统. 它诞生的原因是原来的MapReduce框架的一些不足: 1.JobTracker单点故障隐患 2.JobTracker承担的任务太多,维护Job状态,Job的ta ...
- 黄聪:PHP页面跳转如何实现延时跳转
php在用header重定向的时候,可以设置下延时跳转,代码如下: header("Refresh:5;url=index.php");
- 基于adt-bundle-windows-x86的android开发环境搭建
0,简介: 最近简单着手了解 android 开发.工欲善其事,必先利其器. 我本人不太喜欢使用java 开发,所以简单了解了下其 c# c++都可以进行android 开发,用c++的话要使用NDK ...
- jquery判断复选框checkbox是否被选中
jquery判断复选框checkbox是否被选中 使用is方法 //如果选中返回true //如果未选中返回false .is(':checked');