mysql web前端_WEB前端-mysql的那些事儿

c853c23696cfe0c46d87769c5a03e74a.png

1.复杂查询

(1)聚合查询/分组查询

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

SELECT COUNT(ename) FROM emp;

练习:使用部门编号这一列查询员工的数量

SELECT COUNT(deptId) FROM emp;

推荐:使用员工编号查询员工数量

SELECT COUNT(eid) FROM emp;

c369e96ec425735122617a8a4c86de95.png

查询所有员工的工资总和

SELECT SUM(salary) FROM emp;

查询出所有男员工的工资总和

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

查询出所有女员工的平均工资

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

SELECT SUM(salary)/COUNT(eid) FROM emp WHERE sex=0;

查询出男员工工资最高的是多少

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

查询出年龄最大的员工的生日是多少

SELECT MIN(birthday) FROM emp;

5c7e8e11e9fc5167f1118f916fa1b1e8.png

查询出男女员工平均工资,最高工资,最低工资分别是多少

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

查询每个部门员工的数量,最高工资,平均工资

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

39bb0a9f12f16597efe6f4b10e9f468a.png

查询所有员工出生的年份

SELECT YEAR(birthday) FROM emp;

查询出1991年出生的员工有哪些

SELECT * FROM emp WHERE YEAR(birthday)=1991;

(2)子查询

查询出研发部下的员工有哪些

步骤1:查询出研发部的部门编号

SELECT did FROM dept WHERE dname='研发部';

步骤2:通过部门编号查询对应的员工

SELECT * FROM emp WHERE deptId=10;

综合:

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

查询出比king工资高的员工有哪些

步骤1:查询出king的工资

SELECT salary FROM emp WHERE ename='king';

步骤2:查询出比10000工资高的员工

SELECT * FROM emp WHERE salary>10000;

SELECT * FROM emp WHERE salary>( SELECT salary FROM emp WHERE ename='king');

查询出和tom同一年出生的员工有哪些

步骤1:查询出tom出生的年份

SELECT YEAR(birthday) FROM emp WHERE ename='tom';

步骤2:查询出1990年出生的员工有哪些

SELECT * FROM emp WHERE YEAR(birthday)=1990;

SELECT * FROM emp WHERE YEAR(birthday)=( SELECT YEAR(birthday) FROM emp WHERE ename='tom') AND ename!='tom';

(3)多表查询(跨表查询)

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

SELECT ename,dname FROM emp,dept;

错误:笛卡尔积

解决:添加查询条件

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

7cdaaedf968e22cc1a5af085a22de635.png

1)内连接——和之前的查询结果一样

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

2)左外连接——左侧表中所有记录都显示

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

哪个表在前,哪一个就是左;OUTER可以省略

3)右外连接——右侧表中所有记录都显示

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

哪个表在后,哪一个就是右;OUTER可以省略

4)全连接 FULL JOIN ... ON

同时显示左侧和右侧表中所有记录

mysql不支持

UNION ALL 不合并相同的记录

UNION 合并相同的记录

SELECT ename,dname FROM emp_bj

UNION

SELECT ename,dname FROM emp_cq;

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

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

合并左外和右外连接就是全连接的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值