设有两张表分别为:
部门表:
部门代码 | 部门名 | 负责人 | 地点 |
---|---|---|---|
0001 | 生产部 | 李华江 | 重庆荣昌县 |
0002 | 销售部 | 张丽 | 重庆渝中区 |
0003 | 市场部 | 王欣 | 重庆江北区 |
0004 | 研发部 | 张三 | 重庆江北区 |
员工表:
员工代码 | 姓名 | 家庭住址 | 部门代码 |
---|---|---|---|
200001 | 王华 | 重庆 | 0001 |
200002 | 李想 | 成都 | 0003 |
200003 | 张丽 | 上海 | 0002 |
200004 | 李江华 | 重庆 | 0001 |
200005 | 李四 | 宁波 | NULL |
-
内连接
- 查询语句:
select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e ,部门表 d where e.部门代码 = d.部门代码; #隐式内连接 select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e inner join 部门表 d on e.部门代码 = d.部门代码; #显式内连接
- 查询结果(两句语句结果都相同):
员工代码 姓名 部门代码 部门名 200001 王华 0001 生产部 200002 李想 0003 市场部 200003 张丽 0002 销售部 200004 李江华 0001 生产部 -
外连接
- 查询语句
select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e left outer join 部门表 d on e.部门代码 = d.部门代码; #左外连接 select e.员工代码,e.姓名,e.部门代码,d.部门名 from 员工表 e right outer join 部门表 d on e.部门代码 = d.部门代码; #右外连接
-
查询结果
- 左外连接:
员工代码 姓名 部门代码 部门名 200001 王华 0001 生产部 200002 李想 0003 市场部 200003 张丽 0002 销售部 200004 李江华 0001 生产部 200005 李四 NULL NULL - 右外连接:
员工代码 姓名 部门代码 部门名 200004 李江华 0001 生产部 200001 王华 0001 生产部 200003 张丽 0002 销售部 200002 李想 0003 市场部 NULL NULL NULL 研发部
-
自连接
假设员工表新增了一个字段领导代码:
员工代码 姓名 部门代码 领导代码 200001 王华 0001 NULL 200002 李想 0003 200001 200003 张丽 0002 200001 200004 李江华 0001 200001 - 查询语句:
select e1.姓名 '员工' ,e2.姓名 '领导' from 员工表 e1 join 员工表 e2 on e1.领导代码 = e2.员工代码; #意义为:查询每个员工对应的领导(实际上是一个内连接的语句,同样可以使用外连接语句)
- 查询结果:
员工 领导 李四 王华 李江华 王华 张丽 王华 李想 王华 -
联合查询
- 查询语句:
select e.员工代码,e.姓名 from 员工表 e where e.领导代码 is not null #若单使用这条语句结果只有前四条数据 union select e.员工代码,e.姓名 from 员工表 e where e.领导代码 is null; #若单使用这条语句结果只有最后一条数据
- 查询结果:
员工代码 姓名 200002 李想 200003 张丽 200004 李江华 200005 李四 200001 王华 -
子查询
-
标量子查询
- 查询语句:
/* 此查询语句的意义为:查询"李华"所在本门的负责人,查询结果只有一条,为:李华江 注意:括号中的查询语句的输出结果只有一条 */ select d.负责人 from 部门表 d where 部门代码 = (select e.部门代码 from 员工表 e where e.姓名 = '王华');
-
列子查询
- 查询语句:
/* 此查询语句的意义为:查询生产部和销售部的员工 注意:括号中的查询语句的输出结果只有一列 */ select 员工代码,姓名,部门代码 from 员工表 where 部门代码 in (select 部门代码 from 部门表 where 部门名 = '生产部' or 部门名 = '销售部');
- 查询结果:
员工代码 姓名 部门代码 200001 王华 0001 200003 张丽 0002 200004 李江华 0001 -
行子查询
- 查询语句:
/* 此查询语句的意义为:查询与王华部门相同且家庭住址一样的员工信息 注意:括号中的查询语句的输出结果只有一行 */ select 员工代码,姓名,家庭住址,部门代码 from 员工表 where (家庭住址,部门代码) = (select 家庭住址,部门代码 from 员工表 where 姓名 = '王华');
- 查询结果:
员工代码 姓名 家庭住址 部门代码 200001 王华 重庆 0001 200004 李江华 重庆 0001 -
表子查询
- 表子查询的语法和用法与行子查询类似,可理解为在多个行子查询结果中使用or连接起来得到一个表子查询。因此不做演示。
-