数据库是每一个IT工程师必备的技能树,而select往往是使用频率最大的,总结并补充之前有关于select查询的补充

本文要点:
1.sql的执行顺序
2.select+case…when…then…end 语句
3.select top语句
4.where条件查询
5.sql函数大全

1.sql的执行顺序

下面展示一张sql的执行图:

这里我们可以理解为:先执行from语句,获取表---->然后在使用where过滤掉不相关的记录---->再执行聚合函数或者group by分组---->紧接着执行having进行二次过滤---->最后执行sql的select语句

2.Select+case…when…then…end 语句

case…when…then语句,相当于编程语言中if判断(important)

  • 例1:根据IsUser字段查询学生是否在线
    1
    2
    3
    4
    5
    select a.StudentID,
    (case a.IsUse
    when '0' then '未在线'
    when '1' then '在线' else '未上传' end) as 在线情况
    from StudentBindPaperTypeEntity as a

3.select top语句

TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句(top仅适用于sql server)。

1
2
3
4
5
-- 例1.取出表中第几行数据(如第一行)
select top 1 * from TABLE_NAME

--例2.取出表中百分之多少数据
select top 50 percent * from TABLE_NAME

oracle语法:rownum

1
2
3
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number

mysql语法:limit

1
2
3
SELECT column_name(s)
FROM table_name
LIMIT number

4.where条件查询

特别注意:关于存在多个查询条件时的一个大坑,2020-3-23就是被这个大坑花了很多时间
关于SQL的where子句中包含多个and和or是计算顺序问题,SQL在处理操作时会优先处理 and 操作,这就是很多人会得到很多错误的原因,要多使用小括号,以免产生歧义

1
where corg_code = '199' and (period between '201801' and '201803' or  period BETWEEN '201901' and '201903')

执行顺序:

1
2
3
4
5
6
7
8
9
10
11
12
13
select  一般在的后面的内容都是要查询的字段

from 要查询到表

where

group by

having 分组后带有条件只能使用having

order by

limit 0,100 它必须放到最后面

5.sql函数大全

【常用经典SQL语句大全完整版–详解+实例】
【SQL函数大全及示例汇总】

补充:left(filed,numbers):字段从左边开始截取指定位数
geohash通过算法将1个定位的经度和纬度2个数值,转换成1个hash字符串。如果2个地方距离越近,那么他们的hash值的前缀越相同。然后通过数据库中like操作符 “ like wtw366%” 快速查找到附近的车。比如上海腾讯大厦的经纬度是: (31.1688749, 121.3975184),那么转换成geohash就是 wtw366ngz5qt,我们想找附近的车子,可以用:
left(filed,numbers):字段从左边开始截取指定位数

1
2
select * from cart where geohash like 'wtw366%' ;
select * from cart where LEFT(geohash, 6) = 'wtw366';

6.多字段的group by

group by表示为分组,一定要和聚合函数一起并用。但是在这里,我们不深思分组函数的基本用法,而是考虑sql对多个字段进行group by分组:

GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里,
GROUP BY X, Y意思是将所有具有相同X字段值进行分组后,再把Y字段值进行分组处理。

7. SQL中IS NOT NULL与 !=NULL的区别

平时经常会遇到这两种写法:IS NOT NULL与!=NULL。也经常会遇到数据库有符合条件!=NULL的数据,但是返回为空集合。实际上,是由于对二者使用区别理解不透彻。

默认情况下,推荐使用 IS NOT NULL去做条件判断,因为SQL默认情况下对WHERE XX!= Null的判断会永远返回0行,却不会提示语法错误
最后,我们再次声明:数据库默认情况下,做SQL条件查询比较时使用关键字“is null”和“is not null”

拓:对于字段非空判断,若为空则用某个值替换,不为空则不做变更

数据库 isnull()、nvl()、ifnull() 使用原理

  • SqlServer 插入字段值 为空 设置默认值:isnull(val_1,val_2) 当val_1为 null 的时候 返回 val_2的值

  • Oracle:nvl(val_1,val_2) 当val_1为 null 的时候 返回 val_2的值

  • MySql:ifnull(val_1,val_2) 当val_1为 null 的时候 返回 val_2的值

参考文章:


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议