我是南城余!阿里云开发者平台专家博士证书获得者!
欢迎关注我的博客!一同成长!
一名从事运维开发的worker,记录分享学习。
专注于AI,运维开发,windows Linux 系统领域的分享!
函数分为单行函数和多行函数(聚合函数)
MySQL单行函数可以嵌套,聚合函数不可以嵌套!Oracle可以。
主要函数请参考上方PDF,非常全
函数一般写于select子句,或者where子句
/* 分支结构 */ -- 流程控制IF select last_name,salary,if(salary>6000,'高工资','低工资') '对比' from employees order by salary desc; -- 流程控制 case when then when then else end select last_name,salary,case when salary > 10000 then '大牛' when salary > 8000 then '中牛' when salary > 6000 then '小牛' else '牛' end '薪资对比' from employees order by salary desc; --也可以去掉else select last_name,salary,case when salary > 10000 then '大牛' when salary > 8000 then '中牛' when salary > 6000 then '小牛' end '薪资对比' from employees order by salary desc; --另外得一种情况 (case后面跟列名 when后面跟其条件,then后面跟符合条件的匹配结果) select last_name,salary,department_id,case department_id when 10 then salary * 1.5 when 20 then salary * 1.8 when 30 then salary * 2.6 else salary * 1.2 end '薪资对比' from employees order by salary desc; -- 数据库字段加密方式 关键字password,md5,sha不可逆操作 -- MySQL8.0已经弃用 select password('aaabbb') '加密' from DUAL select md5('aaabbb') '加密',sha('aaabbb') '加密' from DUAL --经典例题 -- 查询超过1000天的员工姓名以及入职时间 select * from employees select last_name, hire_date,if(DATEDIFF(CURDATE(), hire_date)>1000,DATEDIFF(CURDATE(), hire_date),null) from employees
--聚合函数作用于一组数据,并对一组数据返回一个值。 /*AVG() SUM() MAX() MIN() COUNT() GROUP BY +列名 可以使用GROUP BY子句将表中的数据分成若干组 */ SELECT department_id,AVG(salary) FROM employees WHERE department_id > 80 GROUP BY department_id WITH ROLLUP; --使用 WITH ROLLUP 关键字之后, --在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。 --当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的。 /*过滤分组:HAVING子句要求:(和where具有同等作用-过滤) 使用了聚合函数。 HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。 WHERE 子句中不能使用聚合函数 */
有关查询MySQL数据库信息的一些函数
SELECT的执行过程
--方式1: SELECT ...,....,... FROM ...,...,.... WHERE 多表的连接条件 AND 不包含组函数的过滤条件 GROUP BY ...,... HAVING 包含组函数的过滤条件 ORDER BY ... ASC/DESC LIMIT ...,... --方式2: SELECT ...,....,... FROM ... JOIN ... ON 多表的连接条件 JOIN ... ON ... WHERE 不包含组函数的过滤条件 AND/OR 不包含组函数的过滤条件 GROUP BY ...,... HAVING 包含组函数的过滤条件 ORDER BY ... ASC/DESC LIMIT ...,... /*#其中: #(1)from:从哪些表中筛选 #(2)on:关联多表查询时,去除笛卡尔积 #(3)where:从表中筛选的条件 #(4)group by:分组依据 #(5)having:在统计结果中再次筛选 #(6)order by:排序 #(7)limit:分页 */ --执行顺序 FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT