前言

单值函数

单值函数的定义

首先什么是单值函数,单值单值就是单个输入,操作单个变量或数值的函数。
具体的特性如下:
操作数据对象
接受参数返回一个结果
只对一行进行变换
每行返回一个结果
可以嵌套
参数可以是一列或一个值

单值函数的分类

数值函数

字符串函数

注意在MySQL中,字符串的位置是从1开始的。

日期与时间函数

加密与解密函数

MySQL信息函数

VERSION()、CONNECTION_ID()、DATABASE()、SCHEMA()、USER()、

使用LPAD,RPAD实现左对齐与右对齐的效果

SELECT employee_id,last_name,LPAD(salary,10,' ')
FROM employees;

4.查询员工id,last_name,salary,并作为一个列输出,别名为OUT_PUT

SELECT CONCAT(employee_id,',',last_name,',',salary) OUT_PUT
FROM employees;

MySQL语句自带循环控制结构
我们在客户端登录信息,然后发送信息给服务器验证的过程中,客户端就已经实现了加密,信息在传输的过程中都是加密的
MD5与SHA加密都是不可逆的加密。

聚合函数

数值型的聚合函数

聚合函数类型:
AVG():限制数值类型
SUM():限制数值类型
MAX():任意数据类型
MIN():任意数据类型
COUNT():返回表中某种记录的总数
COUNT(*):会统计值为 NULL 的行
COUNT(expr):返回expr不为空的记录总数

Mysql中的聚合函数是不能够嵌套的(ORACLE支持),单行函数可以嵌套,因为聚合函数的输出也是单个值,无法作为参数传递给多值函数

#需求:查询公司中平均奖金率
#错误的!
SELECT AVG(commission_pct)
FROM employees;#正确的:
SELECT SUM(commission_pct) / COUNT(IFNULL(commission_pct,0)),
AVG(IFNULL(commission_pct,0))
FROM employees;
--在mysql中会报错
MIN(AVG(salary))

GROUP BY

单分组

SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];

使用GROUP BY子句将表中的数据分成若干组,在SELECT列表中所有未包含在组函数中的列都应该包含在 GROUP BY子句中,包含在 GROUP BY 子句中的列不必包含在SELECT 列表中。

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;SELECT AVG(salary)
FROM employees
GROUP BY department_id ;

多分组

使用多个列分组

#需求:查询各个department_id,job_id的平均工资
#方式1:
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY  department_id,job_id;
#方式2:
SELECT job_id,department_id,AVG(salary)
FROM employees
GROUP BY job_id,department_id;#错误的!
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id;#结论1:SELECT中出现的非组函数的字段必须声明在GROUP BY 中。注意非组函数的字段这个词的意思
#      反之,GROUP BY中声明的字段可以不出现在SELECT中。
#结论2:GROUP BY 声明在FROM后面、WHERE后面,ORDER BY 前面、LIMIT前面

WITH ROLLUP

使用 WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量
当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的

#错误的:
SELECT department_id,AVG(salary) avg_sal
FROM employees
GROUP BY department_id WITH ROLLUP
ORDER BY avg_sal ASC;

HAVING

过滤分组:HAVING子句

  1. 行已经被分组。
  2. 使用了聚合函数。
  3. 满足HAVING 子句中条件的分组将被显示。
  4. HAVING 不能单独使用,必须要跟 GROUP BY 一起使用
#要求1:如果过滤条件中使用了聚合函数,则必须使用HAVING来替换WHERE。否则,报错。
#要求2:HAVING 必须声明在 GROUP BY 的后面,注意与WHERE的不同
#要求3:开发中,我们使用HAVING的前提是SQL中使用了GROUP BY。
#练习:查询各个部门中最高工资比10000高的部门信息
#错误的写法:
SELECT department_id,MAX(salary)
FROM employees
WHERE MAX(salary) > 10000
GROUP BY department_id;#正确的写法:
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000;#结论:当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中。
#      当过滤条件中没有聚合函数时,则此过滤条件声明在WHERE中或HAVING中都可以。但是,建议大家声明在WHERE中。#练习:查询部门id为10,20,30,40这4个部门中最高工资比10000高的部门信息
#方式1:推荐,执行效率高于方式2.
SELECT department_id,MAX(salary)
FROM employees
WHERE department_id IN (10,20,30,40)
GROUP BY department_id
HAVING MAX(salary) > 10000;#方式2:
SELECT department_id,MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000 AND department_id IN (10,20,30,40);

注意事项

非法使用聚合函数 : 不能在 WHERE 子句中使用聚合函数。

SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;

WHERE与HAVING的对比

优点 缺点
WHERE 先筛选数据再关联,执行效率高 不能使用分组中的计算函数进行筛选
HAVING 可以使用分组中的计算函数 在最后的结果集中进行筛选,执行效率较低

WHERE 和 HAVING 也不是互相排斥的,我们可以在一个查询里面同时使用 WHERE 和 HAVING。包含分组统计函数的条件用HAVING,普通条件用 WHERE。这样,我们就既利用了 WHERE 条件的高效快速,又发
挥了 HAVING 可以使用包含分组统计函数的查询条件的优点。当数据量特别大的时候,运行效率会有很大的差别。

