- Mysq多表查询练习
需求:
-
- 第一题
查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述
-
-
- 子查询
-
是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 select,update 和 delete 语句中使用,而且可以进行多层嵌套,实际开发中,子查询经常出现在 where 语句中
-
-
- 内连接查询
-
内连接 ( inner join ) 使用 inner join 关键字连接两张表,并使用 on 子句来设置连接条件
多个表连接时,再 from 后边连续使用 inner join 或 join 即可
-
-
- 外连接查询
-
内连接查询的结果都是符合连接条件的结果,为外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足与不满足条件的记录
-
-
- 左外连接查询
-
-
-
- 右外连接查询
-
右外连接又称为右连接,右连接是左连接的反向连接。使用 right outer join
关键字连接两个表,可以简化为 right join
,并使用 on
子句来设置连接条件
-
- 第二题
查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
-
-
- 子查询查询
-
-
-
- 内连接查询
-
-
-
- 左外连接查询
-
-
-
- 右外连接查询
-
-
- 第三题
查询员工姓名,工资,工资等级
SELECT e.ename,e.salary,s.grade FROM emp e,salarygrade s where e.salary between s.losalary AND s.hisalary
-
- 第四题
查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
SELECT e.ename,e.salary,j.jname,j.description, d.dname,loc,s.grade as "工资等级" FROM emp e,salarygrade s, dept d,job j where e.salary between s.losalary AND s.hisalary and e.job_id = j.id and e.dept_id = d.id
select a.id,a.ename,a.salary,b.jname,b.description,c.dname,c.loc,s.grade from ((emp a left join job b on a.job_id = b.id )left join dept c on a.dept_id = c.id) left join salarygrade s on a.salary between s.losalary AND s.hisalary
-
- 第五题
.查询出部门编号、部门名称、部门位置、部门人数
select d.id,d.dname,d.loc, count(e.id) as"人数" from emp e left join dept d on e.dept_id = d.id group by d.id
-
- 第六题
- 左外连接查询
- 第六题
查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询
select a.ename as "员工",b.ename as "领导" from emp a left join emp b on a.mgr = b.id
- 多表联查
1. inner join(等值连接) 只返回两个表中联结字段相等的行
① 2个表进行查询
SELECT
t.tab1,
t.tab2,p.tab1
FROM
表1 AS t
INNER JOIN 表2 AS p
ON t.tab1 = p.tab1
GROUP BY t.tab2
② 3个表进行查询
SELECT
t.tab1,
t.tab2,p.tab1
FROM
(
表1 AS a
INNER JOIN 表2 AS p
ON a.tab1 = p.tab1
)
INNER JOIN 表3 AS t
ON a.tab1 = t.tab1
GROUP BY t.tab2
③ 4个表进行查询
SELECT
t.tab1,
t.tab2,a.tab1
FROM
(
(
表1 AS a
INNER JOIN 表2 AS p
ON a.tab1 = p.tab1
)
INNER JOIN 表3 AS c
ON a.tab1 = c.tab1
)
INNER JOIN 表4 AS t
ON a.tab1 = t.tab1
GROUP BY t.tab2
④ 5个表进行查询
SELECT
t.tab1,
t.tab2,a.tab1
FROM
(
(
(
表1 AS a
INNER JOIN 表2 AS p
ON a.tab1 = p.tab1
)
INNER JOIN 表3 AS c
ON a.tab1 = c.tab1
)
INNER JOIN 表4 AS d
ON a.tab1 = d.tab1
)
INNER JOIN 表5 AS t
ON a.tab1 = t.tab1
GROUP BY t.tab2
⑤ 6个表进行查询...
多个表嵌套, 以此类推......
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
注: left join 、right join 和 inner join 一样嵌套即可, 不做举例~~