需求:查询员工及其所在部门(显示员工姓名,部门名称)
1.交叉连接查询(笛卡尔积 有些是重复记录 不推荐)
select empName ,deptName from employee,dept;
2.内连接查询 (只有满足条件的结果才会显示)
规则:1.先确定你要查哪些表
2.确定查询哪些字段
3.表与表之间的连接条件(规律:连接条件数量是表数量-1)
员工表 id name deptId 部门表 id deptName
select empName,deptName ———– 2.确定哪些字段
from employee,dept ————– 1.确定查询哪些表
where employee.deptId=dept.id —————- 3.表与表之间的连接条件
内连接的另外一种语法
select
empName,deptName
from employee
inner join dept
on employee.id=dept.id;
多表基本框架
SELECT
A.ID,
A.NUMBER,
A.PRICE,
A.ORDER_TIME,
B.USER_ID,
B.STARTIME,
B.STOPTIME,
C.CHANNEL_PAY,
D.COMPANY
FROM
D表 D
LEFT JOIN A表 A ON A.COMPANY_ID = D.UID
LEFT JOIN B表 B ON B.COMPANY_ID = D.UID
LEFT JOIN C表 C ON C.COMPANY_ID = D.UID
有条件的再加行:
WHERE ..........
排序(如A表的ID由大到小排):
ORDER BY A.ID DESC
优化 (使用别名)
select
empName,deptName
from employee AS e
inner join dept AS d
on e.id=d.id;
需求:查询每个部门的员工
预期结果:
软件开发部 张三
总经办 null
select
d.deptName,e.emoName
from dept d,employee e
where d.id=e.deptId;
查询结果:总经办 不显示
所以 现在内连接不符合需求了!!!!!
那就使用左外连接 使用左边表的数据去匹配右边表的数据,如果符合条件的就显示,如果不符合条件就是用null!!!!
左 (外)连接:左边的数据一定会完整显示!
select
d.deptName,e.employee
from dept d
left outer join employee e
on d.id=e.deptId;
右外连接:右边的数据一定会完整显示!
select
d.deptName,e.employee
from employee e
right outer join dept d
on d.id=e.deptId;