一、select 语句的各个关键词的顺序及作用简解(这个我简略点写~) 1.select 2.from 3.where 4.group by ---对结果集进行分组,通
一、select 语句的各个关键词的顺序及作用简解(这个我简略点写~)
1.select
2.from
3.where
4.group by ---对结果集进行分组,通常与聚合函数一起使用
5.having
6.order by
举个例子如下:
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 rownum5;
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 rownum5) and rownum5
或者:
select * from lab_item_dict where lnnvl(item_code in (select item_code from lab_item_dict where rownum5)) and rownum5;
(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 rownum5)and rownum5 order by price desc;
(5)查询另一张表中,就诊序号分别为‘1’和‘4’的两个病人日期最近的各前5条数据(这个是百度上面有人提问的一道淘宝网的面试题,类似的意思~)
order by visit_date desc ) where rownum5union allorder by visit_date desc ) where rownum5
暂时,想到常用的这么多~有空续。。。
请点击下面的“绿色通道”--“关注debuglzq”,共同交流进步~
相关阅读:
rlwrap - 解决linux下sqlplus退格、上翻键乱码问题
sqlplus spool 到动态日志文件名
oracle sqlplus提示符设置
通过设置sqlplus arraysize(行预取)加快sql返回速度