部门表 dept
id |
name |
1 |
研发部 |
2 |
财务部 |
3 |
市场部 |
员工表 epmloyee
id |
name |
gender |
age |
money |
deptid |
1 |
王五 |
男 |
25 |
3000 |
1 |
2 |
李明 |
男 |
23 |
2500 |
1 |
3 |
王二小 |
男 |
23 |
2356 |
2 |
4 |
陈发 |
男 |
22 |
3600 |
2 |
5 |
小明 |
男 |
21 |
3100 |
3 |
6 |
苏奇 |
男 |
24 |
2800 |
3 |
7 |
王丽 |
女 |
19 |
1800 |
1 |
8 |
李芳 |
女 |
18 |
1900 |
(null) |
完成以下要求:
思路:利用多表关联语句通过部门名称关联
SELECT
e.id,
e.name,
e.gender,
e.age,
e.money,
d.name
FROM epmloyee e
INNER JOIN dept d ON e.deptid=d.id
思路:利用子表查询中标量子查询将最大的数据显示出来,然后再用where判断money是否是最大值
SELECT * FROM epmloyee WHERE money=(SELECT MAX(money) FROM epmloyee)
思路:先用分组查询将每个部门中最高的工资显示出来将其作为子表然后再用inner join两张表关联起来(关联条件就是部门相同钱的值相同),如果要显示部门再关联一个部门dept表显示部门名称
SELECT * FROM epmloyee e INNER JOIN
(SELECT deptid,MAX(money) m FROM epmloyee GROUP BY deptid) t
ON e.deptid= t.deptid AND e.money =t.m
INNER JOIN dept d ON e.deptid = d.id
思路:利用语句就可以了
SELECT
SUM(money) '总和工资',
AVG(money) '平均工资',
MAX(money) '最高工资',
MIN(money) '最低工资'
FROM epmloyee e
INNER JOIN dept d ON e.deptid=d.id
WHERE gender='男'
思路:与第二问相似改变条件就可以了
SELECT * FROM epmloyee WHERE money>(SELECT AVG(money) FROM epmloyee)
SELECT e.*,d.name
FROM epmloyee e
INNER JOIN dept d ON e.deptid=d.id
WHERE e.name LIKE '王%'
SELECT e.name,e.age
FROM epmloyee e
INNER JOIN dept d ON e.deptid=d.id
ORDER BY e.age DESC
LIMIT 0,3
SELECT d.name,SUM(money)
FROM epmloyee e
INNER JOIN dept d ON e.deptid=d.id
GROUP BY e.deptid
SELECT d.name,COUNT(e.name)
FROM epmloyee e
INNER JOIN dept d ON e.deptid=d.id
GROUP BY e.deptid