程序笔记   发布时间:2022-07-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cgb2109-day03大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

文章目录

    • 一,MySQL数据的备份
      • --1,用工具直接备份就行
      • --2,练习
    • 二,条件查询
      • --1,null
      • --2,between and
      • --3,limit分页
      • --4,order by
      • --5,统计案例
    • 三,聚合函数
      • --1,概述
      • --2,测试
    • 四,分组
      • --1,group by
      • --2,having
    • 五,事务
      • --1,概述
      • --2,测试

一,MySQL数据的备份

–1,用工具直接备份就行

1,如果是SQL,直接ctrl s保存就行 2,也可以把表或者数据库一整个导出–右键–导出–以SQL转储文件…

–2,练习

#练习sql语句:
#练习1:查询部门地址在二区的部门名称
SELECT dname FROM dept WHERE loc='二区'
#练习2:查询部门地址在二区名字里有o的部门编号
SELECT deptno FROM dept WHERE 
loc='二区' AND dname LIKE '%o%'
#练习3:查询名字以l开头的员工岗位并去重
SELECT DISTinCT job FROM emp WHERE ename LIKE 'l%'
#练习4:查询15年到19年入职的员工姓名和岗位
SELECT ename,job FROM emp WHERE 
#year(hiredate)>=2015  and YEAR(hiredate)<=2019
hiredate>='2015-1-1' AND hiredate<='2019-12-31'
#练习5:查询副总的年薪
SELECT sal*12+IFNULL(comm,0)*12 FROM emp WHERE job='副总'

二,条件查询

–1,null

#1.null的数据用is /is not关键字来过滤
#练习1:查询没有奖金的员工信息
SELECT * FROM emp WHERE comm IS NULL
#练习2:查询有奖金的员工信息
SELECT * FROM emp WHERE comm IS NOT NULL

–2,between and

#练习3:查询工资5000~10000的员工信息
SELECT * FROM emp WHERE 
#sal>=5000 and sal<10000
sal betweeN 5000 AND 10000 #[5000,10000]
#练习4:查询2019年入职的员工姓名
SELECT ename FROM emp WHERE 
#hiredate between '2019-1-1' and '2019-12-31'
YEAR(hiredate)=2019

–3,limit分页

#练习5:展示前两条员工数据
SELECT * FROM emp LIMIT 2 #只取前n条
SELECT * FROM emp LIMIT 0,2 #从0+1的数据开始,总共展示2条
#练习6:查询岗位是员工的第一条记录
SELECT * FROM emp WHERE job='员工' LIMIT 0,1#limit通常放最后 

–4,order by

#4.order by排序,按照字典顺序排,默认是升序ASC
#练习7:按照工资排序
SELECT * FROM emp ORDER BY sal DESC #按数值降序
#练习8:按照名字排序
SELECT * FROM emp ORDER BY ename DESC #按字母降序
#练习9:按照岗位排序
SELECT * FROM emp ORDER BY job ASC #按汉字对应的编号升序
#练习10:查询15年到19年入职的员工信息只取前两条并按照工资升序排
SELECT * FROM emp WHERE 
YEAR(hiredate) betweeN 2015 AND 2019 #区间[2015,2019]
ORDER BY sal #排序,默认的升序
LIMIT 2 #分页,只取前两条,通常放最后

–5,统计案例

#统计需求
#练习1:统计每个员工的年薪
SELECT sal,comm,sal*16+IFNULL(comm,0)*16 FROM emp
#练习2:统计19年以前入职的员工信息
SELECT * FROM emp WHERE 
YEAR(hiredate)<2019

三,聚合函数

–1,概述

基础函数: upper lower length concat substr replace ifnull now()/date()/year()… 聚合函数: 把一个字段的值聚合起来,进行获取最大值,最小值,平均数,求和,求个数… max() min() sum() avg() count()

–2,测试

#聚合函数max min sum avg count
     #最大值     最小值   求和    求平均数  
