概述
员工表(employeeTB)
员工编号 员工姓名 部门编号
employeeid | name | detID |
0001 | 张三 | 01 |
0002 | 赵四 | 01 |
0003 | 王五 | 02 |
0004 | 郑六 | 02 |
0005 | 赵七 | null |
部门表(departmentID)
部门编号 部门名称
detID | detname |
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 | 郑六 | 市场部 |
null | null | 工程部 |
全连接:先左边的表找右边的表,没有就用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 | 郑六 | 工程部 |
null | null | 工程部 |
参考:http://www.cnblogs.com/devilmsg/archive/2009/03/24/1420543.html
http://www.xker.com/page/e2012/0708/117368.html
最后
以上就是活力黑米为你收集整理的数据库的多表连接查询的全部内容,希望文章能够帮你解决数据库的多表连接查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复