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

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

时间: 2024-12-29 00:38:33

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

ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍

如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者其他. 1.创建序列 Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE 权限 CREATE SEQUENCE CUX_DEMO_SEQUENCEMINVALUE 1MAXVALUE 99999999999START WITH 1000

ORACLE PL/SQL 实例精解之第三章 PL/SQL中的SQL

3.1 在PL/SQL中使用DML 在PL/SQL语块中,两种变量赋值a. := 初始化.b. select into语法,PL/SQL语块的声明部分被声明的变量,后期可以使用选择语句进行赋值. 3.1.1变量初始化时使用select into语法 select A INTO V_A INSERT INTO xxx(表)( XA)values (V_A) 3.1.2 在pl/sql语句块中使用DML a.使用oracle序列 CURR b.获取和递增序列值 CURRVAL 返回序列的当前值 NE

在PL/SQL中使用日期类型

之前的文章介绍了在PL/SQL中使用字符串和数字了下.毫无疑问,字符串和数字很重要,但是可以确定的是没有哪个应用不依赖于日期的. 你需要记录事件的发生事件,人们的出生日期等等很多. 通常的使用方式是: 1)声明日期变量和常量 2)使用内建函数显示和修改日期值 3)执行日期相关计算 日期类型比字符串或数字更复杂.它有多个部分组成(年,月,日,时,分,秒等),而且关于一个有效的日期有很多规则. 本文将给你所有信息以便在PL/SQL程序中使用日期. 1.PL/SQL中的日期,时间戳和间隔(Interv

PL/SQL中如何让程序每隔几秒插入一条数据

在编写ORACLE PL/SQL中,如果需要程序执行中暂停几秒钟再继续执行,可以通过oracle内置的dbms_lock.sleep来实现,不过dbms_lock包需要用户自己安装. [[email protected] ~]# su - oracle [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon May 25 16:36:12 2015 Copyright (c

PL/SQL中的游标

游标 :是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL可以控制上下文区和处理语句时上下文区会发生些什么事情. 定义游标:就是定义一个游标名,以及与其相对应的SELECT 语句 ,     其    一般形式为:   CURSOR cursor_name IS  select_statement; 打开游标:就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合.OPEN cursor_name: 提取游标:就是检索结果集

PL/SQL(五)PL/SQL中动态执行SQL语句

在PL/SQL程序开发中,可以使用DML语句和事务控制语句,但是还有很多语句(比如DDL语句)不能直接在PL/SQL中执行.这些语句可以使用动态SQL来实现. PL/SQL块先编译然后再执行,动态SQL语句在编译时不能确定,只有在程序执行时把SQL语句作为字符串的形式由动态SQL命令来执行.在编译阶段SQL语句作为字符串存在,程序不会对字符串中的内容进行编译,在运行阶段再对字符串中的SQL语句进行编译和执行,动态SQL的语法是: 语法格式:动态SQL EXECUTE IMMEDIATE 动态语句

PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务

1.条件控制 A. IF条件分支语法: if (条件1) then 语句; elsif (条件2) then 语句; elsif (条件3) then 语句; else 语句; end if; B . case条件分支:等值比较.条件比较.case表达式 a.等值比较语法: CASE  条件判断 WHEN      条件值的表达式    THEN       要执行的条件操作     ; ……. [ELSE   ……..] END   CASE; b. 条件比较语法: CASE WHEN   不

pl/sql中误删表中数据并提交恢复办法

最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_timestamp('20150401','yyyymmdd'); 此原理是利用Flashback Query这一特性,最常被应用的就是修复误操作的数据了.注意,这并不是说Flashback Query能够恢复数据.Flashback Query本身不会恢复任何操作或修改,也不能告诉你做过什么操作或修改,

PL/SQL中自定义异常小知识

一.概念 用户定义的异常错误是通过显式使用 RAISE 语句来触发.当引发一个异常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理代码. 对于这类异常情况的处理,步骤如下 : 在PL/SQL 块的声明部分定义异常情况 :<异常情况>  EXCEPTION; RAISE <异常情况> 在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理. 二.程序 --例1:使用自定义异常变量 DECLARE   v_empno emp.empno%TYPE :=&