欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql笔记(三)常用系统函数

程序员文章站 2021-11-28 11:23:32
...

这是我在学习Mysql之路上做的笔记,今天将它粘出来。这一篇主要是Mysql常用系统函数。有错误的欢迎大家指出。。。

数据库的创建参考我的另一篇博客 https://blog.****.net/****luolei/article/details/83409945

#常用函数

#字符串函数

#字符串连接CONCAT

SELECT CONCAT(empno,ename,job) FROM tb_emp;

#转大小写UPPER,LOWER

SELECT ename,UPPER(ename) FROM tb_emp;

SELECT ename,LOWER(ename) FROM tb_emp;

#字符串长度

SELECT LENGTH("luo");

#截取字符串,是从1开始的计数

SELECT SUBSTR('luolei',2,4);

SELECT SUBSTR('luolei',4);

#返回当前时间

SELECT NOW();

#查询入职时间是2018年8月的

SELECT *FROM tb_emp WHERE YEAR(hiredate)='2018' AND MONTH(hiredate)='8';

#插入日期

INSERT INTO tb_emp (empno,ename,job,mgr,hiredate,sal,dept_id)

VALUES('7112','Clark','开发工程师','7103','2018-06-21','1600',40);

INSERT INTO tb_emp (empno,ename,job,mgr,hiredate,sal,dept_id)

VALUES('7113','Clark','开发工程师','7103',NOW(),'1600',40);

#逻辑函数

#函数case when then end

SELECT ename,sal,
CASE
WHEN comm IS NULL THEN 100
ELSE comm
END AS '奖金'
FROM tb_emp;

#IFNULL(expr1,expr2),不为空取第1个

SELECT
   comm,
   IFNULL(comm, 50)
FROM
   tb_emp;

#IF(expr1,expr2,expr3),不为空取第2个,为空第3个

SELECT
    comm,
    IF (comm, comm + 50, 50)
FROM
    tb_emp;

#常用聚合函数

#聚合函数是一对值进行运算,返回一个数,也叫组合函数

SELECT
  dept_id,
  AVG(sal),
  SUM(sal),
  SUM(comm),
  MAX(sal),
  MIN(sal)
FROM
  tb_emp
GROUP BY
  dept_id;

#COUNT不统计NULL值

SELECT COUNT(*) FROM tb_emp;

#将有奖金的人数统计出来了,不统计NULL值

SELECT COUNT(comm) FROM tb_emp;

#统计共有几种职位

SELECT COUNT(DISTINCT job) FROM tb_emp;

#AVG不统计NULL值

#假如10个人只有4个人有奖金就是 4个人奖金数/4的结果

SELECT AVG(comm) FROM tb_emp;

SELECT AVG(IFNULL(comm,0)) FROM tb_emp;

#分组

#group by分组作用是与各聚合函数配合使用,他用来对查询出来的数据进行分组

#分组规则:查询的字段要么出现在"组合函数",要么出现在"group by子句"中

#查询每个部门的平均工资

SELECT
    dept_id AS '部门编号',
    AVG(sal) AS '平均工资'
FROM
    tb_emp
GROUP BY
    dept_id;

#ORDER BY 排序(默认ASC升序,DESC降序)

SELECT
    sal
FROM
    tb_emp
ORDER BY
    sal ASC;

#分组后限定查询结果HAVING

#1、WHERE和HAVING都是限定查询,可以同时用,

#2、WHERE在group by 之前,HAVING只能用在GROUP BY后对分组后进行查询

#3、where后的条件表达式里不允许使用聚合函数,而having可以

#4、where 是对数据集进行筛选,group by 是对结果集进行聚集

#查询平均工资大于2000的部门编号,并降序显示

SELECT
    dept_id AS '部门编号',
    AVG(sal) AS '平均工资'
FROM
    tb_emp
#WHERE AVG(sal)>2000;
GROUP BY 
    dept_id
HAVING
    AVG(sal) > 2000
ORDER BY
    AVG(sal) DESC;

#查询平均工资大于2000的部门名称

SELECT dname FROM tb_dept WHERE deptno IN (
SELECT
    dept_id
FROM
    tb_emp
GROUP BY
    dept_id
HAVING AVG(sal)>2000);

#LIMIT指定查询几条数据,常用来分页

SELECT *FROM tb_emp LIMIT 5;

#第2条开始,显示3条

SELECT *FROM tb_emp LIMIT 2,3;

#查询平均工资最高的部门名称

SELECT dname FROM tb_dept WHERE deptno =(
SELECT
    dept_id
FROM
    tb_emp
GROUP BY
    dept_id
ORDER BY AVG(sal) DESC
LIMIT 1
);

#select基本语法顺序

SELECT [* | column|MAX(column)]

FROM tbname

[JOIN ON]

[WHERE]

[GROUP BY]

[HAVING]

[ORDER BY]

[LIMIT]

 

-- 获取当前系统日期时间:

SELECT SYSDATE() AS 系统日期时间;

-- 获取当前系统年月日:

SELECT CURRENT_DATE AS 年月日;

-- 分别获取时间

SELECT

       SYSDATE(),

       YEAR (CURRENT_DATE) AS 年,

       MONTH (CURRENT_DATE) AS 月,

       DAY (CURRENT_DATE) AS 日,

       TIME(SYSDATE()) AS 系统时间,

       HOUR(SYSDATE()) AS 系统小时,

       MINUTE(SYSDATE()) AS 系统分钟,

       SECOND(SYSDATE()) AS 系统秒,

       MICROSECOND(SYSDATE()) AS 系统毫秒;



SELECT DATE_FORMAT(NOW(),'%Y')

SELECT DATE_FORMAT(NOW(),'%Y%m%d')

 

 

相关标签: Mysql