MySQL命令大全 (2)

2.case  CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。

查询员工的工资,要求

部门号=30,显示的工资为1.1倍

部门号=40,显示的工资为1.2倍

部门号=50,显示的工资为1.3倍

其他部门,显示的工资为原工资

SELECT salary 原始工资,department_id, CASE department_id WHEN 30 THEN salary*1.1 WHEN 40 THEN salary*1.2 WHEN 50 THEN salary*1.3 ELSE salary END AS 新工资 FROM employees;

 

五.分组函数

1.sum(expression)  ​ 求和

SELECT SUM(salary) FROM employees;

 

2.avg(expression)  ​ 平均值

SELECT AVG(salary) FROM employees;

 

3.max(expression)  ​ 最大值

SELECT MAX(salary) FROM employees;

 

4.min(expression)  ​ 最小值

SELECT MIN(salary) FROM employees;

 

5.count(expression)   计算个数

SELECT COUNT(salary) FROM employees;

 

分组函数支持哪些类型:

字符:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算

日期:SELECT SUM(hiredate) ,AVG(hiredate) FROM employees;

 

特点:

sum、avg一般用于处理数值型

max、min、count可以处理任何类型

以上分组函数都忽略null值

可以和distinct搭配实现去重的运算

一般使用count(*)用作统计行数

和分组函数一同查询的字段要求是group by后的字段

 

六.分组查询

语法:select 分组函数,分组后的字段 from 表 【where 筛选条件】 group by 分组的字段 【having 分组后的筛选】 【order by 排序列表】

特点:

和分组函数一同查询的字段必须是group by后出现的字段

筛选分为两类:分组前筛选和分组后筛选

MySQL命令大全

 

 

 1.简单的分组

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

 

2.分组前筛选

例1:查询邮箱中包含a字符的 每个部门的最高工资

SELECT MAX(salary),department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id;

 

3.分组后筛选

例1:查询哪个部门的员工个数>5

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

 

4.添加排序

例1:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序

SELECT job_id 工种编号, MAX( salary ) 最高工资 FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX( salary )> 6000 ORDER BY MAX( salary );

 

5.按多个字段分组

例1:查询每个工种每个部门的最低工资,并按最低工资降序

SELECT MIN( salary ) 最低工资, department_id 部门, job_id 工种 FROM employees GROUP BY department_id, job_id ORDER BY MIN( salary ) DESC;

 

七.连接查询

select 字段1,字段2 from 表1,表2,...;

1.笛卡尔积现象

当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接

表1 有m行,表2有n行,结果=m*n行

发生原因:没有有效的连接条件 如何避免:添加有效的连接条件

 

2.分类

按功能分类: 内连接: 等值连接 非等值连接 自连接   外连接: 左外连接 右外连接 全外连接(mysql不支持) 交叉连接

 

3.等值连接

多表等值连接的结果为多表的交集部分

n表连接,至少需要n-1个连接条件

表的顺序没有要求

一般需要为表起别名

可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

例1:查询女神名和对应的男神名

SELECT NAME,boyName FROM boys, beauty WHERE beauty.boyfriend_id = boys.id;

 

4.为表起别名

SELECT e.last_name, e.job_id, j.job_title FROM employees e, jobs j WHERE e.`job_id` = j.`job_id`;

 

5.加筛选条件

SELECT last_name, department_name, commission_pct FROM employees e, departments d WHERE e.`department_id` = d.`department_id` AND e.`commission_pct` IS NOT NULL;

 

6.加分组

例1:查询每个城市的部门个数

SELECT COUNT(*) 个数, city FROM departments d, locations l WHERE d.`location_id` = l.`location_id` GROUP BY city;

 

7.非等值连接

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydfzg.html