与MySQL相识的第二天

与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 的区别?
      1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不 满足结果,则不会被查询出来
      2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
  • 练习: 选择具有各个job_id的员工人数
SELECT COUNT(*) 个数,job_id
FROM employees
GROUP BY job_id;

明天就要开始和她牵手了,哈哈笛卡尔积——多表查询,我来了!

猜你喜欢

转载自blog.csdn.net/qq_43325476/article/details/120929073