SQL语句执行过程

#(1)from:从哪些表中筛选
#(2)on:关联多表查询时,去除笛卡尔积
#(3)where:从表中筛选的条件
#(4)group by:分组依据
#(5)having:在统计结果中再次筛选
#(6)order by:排序
#(7)limit:分页

  1. 关键字的顺序是不能颠倒的:
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...
  1. SELECT 语句的执行顺序(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同):

    在 SELECT 语句执行这些步骤的时候,每个步骤都会产生一个 虚拟表 ,然后将这个虚拟表传入下一个步骤中作为输入。需要注意的是,这些步骤隐含在 SQL 的执行过程中,对于我们来说是不可见的。

SQL语句执行原理

对虚拟表有了解,具体还是比较复杂

SQL中的函数:单值函数、聚合函数相关推荐

  1. 【PostGreSql】SQL中只要用到聚合函数就一定要用到group by 吗?

    一,问题: select aa.apply_time, aa.product_cid, count(case when aa.r_state='审核中' then apply_id end )审核中订 ...

  2. SQL中只要用到聚合函数就一定要用到group by 吗?

    答:看情况 1.当只做聚集函数查询时候,就不需要进行分组了. 2.当聚集函数和非聚集函数出现在一起时,需要将非聚集函数进行group by 举例来说: 情况一: 不需要使用Group by 进行分组, ...

  3. MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询

    第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...

  4. SQL 的 group by和聚合函数(很好理解版)

    为什么不能够 select * from Table group by id,为什么一定不能是 *,而只能是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢? ===正文 ...

  5. MySQL中的组函数(聚合函数)

    MySQL中的组函数(聚合函数) 组函数操作行集,给出每组的结果.组函数不象单行函数,组函数对行的集合进行操 作,对每组给出一个结果.这些集合可能是整个表或者是表分成的组. 一.组函数与单行函数的区别 ...

  6. SQL中实现截取字符串的函数

    SQL中实现截取字符串的函数 如果想实现从数据库中取数据时截取一个字段下的内容或者截取一串字符串,则能够实现这种效果的函数有Left,Right,SubString三个函数. 1.Left函数:Lef ...

  7. MySQL中的常用函数和聚合函数

    常用函数和聚合函数 官网:https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html 常用函数: -- ===== ...

  8. sql中的trim()以及translate()函数

    oracle 函数 介绍一下sql中的trim()以及translate()函数 首先说一下trim(),trim()和我们接触的编程语言一样也是用来去掉前后空格的,LTRIM(),RTRIM(),T ...

  9. dql聚合函数_sql聚合函数有哪些

    SQL聚合函数有:1.AVG函数:2.COUNT函数:3.MAX函数:4.MIN函数:5.SUM函数:6.GROUPING函数:7.CHECKSUM函数:8.STDEV函数:9.STDEVP函数:10 ...

  10. MySQL专题四——MySQL函数(聚合函数)

    MySQL聚合函数 1.聚合函数介绍 什么是聚合函数 聚合函数作用于一组数据,并对一组数据返回一个值 聚合函数类型 AVG() SUM() MAX() MIN() COUNT() 聚合函数语法 SEL ...

最新文章

  1. Android Studio:64K问题com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
  2. Non-zero exit code (1)
  3. LeetCode 573. 松鼠模拟(数学)*
  4. SourceTree的基本使用 - 天字天蝎 - 博客园
  5. jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现
  6. Spreadjs表格
  7. 服务器连接电脑显示屏花屏怎么解决,电脑显示器花屏怎么办 电脑显示器花屏解决方法【详解】...
  8. 宁波大学数学系好老师推荐
  9. PMOS和NMOS的区分及导通方式
  10. 认识电信产品生命周期管理PLM及其PLM服务
  11. 快乐的强化学习6——DDPG及其实现方法
  12. linux同步clock和date,liunx时钟与同步
  13. 阿里云Api网关导入Swagger功能简介
  14. CF大陆斗C战士(三)
  15. 思科路由器的密码重置
  16. iPhone 订阅退款方法
  17. 华为更新系统10.1显示连接服务器失败,emui10.1正式版-华为emui10.1系统更新正式版预约 -优盘手机站...
  18. Vue 消息提示通知的几种方式汇总
  19. 好文分享 行到艰难处 方是修心时
  20. 【莹伙丛】javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringAppl

热门文章

  1. Batch和Epoch之间的区别是什么?
  2. linux系统怎么重启网卡?linux重启网卡的三种教程
  3. visio直线交叉相交跨线修改
  4. zipfile zip文件操作
  5. Tensorflow笔记(八)——Estimator
  6. Matlab绘制多组柱状图的方法(可直接复制)
  7. 阿里云视频点播指定清晰度
  8. 循环-菲波那切数列II
  9. CSS list-style样式集锦
  10. Fairplay DRM与混淆实现的研究