SQL语言进阶

1.isnull
给空值设定新值。
如:

select isnull(Fname,'佚名') as 姓名
from T_Employee;

Fname为列名,如果Fname不为空值,则显示原本的值,为空值则改为’佚名’。

所以总结: isnull(expression,value):如果列名不为空则返回列名,否则返回value。

2.case函数,重点
先给出单指判断的模板:

case expression
when value1 then returnvalue1
when value2 then returnvalue2
when value3 then returnvalue3
....
else defalutreturnvalue --默认返回值
end

给出一个表:
这里写图片描述

select FName,(case Flevel
             when 1 then 'VIP客户'
             when 2 then '高级客户'
             when 3 then '普通客户'
             else '客户类型错误'
             end) 
             as FlevelName
from T_Customer;

会输出:
这里写图片描述

也可以用范围来替换值

select FName,(case 
              when FSalary < 2000 then  '低收入'
              when FSalary >= 2000 and FSalary <= 5000 then  '中等收入'
              else  '高收入'
              end) as 收入水平
from T_Employee

所以。在用范围来替换值时,case一行后不加要查询的列名。

3.查询空值
MySQL中查询空值:
1.select * from table where 列名 = '' –适用于没有值时使用
2.select * from table where 列名 is null –适用于查询默认空值
3.select * from table where 列名 = 'NULL' –适用于列中填的就是NULL

4.join
left join 和 right join:
以左(右)表为准,右(左)表数据匹配,有匹配数据则获取数据,如果左(右)表有的数据右(左)表没有,则以NULL填充,如果右(左)表有的数据左(右)表没有,则过滤数据。

inner join
只会返回两个表都有部分,否则过滤

5.注意事项
进行delete,update,drop操作前一定要注意先备份表,避免操作失误而无法恢复

6.一些常用函数
abs():求绝对值
ceiling():舍入到最大整数 3.33 —> 4 -3.61 —> -3
floor():舍入到最小整数 3.33 —> 3 -.361 —> -4
round():四舍五入
round(value,num):保留几位小数 如:round(3.1415926,2) —> 3.14
len():计算字符串长度
lower(), upper():将传入的值或列转为小写,大写
getdate():返回当前日期时间

dateadd(datepart,number,date):计算增加值后的日期。
datepart为计量单位,如Month,year,day
number为增加或减少的数量
date为要计算的基础时间
如:
dateadd(month,-8,date)

datediff(datepart,startdate,enddate):计算两个日期之间的差额。
datepart(datepart,date):返回一个日期的特定部分(年,月….)
如用datediff和getdate来计算员工的工龄。

select FName,FInDate,datediff(year,FInDate,getdate())
from T_Empolyee

7.类型转换函数
cast(expression as data_type)
convert(data_type,expreession)
举例说明:

select cast('123' as int),cast('2008-08-08' as datetime),
convert(datetime,'2009-09-09'),convert(varchar(50),123)

合理运用类型转换函数,作用就是避免出现数据类型不符合我们计算的情况。
比如:
select datepart(year,cast('2008-08-08' as datetime))
select convert(int,'123') + 1

8.Union
union用来合并两个查询结果集,并且将其中完全重复的数据合并为一条。
另:union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复行,那么就用union all。
举个例子:

select FNumber,FSalary
from T_Employee
union
select '工资合计',sum(FSalary)
from T_Employee
select '正式员工最高年龄',max(FAge)
from T_Employee
union all
select '正式员工最低年龄',min(FAge)
from T_Employee
union all
select '临时工最高年龄',max(FAge)
from T_TempEmployee
union all
select '临时工最低年龄',min(FAge)
from T_TempEmployee

这样能够有效避免出现年龄一样而合并的情况。

9.MySQL中的拼接操作补充
在基础篇说过Sql Server中的拼接操作。
select 列名 + ' ( ' + 列名 + ' ) '

在MySQL中的拼接操作则需要用到concat函数