SELECT @H_892_499@mAX(sal),@H_892_499@mIN(sal),SUM(sal),AVG(sal) FROM emp 
#求总记录数
SELECT COUNT(*) FROM emp#低效
SELECT COUNT(1) FROM emp#高效
SELECT COUNT(sal) FROM emp#了解,不推荐
SELECT COUNT(comm) FROM emp#按照字段统计时不统计null
#练习1:统计名字里包含a的总记录数
SELECT COUNT(1) FROM emp WHERE ename LIKE '%a%'
#练习2:统计19年入职的员工里的最高薪
SELECT @H_892_499@mAX(sal) FROM emp WHERE YEAR(hiredate)=2019
#练习3:统计2号部门的平均薪资
SELECT AVG(sal) FROM emp WHERE deptno=2
#练习4:统计2号部门一年的工资支出总数
SELECT SUM(sal)*12 FROM emp WHERE deptno=2

四,分组

把表里的所有数据 按照 合理的维度 分成不同的组

–1,group by

#分组:使用group by 
#练习1:统计每个部门的平均薪资
SELECT AVG(sal),deptno FROM emp 
GROUP BY deptno #按照部门分组
#练习2:统计每个部门的最高薪资
SELECT @H_892_499@mAX(sal),deptno FROM emp 
#口诀1:查询结果中出现了混合列,包括着聚合列和非聚合列,必须分组
GROUP BY deptno
#口诀2:通常按照非聚合列分组
#练习3:统计每年入职的总人数
SELECT YEAR(hiredate),COUNT(1) FROM emp 
GROUP BY YEAR(hiredate)
#练习4:统计每个岗位的平均薪资
SELECT AVG(sal),job FROM emp
GROUP BY job

–2,having

把分组后的数据还想继续过滤,使用group by的固定搭配having

#having
#练习5:统计每个岗位的平均薪资,而且只要>=10000的
SELECT AVG(sal) a,job FROM emp
#where AVG(sal)>=10000 
#注意:::where里不能用别名,也不能出现聚合函数
GROUP BY job  #按照非聚合列分组
HAVING a>=10000 #分组后的过滤,a是别名
#练习6:统计每年入职的人数,而且只要19年的
SELECT YEAR(hiredate) ,COUNT(1) FROM emp
WHERE YEAR(hiredate)=2019 
GROUP BY YEAR(hiredate) #分组
#having a=2019 #分组后的过滤
# where比having 高效,因为执行时机要早一些

五,事务

–1,概述

1,数据库事务用来保证 多个SQL 要么全成功,要么全失败.英文叫transaction. MySQL数据库会自动管理事务,Oracle数据库需要程序员管理事务. MySQL也允许程序员手动管理事务 2,事务的四大特征:ACID 原子性: 把多条SQL看做一个原子密不可分,要么全成功,要么全失败 一致性: 保证数据守恒,将来广泛的应用到分布式系统里 隔离性: MySQL数据库可以支持高并发,可能会有数据安全的隐患,也有复杂的隔离级别 持久性: 对数据库的操作增删改,有持久影响 3,隔离级别: read uncommitted读未提交:性能好,但是安全性差 read commited读已提交:是Oracle数据库默认的隔离级别,性能较差,但是安全性较好 repeatable read可重复读:是MySQL数据库默认的隔离级别,性能再差一点,但是安全性特别好 serializable串行化:性能非常差,但是安全性比较好 也可以查:SELECT @@tx_isolation;

–2,测试

窗口1:

@H_208_84@mysql> use  cgb210901; #使用数据库,准备往表里插入数
mysql> start transaction; #开启事务start transaction
mysql> insert into g values(null,'jack',20);#多条执行增删改的SQL
mysql> commit;#提交事务commit,不提交的话别人查不到的,没有持久影响

窗口2:

@H_208_84@mysql> use cgb210901;
mysql> SELEct * from g; #窗口1不执行commit,这里永远查不到的

大佬总结

以上是大佬教程为你收集整理的cgb2109-day03全部内容,希望文章能够帮你解决cgb2109-day03所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。