MySQL day04

复杂查询

1.SQL语句中复杂查询分为——聚合查询/分组查询

示例:查询出所有员工的数量

SELECT COUNT(*) FROM emp;

SELECT COUNT(ename) FROM emp;

函数:FUNCTION,具有特定的功能,需要接收若干个数据,最终导出特定的计算结果

MySQL中提供了5个聚合函数

COUNT(...)/SUM(...)/AVG(...)/MAX(...)/MIN(...)

练习:查询出十号部门员工数量

SELECT COUNT(ename) FROM emp WHERE deptId=10;

练习:查询出十号部门所有工资总和

SELECT SUM(salary) FROM emp WHERE deptId=10;

练习:查询出女员工工资总和

SELECT SUM(salary) FROM emp WHERE sex='0';

练习:查询出男员工的平均工资

SELECT AVG(salary) FROM emp WHERE sex=1;

练习:查询出1990年生的员工工资最大值和最小值

SELECT MAX(salary),MIN(salary) FROM emp WHERE birthday>='1990-1-1' AND birthday<='1990-12-31';

分组查询

练习:查询出每个部门的员工数量

SELECT deptId,COUNT(*) FROM emp GROUP BY deptId;

注意:分组查询中SELECT后面只能跟分组条件,或者其它列的聚合函数

练习:查询出每个部门的平均工资,最大工资,最小工资

SELECT deptId,AVG(salary),MAX(salary),MIN(salary) FROM emp GROUP BY deptId;

练习:查询出男员工和女员工人数是多少

SELECT sex,COUNT(*) FROM emp GROUP BY sex;

2.复杂查询——子查询

示例:查询出工资比Tom高的员工的所有信息

步骤1:先查询出Tom的工资是多少

SELECT salary FROM emp WHERE ename='tom';

步骤2:再查询出工资比6000高的员工信息

SELECT *FROM emp WHERE salary>6000;

综合:SELECT * FROM emp WHERE salary>(SELECT salary FROM emp WHERE ename='tom' );

练习:查询出研发部所有的员工信息

SELECT * FROM emp WHERE deptId=(SELECT did FROM dept WHERE dname='研发部');

3.复杂查询——多表查询/跨表查询

示例查询出所有员工姓名及其所在部门名称

SELECT ename,dname FROM emp,dept WHERE deptId=did;

注意:为了防止出现笛卡尔积,在多表查询的时候,需要添加查询条件

问题:无法查询出没有部门的员工信息,也无法查询出没有员工的部门

 

SQL99中的多表查询

(1)内连接 INNER JOIN ...ON——和之前的作用一样

SELECT ename,dname FROM emp INNER JOIN dept ON deptId=did;

(2)左外连接 LEFT OUTER JOIN...ON

SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did;

 (3) 右外连接 RIGHT OUTER JOIN...ON 显示右侧所有的记录

SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did;
(4)全连接 FULL JOIN

MySQL不支持

UNION/UNION ALL

union all 两组数据出现了相同项不合并

union 两组数据出现了相同项进行合并

 

SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did;

 

SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did;

 

猜你喜欢

转载自blog.csdn.net/zbw970802/article/details/81513945