数据库的多表连接查询

员工表(employeeTB)

 员工编号       员工姓名        部门编号

employeeidnamedetID
0001张三01
0002赵四01
0003王五02
0004郑六02
0005赵七null



部门表(departmentID)

       部门编号               部门名称

 detIDdetname
01技术部
02市场部
03工程部



一要求找到每个员工所属的部门?

答:显然是要将两个表进行连接,进行连接的条件就是:部门编号相等。有以下 的几种连接方式。

1.内连接

从左往右,员工表中有两个01和部门表中对应。两个02和部门表中对应。然后就没有了

select A.employeeID,A.name,B.detname from employeeTB AS A,departmentTB AS B WHERE A.detID=B.detID;或者

select A.employeeID,A.name,B.detname from employeeTB AS A  INNER JOIN departmentTB AS B   ON   A.detID=B.detID;

001张三技术部
002李四 技术部
003王五市场部
004郑六工程部



2.外连接

        左外连接:左边去找右边相等的地方,若找不到,就用null代替
连接中的左表的表中的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目,那么右表中的字段值为NULL(空),在这里就代表,此员工不属于任何部门。 

select A.employeeID,A.name,B.detname from employeeTB AS A  LEFT OUTER JOIN departmentTB AS B   ON   A.detID=B.detID;

001张三技术部
002李四 技术部
003王五市场部
004郑六工程部
005赵七null


      右外连接:右边的表找左边表相等的地方,若找不到,则左边的为null

在部门表中的01在员工表中有两个01对应,02有两个对应,03则没有地方对应,所以03工程部的左边都是null。
select A.employeeID,A.name,B.detname from employeeTB AS A  RIGHT OUTER JOIN departmentTB AS B   ON   A.detID=B.detID;

 

001张三技术部
002李四 技术部
003王五市场部
004郑六市场部

nullnull工程部

    全连接:先左边的表找右边的表,没有就用null填补,然后用右边的表找左边的表,没有的用null填补。

select A.employeeID,A.name,B.detname from employeeTB AS A  FULL OUTER JOIN departmentTB AS B   ON   A.detID=B.detID;

001张三技术部
002李四 技术部
003王五市场部
004郑六工程部
005           赵七                       null

nullnull   工程部

参考:http://www.cnblogs.com/devilmsg/archive/2009/03/24/1420543.html

           http://www.xker.com/page/e2012/0708/117368.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值