SQL

单表查询

空值

NULL值不能参与运算,查询时只能通过is(或is not) NULL判断

coalesce函数:
coalesce(expression_1,expression_2,...) 取得一连串中第一个非NULL值,若所有都是NULL值则返回NULL值
coalesce(expression_1,expression_2) 若expression_1是NULL值则返回expression_2,否则保持不变

nullif函数:
nullif(expression_1,expression_2) 当expression_1等于expression_2时返回NULL值,否则返回expression_1

拼接列

+把各列拼在一起,例如select column_1+'的学号是'+column_2 from table_1

在select语句中使用条件逻辑

查询时按条件进行分类

1
2
3
4
5
6
select column_1,column_2,
(case
when 条件1 then 分类1
when 条件2 then 分类2
else 分类3
end) as column_3 from table_1

按条件分档次并统计各档次总数

1
2
3
4
5
6
7
select 档次, count(*) as 总数 from
(select (case
when 条件1 then 档次1
when 条件2 then 档次2
else 档次3
end) as 档次 from table_1)
group by 档次

查询结果排序

按多个字段排序

order by 升序列 asc, 降序列 desc
如果出现NULL值,SQL Server默认NULL值最小,即升序中排在最前,降序中排在最后

自定义条件排序

1
2
3
4
5
6
7
select column_1,column_2,
(case
when 条件1 then '1'
when 条件2 then '2'
when 条件3 then '3'
end) as num from table_1
order by num

多表查询

内连接

执行自连接时要用distinct去重,因为一个表和自身做笛卡尔积会出现重复的数据

AAABACAD
ABBBBCBD
ACBCCCCD
ADBDCDDD

外连接

left join 左表为主表,返回左表所有数据,右表中只返回与左表相匹配数据
right join同理

查询结果集合运算

`查询1 union 查询2`
`查询1 intersect 查询2`
`查询1 except 查询2`
`查询1 union all 查询2`

字符串函数

截取字符串

substring(字符串,开始位置,截取长度) 从开始位置截取一定长度的子字符串
left(字符串,截取长度) right(字符串,长度) 从左/右截取一定长度的子字符串

获取字符位置

patindex('%正则表达式%',expression_1) expression_1中满足正则表达式的开始位置
应用举例:
判断字段是纯字母 where patindex('%[^a-z]%',column_1)=0
判断字段是纯数字 where patindex('%[^0-9]%',column_1)=0
判断字段是纯汉字 暂不知道

获取字符串长度

len(字符串) 注:如果字符串后面有空格,也视为有效长度

删除空格

ltrim(字符串) 删除字符串前面的空格符
rtrim(字符串) 删除字符串后面的空格符

字符串替换

replace(expression_1,旧字符,新字符)

 

参考资料:
[1] Itzik Ben-Gan. (2009). Inside Microsoft SQL Server 2008: T-SQL Querying.
[2] 落落. (2018). Oracle查询优化改写技巧与案例2.0. 北京: 电子工业出版社.
[3] 徐桂祥. (2011). SQL案例解析:以SQL Server与Oracle为例. 北京: 清华大学出版社.
[4] 魏新年. (2015). SQL Server数据库基础与进阶. 北京: 清华大学出版社.

补充:Itzik Ben-Gan的博客:http://tsql.solidq.com

文章目录
  1. 1. 单表查询
    1. 1.0.1. 空值
    2. 1.0.2. 拼接列
    3. 1.0.3. 在select语句中使用条件逻辑
      1. 1.0.3.1. 查询时按条件进行分类
      2. 1.0.3.2. 按条件分档次并统计各档次总数
    4. 1.0.4. 查询结果排序
      1. 1.0.4.1. 按多个字段排序
      2. 1.0.4.2. 自定义条件排序
  • 2. 多表查询
    1. 2.0.1. 内连接
    2. 2.0.2. 外连接
  • 3. 查询结果集合运算
  • 4. 字符串函数
    1. 4.0.1. 截取字符串
    2. 4.0.2. 获取字符位置
    3. 4.0.3. 获取字符串长度
    4. 4.0.4. 删除空格
    5. 4.0.5. 字符串替换