PL/SQL中SELECT总结

时间:2021-07-14 00:17:40
 

一、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);

PL/SQL中SELECT总结

注意这个顺序。

二、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在查询中用法举例

主要是最近项目遇到,很实用的一些功能,给大家分享:

有表如下:

PL/SQL中SELECT总结

(1)查询表中价格最大的药品记录

select distinct * from LAB_ITEM_DICT t where price in (select max(price) from lab_item_dict);

PL/SQL中SELECT总结

(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条语句,等价。

PL/SQL中SELECT总结

(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;

PL/SQL中SELECT总结

(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;

PL/SQL中SELECT总结

(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总结

暂时,想到常用的这么多~有空续。。。

PL/SQL中SELECT总结的更多相关文章

  1. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计&lpar;在PL&sol;SQL中使用SQL&rpar;

    在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT,  ROLLBACK, 和SA ...

  2. PL&sol;Sql 中创建、调试、调用存储过程

    存储过程的详细建立方法 1.先建存储过程 左边的浏览窗口选择 procedures ,会列出所有的存储过程,右击文件夹procedures单击菜单"new",弹出 template ...

  3. PL&sol;SQL中如何执行DDL、SCL&quest;

    PL/SQL程序中不能直接执行DDL语句.为什么? 假设我们在pl/sql程序中有这样的一条DDL语句—— drop table emp:在第一次解析pl/sql中的“drop table emp;” ...

  4. 在PL&sol;SQL中调用Oracle存储过程

    存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...

  5. 使用集成SOA网关的PL &sol; SQL中的REST

    使用集成SOA网关的PL / SQL中的REST Oracle电子商务套件集成SOA网关(ISG)是一款开箱即用的模块,支持在Oracle Integration Repository中发布支持的接口 ...

  6. pl&sol;sql中误删表中数据并提交恢复办法

    最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_tim ...

  7. 在PL&sol;SQL中如何让程序暂停几秒钟

    在编写PL/SQL中,有时需要程序中暂停几秒钟再继续执行,查了一下,oracle内置有这个功能dbms_lock.sleep(10):不过dbms_lock包需要用户自己安装,演示如下: C:\Doc ...

  8. 问题:PLS-00204&colon; 函数或伪列 &&num;39&semi;EXISTS&&num;39&semi; 只能在 SQL 语句中使用;结果:PL&sol;SQL中不能用exists函数?

    怎么写了一个语句带出这样的结果. 语句: if exists (select * from sysdatabases where name='omni') then 结果: ERROR 位于第 4 行 ...

  9. PL&sol;sql中如何声明变量&comma;常量&comma;控制语句及for&comma;loop&comma;while和顺序控制的使用

    pl/sql 什么是PL/SQL PL/SQL是结合oracle过程语言和机构化查询运行(SQL) 的一种扩展语言.使用PL/SQL可以编写具有很多高级功能的程序,有以下优点 PL/SOL可以采用过程 ...

随机推荐

  1. Open source packages on self-driving car

    Autoware https://github.com/CPFL/Autoware.git Open-source software for urban autonomous driving &quo ...

  2. vs多项目模板及add-in开发

    本文分2部分 第一为自定义多项目模板 第二为vs add-in开发 效果图 1.自定义模板 2. 工具菜单 3.窗口 4.工程 5.文件 ... 一. 多项目模板 单项目模板做起来很简单 选中一个项目 ...

  3. Mysql表操作

    查看表结构: 可以使用describe或show create table语句查看表的结构: describe表名; Show create table 表名; 修改表名: Alter table 旧 ...

  4. 自己动手实现简单的Vector

    看到今天,终于自己动手写了一个自己的vector,我这个版本的vector只有vector主要的一些操作,包括原版vector的所有构造函数,begin(),end(),size(),capacity ...

  5. ida idc函数列表全集

    下面是函数描述信息中的约定: 'ea' 线性地址 'success' 0表示函数失败:反之为1 'void'表示函数返回的是没有意义的值(总是0) AddBptEx AddBpt AddCodeXre ...

  6. MYSQL 磁盘临时表和文件排序

    因为Memory引擎不支持BOLB和TEXT类型,所以,如果查询使用了BLOB或TEXT列并且需要使用隐式临时表,将不得不使用MyISAM磁盘临时表,即使只有几行数据也是如此. 这会导致严重的性能开销 ...

  7. C语言中main函数的參数具体解释

    main函数的定义形式         main函数能够不带參数,也能够带參数,这个參数能够觉得是 main函数的形式參数.C语言规定main函数的參数仅仅能有两个,习惯上这两个參数写为argc和ar ...

  8. SpringMVC&lpar;三&rpar;:&commat;RequestMapping中的URL中设定通配符,可以使用&commat;PathVariable映射URL绑定的占位符

    1)带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程中具有里程碑的意义. 2)通过@PathVariable可以将URL中占位符参数绑定到控制器处理 ...

  9. springBoot整合多数据源

    springBoot整合相关 1:springBoot整合多数据源: 应用场景:     项目需要同时连接两个不同的数据库A, B,并且它们都为主从架构,一台写库,多台读库. 工具/版本: jdk1. ...

  10. Linux内核分析— —扒开系统调用的三层皮(上)

    实验部分 根据系统调用表,选取一个系统调用.我选得是mkdir这个系统调用,其系统调用号为39,即0x27 由于mkdir函数的原型为int mkdir (const char *filename, ...