MYSQL学习笔记(二)

数据处理函数

单行处理函数

lower 转换小写
upper 转换大写
substr 取子串(substr(被截取的字符串,起始下标,截取长度))
trim 去空格
str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
round 四舍五入
rand() 生成随机数
ifnull 可以将null转换成一个具体值

注意:数据处理函数是该数据本身特有的,有些函数可能在其他数据可不起作用

将员工的名字转换成小写
在这里插入图片描述
截取员工名字3-5的字符
在这里插入图片描述
查看员工名字字符长度
在这里插入图片描述
单行处理函数case when then else end函数
匹配工作岗位,当为MANAGER时,薪水上调10%,当为SANLESMAN时,薪水上调50%,其他岗位薪水不变
select job,ename,
(case job,
when ‘MANAGER’ then sal1.1
when ‘SANLESMAN’ then sal
1.5
else sal
end) as newsal from emp;

ifnull空值处理函数在这里插入图片描述1.MySQL中的日期作为查询条件时,可以使用字符串为其赋值,常用格式有三种:
1949-10-10
1949/10/10
19491010

2.输入的日期字符串格式与MySQL默认格式相同,MySQL默认日期格式:%y-%m-%d

错误执行:
在这里插入图片描述
正确写法:在这里插入图片描述
str_to_date函数总结:
1.日期是数据库本身的特色,也是数据库本身机制中的一个重要内容,
2.每一个数据库处理日期时采用的机制都不一样,都有自己的一套处理机制,所以在实际开发中将日期字段定义为DATE类型的情况很少;
3.如果使用日期类型,Java程序将不能使用,实际开发中,一般会使用“日期字符串”来表示日期;

date_format函数:将日期转换为特定格式字符串
在这里插入图片描述
结论:date_format 函数主要用在数据库查询操作中,实际工作中,客户需要日期以特定格式展示的时候,需要使用该函数

多行处理函数

sum 求和
avg 取平均
max 取最大值
min 取最小值
count 取得记录数

单行函数都是一行输入 对应一行输出
多行处理函数都是多行输入对应一行输出

注意:
1.分组函数自动忽略空值,不需要手动增加where条件排除空值;
2.分组函数不能直接使用在where关键字后面;

薪水求和
在这里插入图片描述
平均薪水
在这里插入图片描述
最高和最低薪水
在这里插入图片描述
distinct去除重复记录
作用:将查询结果中某一字段的重复记录去除掉
用法:distinct字段名或distinct字段名1,字段名2…
注意:distinct只能出现所有字段最前面,后面如果有多个字段及为多字段联合去重
在这里插入图片描述
分组查询:group by
作用:通过哪个或哪些字段进行分组
用法:group by字段名称
在这里插入图片描述
在这里插入图片描述
having数据过滤必须和group by一起使用
在这里插入图片描述
一个完整的SQL语句如下:
select
from
where
group
having
order by
以上关键字的顺序不能改变,严格遵守

跨表查询
笛卡尔积现象
含义:若两张表进行查询的时候没有任何条件限制,最终的查询结果总是两张表记录的乘积,该现象称为笛卡尔积现象

查询员工名称和部门名称
跨表查询
年代分类:
SQL92: select ename,dname from emp as e,dept as d where e.deptno = d.deptno;
SQL99: select e.name,d.name from emp e join dept d on e.deptno = d.deptno;
内连接:省略了一个关键字:inner
等值连接:select e.name,d.name from emp e inner join dept d on e.deptno = d.deptno;
非等值连接:
查询出员工薪水所对应的薪水等级
select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
自连接:
查询出员工所对应的领导名称:显示员工名称和领导名称
select a.ename,b.ename as leadername from emp a join emp b on a.mgr = b.empno;
外连接:
定义:A表和B表能够完全匹配的记录查询出来之外,将其中一张表的记录无条件的完善查询出来,对方表没有匹配的记录时,会自动模拟出null值与之匹配;

注意:外连接的查询结果条数>=内连接的查询结果条数

右外连接/右连接:省略了一个关键字outer
select e.ename,d.dname from emp e right join dept d on e.deptno = d.deptno;
左外连接/左连接
select a.ename,b.ename as leadername from emp a left outer join emp b on a.mgr = b.empno;

子查询
定义:select语句嵌套select语句称为子查询
找出薪水比公司平均薪水高的员工,要求显示员工名和薪水在这里插入图片描述
找出每个部门的平均薪水,并且要求显示平均薪水等级
第一步:先求出每个部门的平均薪水
select e.deptno,avg(e.sal) as avgsal from emp e group by e.deptno;
将以上查询结果当成临时表t【deptno,avgsal】
±-------±------------+
| deptno | avgsal |
±-------±------------+
| 10 | 3150.000000 |
| 20 | 2220.833333 |
| 30 | 1566.666667 |
±-------±------------+
salgrade s
±------±------±------+
| GRADE | LOSAL | HISAL |
±------±------±------+
| 1 | 700 | 1200 |
| 2 | 1201 | 1400 |
| 3 | 1401 | 2000 |
| 4 | 2001 | 3000 |
| 5 | 3001 | 9999 |
±------±------±------+
select t.avgsal,s.grade
from (select e.deptno,avg(e.sal) as avgsal from emp e group by e.deptno) t
join salgrade s
on t.avgsal between s.losal and s.hisal;
在这里插入图片描述
UNION合并(相加)集合
查询出工作岗位为manger和salesman的员工
select ename,job from emp where job = ‘MANAGER’
union
select ename,job from emp where job = ‘SALESMAN’;

limit使用
作用:(只在MYSQL中起作用)获取一张表前几条或中间某几行数据
用法:limit起始下标m,长度n
limit实现分页:
页码:pageNo pageSize:3
第1页:1,2, 3 limit 0, 3
第2页:4, 5,6 limit 3,3
第3页:7, 8,9 limit 6, 3
limit(pageNo-1)*pageSize,pageSize

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值