与MySQL相识的第二天
可以说这一天过的并不是很愉快,和MySQL的日子,进度慢的有点在我预料之外,有些操作,看着会,写的时候还是有点懵,明天有时间再温习温习。
Take control of your own desting. 今天看了CSDN1024节日直播,本来我是报名了的,但是个人原因,没有去现场(太远了,经济实力不允许),看到了下午国内10大数据库掌门人对话,我印象比较深刻的是:我们国内数据库的实力是相对还是比较落后的,但是我们也需要自信,国内的数据库是能够排进前三的。而再前一场的各位老总对话里面,我听到了中移老总对IT新人说的是,需要跨专业来学IT,跨的越大越好,我想了想,为什么?可能这就是一种思维的跨越?长期的IT人会有一种固定的思维,很难打破,我们需要一些“疯子”,来做一些常人不敢做的事,来打破这个看起来微妙的平衡?来乱世造英雄?不,我何难得知其中奥妙,但我的理解也已经写上面了。最后,虽然国内的IT界并不是拔尖的,但我相信我的祖国,再不久的将来一定会成为哪一个领头羊!
她的排序与分组
Give more than you planned to. 不积硅步,无以至千里,一步一个脚印才是我们最远的距离。
排序查询
- 语法:
select
要查询的东西
from
表
where
条件
order by 排序的字段|表达式|函数|别名 【asc | desc】 - 排序方式:
- ASC:升序,默认的
- DESC:降序
- 排序分类:
1.按单个字段进行排序
2.按多个字段排序
3.按表达式排序
4.按别名排序
5.按函数排序
- 注意:
- 如果有多个排序条件,则当之前的条件值一样时,才会判断第二条件
- 练习:将姓名中包含e字符的年薪和姓名显示出来,并且按年薪进行降序
USE `myemployees`;
SELECT salary*12*(1+IFNULL(`commission_pct`,0)) AS 年薪,CONCAT(last_name,first_name) AS 姓名
FROM `employees`
ORDER BY 年薪 DESC;
常见的函数
-
1、字符函数
- concat: 拼接
- substr: 截取子串
- upper: 转换成大写
- lower: 转换成小写
- trim: 去前后指定的空格和字符
- ltrim: 去左边空格
- rtrim: 去右边空格
- replace: 替换
- lpad: 左填充
- rpad: 右填充
- instr: 返回子串第一次出现的索引
- length: 获取字节个数
-
2、数学函数
- round: 四舍五入
- rand: 随机数
- floor: 向下取整
- ceil: 向上取整
- mod: 取余
- truncate: 截断
-
3、日期函数
- now: 当前系统日期+时间
- curdate: 当前系统日期
- curtime: 当前系统时间
- str_to_date: 将字符转换成日期
- date_format: 将日期转换成字符
-
4、流程控制函数
- if 处理双分支
- case语句 处理多分支
- 情况1:处理等值判断
- 情况2:处理条件判断
-
5、其他函数
- version: 版本
- database: 当前库
- user: 当前连接用户
分组函数
- count:计算个数
- 一般选择非空的列:主键
- count(*)
- max:计算最大值
- min:计算最小值
- sum:计算和
- avg:计算平均值
- 特点:
1、以上五个分组函数都忽略null值,除了 count()
2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
3、都可以搭配distinct使用,用于统计去重后的结果
4、count的参数可以支持:- 字段
- 常量值,一般放1
- 注意:聚合函数的计算,排除null值。
解决方案:- 选择不包含非空的列进行计算
- IFNULL函数
- 练习一: 查询公司员工工资的最大值,最小值,平均值,总和
SELECT MAX(salary) max_sal,MIN(salary) min_sal,AVG(salary) ag_sal,SUM(salary) sum_sal
FROM employees;
- 练习二: 查询员工表中最大入职时间与最小入职时间相差的天数
SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) AS 相差天数
FROM employees;
分组查询
- 语法:
select 查询的字段,分组函数
from 表
group by 分组的字段 - 特点:
1、可以按单个字段分组
2、和分组函数一同查询的字段最好是分组后的字段
3、可以按多个字段分组,字段之间用逗号隔开
4、可以支持排序
5、having后可以支持别名 - 面试相关
- where 和 having 的区别?
- where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不 满足结果,则不会被查询出来
- where 后不可以跟聚合函数,having可以进行聚合函数的判断。
- where 和 having 的区别?
- 练习: 选择具有各个job_id的员工人数
SELECT COUNT(*) 个数,job_id
FROM employees
GROUP BY job_id;
明天就要开始和她牵手了,哈哈笛卡尔积——多表查询,我来了!