2018.4.13
联表 查询
一:内连接
上面的连接语句就是内连接,但它不是SQL标准中的查询方式,可以理解为方言!
SQL标准的内连接为:
SELECT *FROM emp e
INNER JOIN dept d
ON e.deptno=d.deptno;
内连接的特点:查询结果必须满足条件。
二:外连接
包括左外连接和右外连接,外连接的特点:查询出的结果存在不满足条件的可能。
a.左外连接
SELECT * FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno;
左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。
b.右外连接
右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL
连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外键关系去除。
两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连
接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少
有一个主外键条件,三张表连接至少有两个主外键条件。
select empName,deptName from employee,dept;
select empName,deptName
from employee,dept
where empName.deptID =dept.id;
select empName,deptName
from employee
inner join dept
on employee.deptID = dept.id;
select e.empName,d.deptName
from employee e
inner join dept d
on e.deptID = dept.id;
select d.deptName,e.empName
from dept d
left outer join employee e
on d.id = e.deptID;
select d.deptName,e.empName
from employee e
right outer join dept d
on d.id = e.deptID;
alter table employee add bossId int;
update employee set bossId = 1 where id = 2;
update employee set bossId = 2 where id = 3;
update employee set bossId = 3 where id = 4;
select e.employee,b.employee
from employee e
left outer join employee b
on e.bossId = b.id;