PLSQL中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,使⽤游标将结果传递给宿主程序。sql中select是什么意思
以上就是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
暂时,想到常⽤的这么多~有空续。。。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论