京东11.11大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

2024-11-4 01:46| 发布者: 76a9| 查看: 173| 评论: 0

摘要: 目录函数单行函数字符函数数学函数日期函数流程控制函数分组函数分组查询按单个字段分组在分组前举行条件筛选在分组之后举行条件筛选按多字段分组连接查询内连接(INNER JOIN)等值连接非等值连接自连接外连接左/右外
目录

函数

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

单行函数

[code]单行函数的特点为对一行数据举行操纵,并只返回一种结果.单行函数通常用于处理单个记录数据[/code]
  • 单行函数又可分为:字符函数,数学函数,其他函数,流程控制函数

字符函数

  • [code]CHAR_LENGTH(S),LENGTH(S):[/code]返回字符串的长度

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

[code]SELECT emplyee_name,CHARACTER_LENGTH(emplyee_name) FROM emplyees;[/code]
  • [code]CONCAT(S1,S2,…Sn):[/code]将两个以上的字符串连接

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

[code]SELECT CONCAT('aaa','bbb','ccc');[/code]
  • [code]UPPER(),LOWER():[/code]对字符举行大小写转化

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

[code]SELECT UPPER(email) FROM emplyees;[/code]
  • [code]substr,substring(S, start, length):[/code]提取字符串S从start位置开始,长度为length的字字符串

eg:提取hello world中的hello

[code]SELECT substr('hello world',1,5);`[/code]
  • [code]replace(S, old, new):[/code] 在字符串S中将所有的old更换为new

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

[code]SELECT REPLACE(phone_number, '-', '') FROM emplyees;[/code]

数学函数

[code]ROUND(X):[/code]对浮点数X举行四舍五入

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

[code]SELECT salary,ROUND(salary) FROM employees;[/code]

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

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

[code]SELECT salary,CEIL(salary) FROM employees;[/code]

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

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

[code]SELECT salary,FLOOR(salary) FROM employees;[/code]

[code]TRUNCATE(X,length):[/code]对浮点数的小数部分举行截取→常用于举行保留小数操纵

[code]SELECT TRUNCATE(1.9999,2);->1.99[/code]
  • [code]MOD(X,Y)[/code]:对两个数举行地区操纵即X%Y

日期函数

  • [code]NOW(),SYSDATE()[/code]:返回当前系统日期+时间
  • [code]CURDATE():[/code]返回当前系统日期,不包括时间
  • [code]CURTIME()[/code]:返回当前系统时间,不包括日期
  • [code]DATE_FORMAT(date,format):[/code] 用于格式化日期,date是要格式化的数据,format是格式化的模式,格式化的通配符号如下表:
格式符功能
%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日输出

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

流程控制函数

[code]流程控制函数在SQL中根据条件选择性地返回差别的结果,其允许在查询过程中实现条件逻辑[/code]
  • [code]IF(expr,true_val,false_val):[/code] 若表达式[code]expr[/code]为真,则返回结果[code]true_val[/code],否则返回[code]false_val[/code]的结果

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

[code]SELECT age,IF(age>=18,'adult','minor');[/code]
  • [code]CASE[/code]语法布局:类似于switch…case布局,用于实现多支路条件选择
[code]SELECT exper1,exper2..., CASE exper1 WHEN value1 THEN result1 WHEN value2 THEN result2 WHEN value3 THEN result3 ... ELSE result END FROM table_name;[/code]

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

[code]SELECT department_id CASE department_id WHEN 1 THEN '司理办公室' WHEN 2 THEN '财务部' WHEN 3 THEN '后勤部' ELSE 'unkown' END AS department_name FROM departments;[/code]
  • 搜刮CASE:语法布局与质朴CASE类似,但搜刮CASE可根据多种差别的表达式条件返回差别值
[code]SELECT exper1,exper2..., CASE WHEN condition 1 THEN result1 WHEN condition 2 THEN result2 ... ELSE result END FROM table_name;[/code]

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

[code]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;[/code]

分组函数

[code]分组函数也称为聚合函数,用于对一组值举行操纵,并返回单个布局[/code]
  • [code]COUNT(*):[/code]计算指定列中非NULL值的数量,[code]SUM(column)[/code]:计算指定列之和,[code]AVG(column)[/code]:计算指定列均匀数,[code]MAX(colum):[/code]取出指定列最大值,[code]MIN(colum)[/code]:取出指定列最小值

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

[code]SELECT SUM(salary),AVG(salary),MAX(salary),MIN(salary),COUNT(*) FROM employees;[/code]

分组查询

[code]分组查询可根据某个或某些列对数据举行分组[/code]

按单个字段分组

  • 通过[code]GROUP BY[/code]关键字:按指定枚举行分组
[code]SELECT 列表 FROM 表 [WHERE 筛选条件] GROUP BY 分组 [ORDER BY 排序][/code]

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

[code]SELECT MAX(salary) FROM employees GROUP BY department_id;[/code]

在分组前举行条件筛选

[code]在GROUP BY语句之间利用 WHERE语句对查询结果降序筛选[/code]

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

[code]SELECT * FROM employees WHERE hiredate >'2010-01-01' GROUP BY department_id;[/code]

在分组之后举行条件筛选

通过[code]HAVING[/code]语句可以在[code]GRUOP BY[/code]语句之后举行条件筛选

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

[code]SELECT * FROM employees GROUP BY department_id HAVING COUNT(*)>120;[/code]

按多字段分组

  • 在GRUOP BY语句后可接多个字段实现多字段分组

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

[code]SELECT department_id,sex,AVG(salary) AS 均匀工资 FROM employees GROUP BY department_id,sex;[/code]

连接查询

[code]连接查询是SQL中十分告急的知识点,就有”连接不会,彻夜也白搭”,连接查询也称为多表查询,用于将两个以上的表的数据基于某些干系条件组合在一起,通过连接查询,可以从表中提取数据,天生一个新的结果集[/code]
  • 笛卡尔积征象:假设有两个表,表1有n行数据,表2有m行数据,在利用连接查询时会产生n*m条数据,因此在条件查询时必要假设连接的条件

内连接(INNER JOIN)

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

等值连接

[code]等值连接是一种常见的连接方式,其基于两表中某一列的相称条件举行连接[/code]

其语法布局如下:

[code]SELECT colum1,colum2,...., FROM table1 INNER JOIN table2 ON table1.colum = table.colum;[/code]

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

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

非等值连接

[code]非等值连接基于两表中某一列的不等条件举行连接.如大于,小于,不即是等等[/code]

语法布局:

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

此中[code]operator[/code]可以是[code]>,<,≥,≤,≠,BETWEEN…AND[/code]等等;

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

[code]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;[/code]

自连接

[code]自连接是指同一个表的连接.这种连接通常用于处理表中有条理布局或函数递归关系的数据[/code]

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

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

外连接

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

左/右外连接

  • 左(右)连接顾名思义即根据表位置区分主表,即在左连接即左表,右连接即右侧

语法布局:

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

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

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

到此这篇关于Mysql中常用函数 分组,连接查询 的文章就先容到这了,更多干系Mysql分组,连接查询 内容请搜刮脚本之家从前的文章或继续浏览下面的干系文章希望大家以后多多支持脚本之家!


来源:https://www.jb51.net/database/328980agw.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )

GMT+8, 2025-4-4 23:13 , Processed in 0.023760 second(s), 17 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部