select concat (vend_name,'(',列名,')')
from 表名
order by vend_name;

则会输出
vend_name(列名)
vend_name(列名)
……

当然拼接操作则少不了去掉空格的操作。

select concat(rtrim(vend_name),'(',rtrim(列名),')')

10.not in 与 in 的区别
not in不会自动忽略空值,in会忽略空值。
如果后面的数据集里面有空值,则输出结果为空集,所以我们需要剔除null。
则可以在子查询中加上where 列名 is not null。

select *
from 表名
where 列名 not in (select 列名
                  from 表名
                  where 列名 is not null);

到这儿SQL语言的大部分操作就差不多更完了。后面再开始慢慢更统计学和python吧,争取每天写几点(●’◡’●)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 1.3 SQL 管理工具介绍     1.3.1 SQL server配置管理器     1.3.2 SQL server网络配置     1.3.3 连接SQL server服务器     1.3.4 服务器属性配置     1.3.5 命令行下的SQL管理工具     2 设计与管理数据库和对象     2.1 SQL Server 数据库存储结构     2.1.1 数据库分类     2.1.2 数据库文件组成     2.1.3 数据库文件存储机制     2.1.4 事务日志工作机制     2.2 数据库设计规划     2.2.1 Raid技术介绍     2.2.2 文件的增长与收缩     2.2.3 使用文件组规划数据储存     3 设计实现数据库灾难备份和恢复     3.1 数据库备份     3.1.1 规划数据库备份策略     3.1.2 数据库完整备份     3.1.3 数据库差异备份     3.1.4 数据库日志备份     3.1.5 压缩备份     3.1.6 使用高级备份选项     3.1.7 利用维护计划行备份     3.2 数据库还原     3.2.1 数据库还原概述     3.2.2 恢复数据库到时间点     3.2.3 数据库快照概述     3.2.4 实现数据库快照     3.2.5 重建系统数据库     3.2.6 恢复系统数据库     4 高可用性解决方案     4.1 故障转移群集     4.1.1 高可用技术介绍     4.1.2 故障转移群集原理     4.1.3 故障转移群集分类及特点     4.1.4 部署故障转移群集     4.1.5 往群集中添加SQL实例     4.1.6 群集灾难场景     4.2 数据库镜像     4.2.1 数据库镜像基本原理     4.2.2 部署数据库镜像     4.2.3 数据库镜像管理及特点     4.3 日志传送     4.3.1 日志传送基本原理     4.3.2 部署日志传送     4.4 数据库复制     4.4.1 数据库复制基本原理     4.4.2 部署分发服务器     4.4.3 部署发布服务器     4.4.4 部署订阅服务器     4.5 Always on     4.5.1 Always on基本概述     4.5.2 Always on系统架构     4.5.3 Alwayson群集环境搭建     4.5.4 配置Always on可用性组     4.5.5 管理Always on     5 设计和实现数据库安全     5.1 it系统安全设计概述     5.2 SQL server的安全架构     5.2.1 登录名和身份验证模式     5.2.2 服务器角色     5.2.3 数据库用户     5.2.4 数据库角色   6 数据库自动化与高级管理     6.1 实现自动化的数据库管理     6.1.1 自动化管理组件介绍     6.1.2 自动化基本配置     6.1.3 数据库警报     6.2 多服务器脚本执行和管理     6.2.1 多服务器脚本执行     6.2.2 基于策略的管理     6.3 SQL server性能监视     6.3.1 数据收集器     6.3.2 SQL profiler     6.4 数据压缩     6.5 资源调控器     6.5.1 资源调控器概述     6.5.2 配置资源调控器     6.6 内存优化表     6.6.1 内存优化表概述     6.6.2 实现内存优化表     6.7 列存储索引     7 SQL server2019新特性     7.1 Temporal Table(历史表)     7.1.1 历史表介绍     7.1.2 历史表配置及数据追溯 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值