加载中...
加载中...
MySQL笔记(三)常用系统函数

MySQL笔记(三)常用系统函数 原创


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

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

#常用函数

#字符串函数

#字符串连接CONCAT

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

转大小写UPPER,LOWER

复制收展SQLSELECT ename,UPPER(ename) FROM tb_emp;

SELECT ename,LOWER(ename) FROM tb_emp;
  • 1
  • 2
  • 3

#字符串长度

SELECT LENGTH("luo");  

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

复制收展SQLSELECT SUBSTR('luolei',2,4);
SELECT SUBSTR('luolei',4);
  • 1
  • 2

#返回当前时间

SELECT NOW();  

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

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

#插入日期

  1. INSERT INTO tb_emp (empno,ename,job,mgr,hiredate,sal,dept_id)
  2. VALUES('7112','Clark','开发工程师','7103','2018-06-21','1600',40);
  3. INSERT INTO tb_emp (empno,ename,job,mgr,hiredate,sal,dept_id)
  4. VALUES('7113','Clark','开发工程师','7103',NOW(),'1600',40);

#逻辑函数

#函数case when then end

  1. SELECT ename,sal,
  2. CASE
  3. WHEN comm IS NULL THEN 100
  4. ELSE comm
  5. END AS '奖金'
  6. FROM tb_emp;

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

  1. SELECT
  2. comm,
  3.    IFNULL(comm, 50)
  4. FROM
  5. tb_emp;

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

  1. SELECT
  2. comm,
  3. IF (comm, comm + 50, 50)
  4. FROM
  5. tb_emp;

#常用聚合函数

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

  1. SELECT
  2.   dept_id,
  3.   AVG(sal),
  4.   SUM(sal),
  5.   SUM(comm),
  6. MAX(sal),
  7. MIN(sal)
  8. FROM
  9. tb_emp
  10. GROUP BY
  11. 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的结果

  1. SELECT AVG(comm) FROM tb_emp;
  2. SELECT AVG(IFNULL(comm,0)) FROM tb_emp;

#分组

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

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

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

  1. SELECT
  2. dept_id AS '部门编号',
  3. AVG(sal) AS '平均工资'
  4. FROM
  5. tb_emp
  6. GROUP BY
  7. dept_id;

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

  1. SELECT
  2. sal
  3. FROM
  4. tb_emp
  5. ORDER BY
  6. sal ASC;

#分组后限定查询结果HAVING

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

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

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

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

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

  1. SELECT
  2. dept_id AS '部门编号',
  3. AVG(sal) AS '平均工资'
  4. FROM
  5. tb_emp
  6. #WHERE AVG(sal)>2000;
  7. GROUP BY
  8. dept_id
  9. HAVING
  10. AVG(sal) > 2000
  11. ORDER BY
  12. AVG(sal) DESC;

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

  1. SELECT dname FROM tb_dept WHERE deptno IN (
  2. SELECT
  3. dept_id
  4. FROM
  5. tb_emp
  6. GROUP BY
  7. dept_id
  8. HAVING AVG(sal)>2000);

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

SELECT *FROM tb_emp LIMIT 5;

#第2条开始,显示3条

SELECT *FROM tb_emp LIMIT 2,3;

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

  1. SELECT dname FROM tb_dept WHERE deptno =(
  2. SELECT
  3. dept_id
  4. FROM
  5. tb_emp
  6. GROUP BY
  7. dept_id
  8. ORDER BY AVG(sal) DESC
  9. LIMIT 1
  10. );

#select基本语法顺序

SELECT [* | column|MAX(column)]

FROM tbname

[JOIN ON]

[WHERE]

[GROUP BY]

[HAVING]

[ORDER BY]

[LIMIT]

 

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

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

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

SELECT CURRENT_DATE AS 年月日;

-- 分别获取时间

  1. SELECT
  2.        SYSDATE(),
  3.        YEAR (CURRENT_DATE) AS 年,
  4.        MONTH (CURRENT_DATE) AS 月,
  5.        DAY (CURRENT_DATE) AS 日,
  6.        TIME(SYSDATE()) AS 系统时间,
  7.        HOUR(SYSDATE()) AS 系统小时,
  8.        MINUTE(SYSDATE()) AS 系统分钟,
  9.        SECOND(SYSDATE()) AS 系统秒,
  10.        MICROSECOND(SYSDATE()) AS 系统毫秒;
  11. SELECT DATE_FORMAT(NOW(),'%Y')
  12. SELECT DATE_FORMAT(NOW(),'%Y%m%d')

 CSDN连接 https://blog.csdn.net/csdnluolei/article/details/83410056

没有更多推荐了 [去首页]
image
文章
376
原创
293
转载
83
翻译
0
访问量
183398
喜欢
73
粉丝
5
码龄
7年
资源
3

文章目录

加载中...
0
0