Mysql中常用函数之分组,连接查询功能实现 |
||||||||||||||||||||
函数
单行函数
字符函数
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; 数学函数
eg:查询员工工资,和其四舍五入的整数值 SELECT salary,ROUND(salary) FROM employees;
eg:查询员工工资,并且向上取整 SELECT salary,CEIL(salary) FROM employees;
eg:查询员工工资,并且向下取整 SELECT salary,FLOOR(salary) FROM employees;
SELECT TRUNCATE(1.9999,2);->1.99
日期函数
eg:查询员工姓名、入职时间,入职时间按照xxxx年xx月xx日输出 SELECT DATE_FORMAT(hiredate,'%Y年%m月%d日') FROM employees; 流程控制函数
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; 在分组前进行条件筛选
eg:查询每个部门入职时间在2010-01-01之后,并且工资最高的员工信息 SELECT * FROM employees WHERE hiredate >'2010-01-01' GROUP BY department_id; 在分组之后进行条件筛选通过 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; 连接查询
内连接(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; 其中 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分组,连接查询 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |