连接查询
多表连接分为:内连接和外连接,结合示例说明它们之间的差别和应用
Employee表
eNo |
eName |
Age |
depNo |
1 |
张小 |
27 |
1 |
2 |
黄二 |
20 |
1 |
3 |
卫三 |
33 |
2 |
4 |
齐七 |
27 |
|
Department表
dNo |
dName |
1 |
技术 |
2 |
人事 |
3 |
后勤 |
4 |
销售 |
1.内连接--inner join
查询员工编号、姓名、年龄和所在部门名称,内连接查询:
Select e.eNo,e.eName,e.age,d.dName
From employee as e (inner) join department as d
On e.depNo=d.dNo
employee和department之间通过键连接,employee中为depNo,department中为dNo,语句中在on后面指出
查询结果为:
eNo |
eName |
Age |
dName |
1 |
张小 |
27 |
技术 |
2 |
黄二 |
20 |
技术 |
3 |
卫三 |
33 |
人事 |
内连接又称为等值连接,只返回由键连接符合条件的结果
2.外连接
内连接查询只能获得两表中具有‘共同’部分的结果,有时候我们需要employee中所有的数据或者department中所有的数据,这可以使用外连接实现。外连接包括左外连接、右外连接和全连接,其作用不同。
(1)左外连接--left out join以左表为基准表,返回左表的所有数据和右表中符合条件的数据,如果右表中没有对应的值则为null
左外连接查询:
Select e.eNo,e.eName,e.age,d.dName
From employee e left (out) join department d
On e.depNo=d.dNo
查询结果为:
eNo |
eName |
Age |
dName |
1 |
张小 |
27 |
技术 |
2 |
黄二 |
20 |
技术 |
3 |
卫三 |
33 |
人事 |
4 |
齐七 |
27 |
null |
(2)右外连接--right out join 以右表为基准表,结果返回右表所有数据和左表符合条件的数据,如果左表中没有对应的值则返回null
右外连接查询:
Select e.eNo,e.eName,e.age,d.dName
From employee e right (out) join department d
On e.depNo = d.dNo
查询结果:
eNo |
eName |
Age |
depNo |
1 |
张小 |
27 |
技术 |
2 |
黄二 |
20 |
技术 |
3 |
卫三 |
33 |
人事 |
null |
null |
null |
后勤 |
null |
null |
null |
销售 |
(3)全连接--full join 查询结果返回两个表中所有数据
全连接查询:
Select e.eNo,e.eName,e.age,d.Name
From deployee e full join department d
On e.depNo = d.dNo
查询结果:
eNo |
eName |
Age |
depNo |
1 |
张小 |
27 |
技术 |
2 |
黄二 |
20 |
技术 |
3 |
卫三 |
33 |
人事 |
4 |
齐七 |
27 |
null |
null |
null |
null |
后勤 |
null |
null |
null |
销售 |