分享

Oracle学习笔记系列(三)之SQL条件查询

 群先 2022-03-21

1、count

* 表示对满足条件的所有行统计,无论其是否重复或有空值(NULL);

count(1)是聚索引,count(1)在oracle 10g之前比count(*)查询效率高;

在查询数据量大的情况下,最好还是使用count(字段)。

count详解:

count(*)将返回表中所有存在的行的总数包括值为null的行,然而count(列名)将返回表中除null以外的所有行的总数。
distinct+ 列名得到的结果是除去值为null和重复数据后的结果。

2、分组group by

没有条件的分组函数;

有查询条件的分组函数,条件筛选可以是where,也可以是having。两者的不同是:having要是出现一定要跟在group by 函数的后面。

3、去重distinct

用来过滤多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不用他来返回不重复记录的所有值,其原因是distinct只有用二重循环来解决,而这样对于一个数据量非常大的网站来说,无疑是会影响到工作效率的。

4、排序order by

默认为升序(asc),若想降序在最后加上关键字desc。如果想多列排序的话,在多列之间加上',’逗号即可。

多个排序条件,会按照第一个排序条件为基准排序,当第一排序列的值相同时,会按照第二个排序条件进行排序。

5、函数

max() 最大值

min() 最小值

avg() 平均值

sum() 求和

截取

substr(c1,n1[,n2])  (多字节符(汉字、全角符等),按1个字符计算)

在字符表达式c1里,从n1开始取n2个字符;若不指定n2,则从第n1个字符直到结束的字串。

substrb(c1,n1[,n2])(多字节符(汉字、全角符等),按2个字符计算)

在字符表达式c1里,从n1开始取n2个字符;若不指定n2,则从第n1个字符直到结束的字串。

nvl()语法: nvl(expr1, expr2)

功能:若expr1为NULL,返回expr2;expr1不为NULL,返回expr1。注意:两者的类型要一致,例如下面的快处快赔标志为NULL,就替换成报案号。

6、sysdate系统时间

获取当前系统时间,包含时分秒。

to_char(日期,格式),可以转换成你想要的日期格式输出:select to_char(sysdate,'YYYY-MM-DD hh:mi:ss')as 日期 from dual。

7、联合查询union与union all

当需要将从两个表中查询的数据作为一个整体显示的时,需要用到union或者union all。需要注意的是两个表的查询结果列数以及相对应的数据类型一定要相同。union 可以去掉重复值,而union all就是显示出所有的值。

8、分页rownum

1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2, 依此类推,这个伪字段可以用于限制查询返回的总行数。

2、rownum不能以任何基表的名称作为前缀。

()中先求出prplclaim表中的多有数据并排序,然后再查询这个临时表中排序在你要查询的序号之间的数据即可。

9、关联查询

(1)多表查询:从多个有关联的表中查询数据,基本语法与单表查询类似。表之间用“,”分隔。

(2)嵌套查询:一个SELECT查询中包含一个以上的子查询,所谓子查询指嵌套在另一个SELECT、INSERT、UPDATE、或DELETE语句中的SELECT查询语句。

子查询的语法与SELECT语法类似,但有所限制,如子查询不能含有ORDER BY、COMPUT和INTO关键字等。

(3)左连接left join与右连接right join

左连接是以关键字left join左边的表为主,显示出左表的全部数据,然后右表有数据的关联出来,没有的显示为空。

右连接就是以关键字right join右边的表为主,显示出来右表的全部数据,然后左表有数据的关联出来,没有的显示为空

(+)表示以(+)所在位置的另外一侧为连接的方向,像下面的例子就等于是右连接,以student表为主,即:无论这个学生有没有分数,这个学生都会在查询结果中出现,如果没有相对应的分数就显示为空

 

(4)内连接inner join

内连接就是求出两个表的交集。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多