文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mysql中常用函数之分组,连接查询功能实现

2024-10-18 21:02

关注

函数

在mysql中函数是一组预定义的指令,用于执行特定的操作并返回结果,可类比Java中的方法.在SQL中函数根据其作用范围和返回结果方法分为两大类:单行函数,分组函数

单行函数

单行函数的特点为对一行数据进行操作,并只返回一种结果.单行函数通常用于处理单个记录数据

字符函数

eg:查询员工姓名,姓名字数。

SELECT emplyee_name,CHARACTER_LENGTH(emplyee_name) FROM emplyees;

eg:将字符串'aaa','bbb','ccc'进行拼接。

SELECT CONCAT('aaa','bbb','ccc');

eg::查询员工邮箱,并转为大写显示

SELECT UPPER(email) FROM emplyees;

eg:提取hello world中的hello

SELECT substr('hello world',1,5);`

eg:查询员工电话号码,要求去除中间的横线 ’-’

SELECT REPLACE(phone_number, '-', '') FROM emplyees;

数学函数

ROUND(X):对浮点数X进行四舍五入

eg:查询员工工资,和其四舍五入的整数值

SELECT salary,ROUND(salary) FROM employees;

CEIL(X):对浮点数X向上取整,即返回≥X的最小整数

eg:查询员工工资,并且向上取整

SELECT salary,CEIL(salary) FROM employees;

FLOOR(X):对浮点数X向下取整,即返回≤X的最大整数

eg:查询员工工资,并且向下取整

SELECT salary,FLOOR(salary) FROM employees;

TRUNCATE(X,length):对浮点数的小数部分进行截取→常用于进行保留小数操作

SELECT TRUNCATE(1.9999,2);->1.99

日期函数

格式符功能
%Y4位年份
%y2位年份
%m月份(01,02,…,11,12)
%c月份(1,2,…,11,12)
%d日(01,02,…)
%H小时(24小时制)
%h小时(12小时制)
%i分钟(00,01,…,58,59)
%s秒(00,01,…,58,59)

eg:查询员工姓名、入职时间,入职时间按照xxxx年xx月xx日输出

SELECT DATE_FORMAT(hiredate,'%Y年%m月%d日') FROM employees;

流程控制函数

流程控制函数在SQL中根据条件选择性地返回不同的结果,其允许在查询过程中实现条件逻辑

eg: 如果查询的年纪大于18则返回adult,否则返回minor

SELECT age,IF(age>=18,'adult','minor');
SELECT exper1,exper2...,
CASE exper1
		 WHEN value1 THEN result1
		 WHEN value2 THEN result2
		 WHEN value3 THEN result3
		 ...
		 ELSE result
END
FROM table_name;

eg:根据查询的部门号返回部门名称

SELECT department_id
CASE department_id
		 WHEN 1 THEN '经理办公室'
		 WHEN 2 THEN '财务部'
		 WHEN 3 THEN '后勤部'
		 ELSE 'unkown'
END AS department_name
FROM departments;
SELECT exper1,exper2...,
CASE 
		 WHEN condition 1 THEN result1
		 WHEN condition 2 THEN result2
		 ...
		 ELSE result
END 
FROM table_name;

eg:查询员工姓名以及工资,工资按照一定规则发放,入职时间在2015-01-01之前的员工工资*2,入职时间在2018-01-01之前的员工工资*1.5,其他不变

SELECT 
employee_name,hiredate,salary 原工资,
CASE
    WHEN hiredate<'2015-01-01' THEN salary*2
		WHEN hiredate<'2018-01-01' THEN salary*1.3
		ELSE salary
END AS 新工资
FROM employees;

分组函数

分组函数也称为聚合函数,用于对一组值进行操作,并返回单个结构

eg:查询所有员工工资总和、平均值、最大值、最小值、员工个数;

SELECT SUM(salary),AVG(salary),MAX(salary),MIN(salary),COUNT(*) FROM employees;

分组查询

分组查询可根据某个或某些列对数据进行分组

按单个字段分组

SELECT 列表
FROM 表
[WHERE 筛选条件]
GROUP BY 分组
[ORDER BY 排序]

eg:查询每个部门的最高工资

SELECT MAX(salary) 
FROM employees 
GROUP BY department_id;

在分组前进行条件筛选

在GROUP BY语句之间使用 WHERE语句对查询结果降序筛选

eg:查询每个部门入职时间在2010-01-01之后,并且工资最高的员工信息

SELECT *
FROM employees
WHERE hiredate >'2010-01-01'
GROUP BY department_id;

在分组之后进行条件筛选

通过HAVING语句可以在GRUOP BY语句之后进行条件筛选

eg:查询员工人数大于120的部门

SELECT *
FROM employees
GROUP BY department_id
HAVING COUNT(*)>120;

按多字段分组

eg:查询每个部门,男女员工的平均工资

SELECT department_id,sex,AVG(salary) AS 平均工资
FROM employees
GROUP BY department_id,sex;

连接查询

连接查询是SQL中十分重要的知识点,就有”连接不会,通宵也白搭”,连接查询也称为多表查询,用于将两个以上的表的数据基于某些相关条件组合在一起,通过连接查询,可以从表中提取数据,生成一个新的结果集

内连接(INNER JOIN)

内连接用于返回两个表中所有满足连接条件的所有行数据,内连接可分为:等值连接,非等值连接,自连接

等值连接

等值连接是一种常见的连接方式,其基于两表中某一列的相等条件进行连接

其语法结构如下:

SELECT colum1,colum2,....,
FROM table1 
INNER JOIN table2
ON table1.colum = table.colum;

eg:查询员工姓名以及所在的部门名称

SELECT employee_name AS 员工名,department_name AS 部门名
FROM employees e	
INNER JOIN departments d ON 
e.department_id=d.department_id;

非等值连接

非等值连接基于两表中某一列的不等条件进行连接.如大于,小于,不等于等等

语法结构:

SELECT colum1,colum2,....,
FROM table1 
INNER JOIN
ON table1.colum <operator> table2.colum;

其中operator可以是>,<,≥,≤,≠,BETWEEN…AND等等;

eg:查询员工工资及工资等级

SELECT e.salary,j.grade_level
FROM employees e
INNER JOIN job_grades j
ON e.salary BETWEEN j.lowest_sal AND j.higest_sal;

自连接

自连接是指同一个表的连接.这种连接通常用于处理表中有层次结构或函数递归关系的数据

eg:查询员工姓名以及对应的直系领导

SELECT t1.employee_name AS 员工,t2.employee_name AS 领导
FROM employees t1
INNER JOIN employees t2
ON t1.manager_id=t2.employee_id;

外连接

外连接用于返回主表中满足连接条件的行,同时保留另一个表中没有匹配的行

左/右外连接

语法结构:

SELECT colum1,colum2...,
FROM table1 [LEFT|RIGHT]
JOIN ON [连接条件];

eg:查询员工姓名以及所在的部门名称,没有部门信息的员工也要查询出来

SELECT employee_name AS 员工姓名,department_name AS 部门名称
FROM employees e LEFT
JOIN departments d
ON e.department_id=d.department_id;

到此这篇关于Mysql中常用函数 分组,连接查询 的文章就介绍到这了,更多相关Mysql分组,连接查询 内容请搜索编程网(www.lsjlt.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.lsjlt.com)!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