| Lower | 转换小写|
| --- | --- |
|upper| 转换大写|
| substr| 取子串(**substr(被截取的字符串,起始下标,截取的长度)**|
| length|取长度|
|trim| 去空格|
|str_to_date| 将字符串转换成日期|
|date_format|格式化日期|
|format| 设置千分位|
|round|四舍五入|
|rand()|生成随机数|
|Ifnull|可以将null转换成一个具体值 ifnull(字段名,替代的数据)例如 ifnull(comm,0)|
|to_days(日期值)|获取这个日期至到0000-01-01 一共有多少天now() 获取当前的系统时间 |
注:数据处理函数是该数据本身特有的,有些函数可能在其它数据库不起作用;
## 1-2 lower函数:转换为小写
用法:lower(要转换字段名称)
查询员工姓名,将员工姓名全部转换成小写
select lower(ename) as ename from emp;
## 1-3 upper函数:转换为大写
用法:upper(要转换字段名称)
查询员工姓名,将员工姓名全部转换为大写
select upper(ename) as ename from emp;
## 1-4 substr函数:取子串
用法:substr(被截取字段名称,起启下标,截取长度)
查询员工姓名中第二个字母为A的所有员工
select ename from emp where substr(enam,2,1) = ‘A’;
>[danger] 联想知识点,模糊查询:
**select ename from emp where ename like ‘\_A%’;**
## 1-5 length函数:取字段长度
用法:length(字段名称)
取得员工姓名长度
select ename,length(ename) as nameLength from emp;
## 1-6 trim函数:去除首尾空格
作用:trim函数去除首尾空格,不会去除中间空格
用法:trim(字符串)
取得工作岗位为manager的所有员工
```
select * from emp where job = trim('manager ');
```
## 1-7 round函数:四舍五入
用法:round(要四舍五入的数字,四舍五入到哪一位),默认保留整数位
保留整数位或不保留小数位:select round(125.18);或者 select round(125.18,0);
## 1-8 rand函数:生成随机数
用法:rand()
生成一个0-1的随机数;
select rand();
生成一个0-100的随机数
select round(rand()*100);
## 1-9 ifnull函数:空值处理函数
用法:ifnull(字段名称,将要替换)
**结论:在数据库中,有****Null****参与数学运算的结果一定为****Null****;为了防止计算结果出现****Null****,建议先使用****ifnull****函数预先处理。**
查询员工姓名及补助,如果补助为Null设置为0;
select ename,ifnull(comm,0) from emp;
>[danger] 注意:查询员工薪水与补助的和
错误写法:select sal+comm from emp;
正确写法:select sal + ifnull(comm,0) from emp;
没有补助的员工,将每月补助100,求员工的年薪
select ename, (sal + ifnull(comm,100)) \* 12 yearsal from emp;
## 1-10 case…when…then…else…end
用法:匹配工作岗位,当为MANAGER时,薪水上调10%,当为SALESMAN时,薪水上调50%,其它岗位薪水不变
```
case job
when ‘MANAGER’ then sal * 1.1
when ‘SALESMAN’then sal * 1.5
else sal
end
```
注意:使用中DQL语句中;
案例:
匹配工作岗位,当为MANAGER时,薪水上调10%,当为SALESMAN时,薪水上调50%,其它岗位薪水不变
## 1-11 str_to_date函数:将字符串转换为日期
作用:将‘日期字符串’转换为‘日期类型’数据
执行结果:DATE类型
用法:str_to_date(‘日期字符串’,‘日期格式’)
MySQL日期格式:
%Y:代表4位的年份
%y:代表2位的年份
%m:代表月,格式(01 … … 12)
%c:代表月,格式(1 … … 12)
%d:代表日
%H:代表小时,格式(00 … … 23)
%h:代表小时,格式(01 … … 12)
%i:代表分种,格式(00 … … 59)
%r:代表 时间,格式为12 小时(hh:mm:ss \[AP\]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)
联想知识点:java中的日期格式
yyyy 年
MM 月
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒
案例:
查询出1981-12-03入职的员工
select ename,hiredate from emp where hiredate = ‘1981-12-03’
![](https://img.kancloud.cn/aa/ba/aabab5d42cd23846e48e32ee5232763a_689x147.png)
执行成功原因:
输入的日期字符串格式与MySQL默认日期格式相同,MySQL默认日期格式:%y-%m-%d
查询出02-20-1981入职的员工
select ename,hiredate from emp where hiredate = ’02-20-1981’;
![](https://img.kancloud.cn/1f/f9/1ff93a1a252b13f80f40b2e86946b333_687x59.png)
错误原因:‘02-20-1981’是一个字符串varchar类型,与DATE类型不匹配
纠正以上SQL语句的错误:
select ename,hiredate from emp where hiredate = str\_to\_date(’02-20-1981’,‘%m-%d-%Y’);
![](https://img.kancloud.cn/9a/0e/9a0e937c589262bda129ab1b3e649ac7_933x119.png)
总结:
日期是数据库本身的特色,也是数据库本身机制中的一个重要内容,所以仍需掌握;
每一个数据库处理日期时采用的机制都不一样,都有自己的一套处理机制,所以在实际开发中将日期字段定义为DATE类型的情况很少;
如果使用日期类型,java程序将不能通用。实际开发中,一般会使用“日期字符串”来表示日期;
## 1-12 data\_format函数:将日期转换为特定格式字符串
作用:将‘日期类型’转换为特定格式的‘日期字符串’类型
执行结果:字符串varchar类型(具有特定格式)
用法: date_format(日期类型数据,‘日期格式’)
MySQL日期格式:
%Y:代表4位的年份
%y:代表2位的年份
%m:代表月,格式(01 … … 12)
%c:代表月,格式(1 … … 12)
%d:代表日
%H:代表小时,格式(00 … … 23)
%h:代表小时,格式(01 … … 12)
%i:代表分种,格式(00 … … 59)
%r:代表 时间,格式为12 小时(hh:mm:ss \[AP\]M)
%T:代表 时间,格式为24 小时(hh:mm:ss)
%S:代表 秒,格式为(00……59)
%s:代表 秒,格式为(00……59)
案例:
查询员工的入职日期,以‘10-12-1980’的格式显示到窗口中;
![](https://img.kancloud.cn/fc/43/fc43a171809f045044da288aad6350a6_723x385.png)
查询员工的入职日期,以‘10/12/1980’的格式显示到窗口中;
![](https://img.kancloud.cn/44/a0/44a069039beed7cb17bc1ed4dad63bbe_722x380.png)
MySQL日期默认格式示例
以下两个DQL语句执行结果相同
第一种:hiredate自动转换成varchar类型,默认采用%Y-%m-%d格式
![](https://img.kancloud.cn/d3/18/d31886c17bd3a09ff7b5a2423911051b_388x381.png)
第二种:
![](https://img.kancloud.cn/8e/82/8e8296f34b6d066b8744dd164f5be023_751x377.png)
结论:data_format函数主要用在数据库查询操作中。实际工作中,客户需要日期以特定格式展示的时候,需要使用该函数
- 空白目录
- 1、数据库概述及数据准备
- 1.1、SQL概述
- 1.2、什么是数据库
- 1.3、MySql概述
- 1.4、MySql的安装
- 1.5、表
- 1.6、SQL的分类
- 1.7、导入演示数据
- 1.8、表结构描述
- 2、常用命令
- 2.1、查看msyql版本
- 2.2、创建数据库
- 2.3、查询当前使用的数据库
- 2.4、终止一条语句
- 2.5、退出mysql
- 3、查看“演示数据”的表结构
- 3.1、查看和指定现有的数据库
- 3.2、指定当前缺省数据库
- 3.3、查看当前使用的库
- 3.4、查看当前库中的表
- 3.5、查看其他库中的表
- 3.6、查看表的结构
- 3.7、查看表的创建语句
- 4、简单的查询
- 4.1、查询一个字段
- 4.2、查询多个字段
- 4.3、查询全部字段
- 4.4、计算员工的年薪
- 4.5、将查询出来的字段显示为中文
- 5、条件查询
- 5.1 概述
- 5.2 等号操作符
- 5.3不等号操作符
- 5.4 between … and …操作符
- 5.5 is null
- 5.6 and
- 5.7 or
- 5.8 表达式的优先级
- 5.9 in
- 5.10 not
- 5.11 like
- 6、排序数据
- 6.1、单一字段排序
- 6.2、手动指定排序顺序
- 6.3、多个字段排序
- 6.4、使用字段的位置来排序
- 7、分组函数/聚合函数/多行处理函数
- 7.1、count
- 7.2、sum
- 7.3、avg
- 7.4、max
- 7.5、min
- 7.6、组合聚合函数
- 7.7 函数总结(了解内容)
- 7.1数据处理函数(单行处理函数)
- 8、分组查询
- 8.1、group by
- 8.2、having
- 8.3、select语句总结
- 9、连接查询
- 9.1、SQL92语法
- 9.2、SQL99语法
- 10、子查询
- 10.1、在where语句中使用子查询,也就是在where语句中加入select语句
- 10.2、在from语句中使用子查询,可以将该子查询看做一张表
- 10.3、在select语句中使用子查询
- 11、union
- 11.1、union可以合并集合(相加)
- 12、limit 的使用
- 12.1、取得前5条数据
- 12.2、从第二条开始取两条数据
- 12.3、取得薪水最高的前5名
- 13、表
- 13.1、创建表
- 13.2、增加/删除/修改表结构
- 13.2.1、添加字段
- 13.2.2、修改字段
- 13.2.3、删除字段
- 13.3、添加、修改和删除
- 13.3.1、insert
- 13.3.2、update
- 13.3.3、delete
- 总结
- 13.4、创建表加入约束
- 13.4.1、非空约束,not null
- 13.4.2、唯一约束,unique
- 13.4.3、主键约束,primary key
- 13.4.4、外键约束,foreign key
- 13.4.5、级联更新与级联删除
- 13.4.5.1、on update cascade;
- 13.4.5.2、on delete cascade;
- 13.5、t_student和t_classes完整示例
- 14、存储引擎(了解)
- 14.1、存储引擎的使用
- 14.2、常用的存储引擎
- 14.2.1、MyISAM存储引擎
- 14.2.2、InnoDB存储引擎
- 14.2.3、MEMORY存储引擎
- 14.3、选择合适的存储引擎
- 15、事务
- 15.1、概述
- 15.2、事务的提交与回滚演示
- 15.3、自动提交模式
- 15.4、事务的隔离级别
- 15.4.1、隔离级别
- 15.4.2、四个隔离级别
- 15.4.3、隔离级别与一致性问题的关系
- 15.4.4、设置服务器缺省隔离级别
- 15.4.5、隔离级别的作用范围
- 15.4.6、查看隔离级别
- 15.4.7、并发事务与隔离级别示例
- 16、索引
- 16.1、索引原理
- 16.2、索引的应用
- 16.2.1、创建索引
- 16.2.2、查看索引
- 16.2.3、使用索引
- 16.2.4、删除索引
- 17、视图
- 17.1、什么是视图
- 17.2、创建视图
- 17.3、修改视图
- 17.4、删除视图
- 18、DBA命令(了解)
- 18.1、新建用户
- 18.2、授权
- 18.3、回收权限
- 18.4、导出导入
- 18.4.1、导出
- 18.4.1.1、导出整个数据库
- 18.4.1.2、导出指定库下的指定表
- 18.4.2、导入
- 19、数据库设计的三范式
- 19.1、第一范式
- 19.2、第二范式
- 19.3、第三范式
- 19.4、三范式总结
- 作业
- 1、取得每个部门最高薪水的人员名称
- 2、哪些人的薪水在部门的平均薪水之上
- 3、取得部门中(所有人的)平均的薪水等级
- 4、不准用组函数(Max),取得最高薪水
- 5、取得平均薪水最高的部门的部门编号
- 6、取得平均薪水最高的部门的部门名称
- 7、求平均薪水的等级最低的部门的部门名称
- 8、取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的领导人姓名
- 9、取得薪水最高的前五名员工
- 10、取得薪水最高的第六到第十名员工
- 11、取得最后入职的5名员工
- 12、取得每个薪水等级有多少员工
- 13、面试题
- 14、列出所有员工及领导的姓名
- 15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
- 16、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门.
- 17、列出至少有5个员工的所有部门
- 18、列出薪金比"SMITH"多的所有员工信息.
- 19、列出所有"CLERK"(办事员)的姓名及其部门名称,部门的人数.
- 20、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数.
- 21、列出在部门"SALES"<销售部>工作的员工的姓名,假定不知道销售部的部门编号.
- 22、列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,雇员的工资等级.
- 23、列出与"SCOTT"从事相同工作的所有员工及部门名称.
- 24、列出薪金等于部门30中员工的薪金的其他员工的姓名和薪金.
- 25、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金.部门名称.
- 26、列出在每个部门工作的员工数量,平均工资和平均服务期限.
- 27、列出所有员工的姓名、部门名称和工资。
- 28、列出所有部门的详细信息和人数
- 29、列出各种工作的最低工资及从事此工作的雇员姓名
- 30、列出各个部门的MANAGER(领导)的最低薪金
- 31、列出所有员工的年工资,按年薪从低到高排序
- 32、求出员工领导的薪水超过3000的员工名称与领导名称
- 33、求出部门名称中,带'S'字符的部门员工的工资合计、部门人数.
- 34、给任职日期超过30年的员工加薪10%.
- 教务管理系统(项目)