数据库多表连接查询
来源:互联网 发布:阿里云企业网站 编辑:程序博客网 时间:2024/03/29 01:43
之前在面试过程中,遇到很多关于数据库多表查询的问题,感觉答得不甚清晰,现在具体予以总结。
准备工作
首先建立两张数据表,只是介绍连接查询,数据表务求简单,而且没有主键设定:
数据表(employee)
1.建立员工信息表(employee)
create table employee
(employee_id integer(5),employee_name varchar(50),employee_depId integer(6))
2.插入数据
insert into employee values(1,”elvis”,2)
….
3.查看数据表
select * from employee
如图所示:
数据表(departInfo)
1.创建数据表(departInfo)
create table departInfo
(depart_id integer(5),depart_name varchar(50))
2.插入数据
insert into departInfo values(1,”Asia Area”)
…..
3.查看数据表
select * from departInfo
多表查询
1.内连接查询
可以有两种实现方式,不过这两种方式一般等效
注意这两种方式的区别:
第一种,使用where,第二种使用on
select employee_id,employee_name,depart_id,depart_name from employee as a , departInfo as b WHERE
a.employee_depid = b.depart_id order by employee_id ascselect employee_id,employee_name,depart_id,depart_name from
employee as a inner join departInfo as b ON
a.employee_depid = b.depart_id order by employee_id asc
显示结果:
解析:采用内连接计算的时候必须保证连接的条件 e.employee_depid = b.depart_id匹配,结果才会被检索出来。当我们连接两张检索数据的时候,检索的方式是首先逐行扫描“员工信息表”中的记录,然后根据连接条件来决定此记录是否被检索。“xin”这条记录还没有分配部门(新人),没有对应的employee_depdi,检索的时候,不予显示。
2.左外连接(Left OUTER join)
注意:是outer 不是 out,连接条件 用 ON 不是 where
如果想知道所有员工的信息(包括新人xin),即使他还不属于任何部门,这时可以使用左外连接。即:连接中左表的表中的记录,无论能不能在右表中找到匹配的项目,都要检索,如果没有匹配的项目,那么右表中的字段值为NULL,标识此员工不属于任何部分。
语句:
select employee_id,employee_name,depart_id,depart_name from
employee as a left outer join departInfo as b ON a.employee_depid = b.depart_id order by
a.employee_id desc
查询结果:
3.右外连接
类似与左外连接,如果想知道右表中的所有记录信息,就可采用右外连接,如果此记录在左边的表中找不到匹配项,则相应字段为NULL。
查询语句:
select employee_id,employee_name,depart_id,depart_name from
employee as a right outer join departInfo as b ON a.employee_depid = b.depart_id order by
a.employee_id desc
查询结果:
4.完全外连接(full outer join)
如果想知道所有记录,无论员工有没有归属部门,部门有没有分配员工,都需要将记录检索出来,可以使用完全外连接。
查询语句:
select employee_id,employee_name,depart_id,depart_name from
employee as a full outer join departInfo as b ON
a.employee_depid = b.depart_id order by employee_id asc
查询结果
MySql 不支持full outer join ,上图是通过
如下sQl 语句获得;
select a.employee_id,a.employee_name,b.depart_id,b.depart_name from
employee as a left OUTER JOIN departInfo as b ON a.employee_depid = b.depart_id
UNION ALL
select a.employee_id,a.employee_name,b.depart_id,b.depart_name from
employee as a RIGHT OUTER JOIN departInfo as b ON a.employee_depid = b.depart_id
感觉不甚正确….
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 连接数据库,多表查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询(外连接和内连接)
- 数据库多表连接查询(外连接和内连接)
- 数据库多表连接查询详解
- 数据库多表连接查询详解
- 数据库多表连接查询问题
- 数据库多表连接查询详解
- 看好你的门-攻击数据存储区(2)-SQL注入常用的一些技巧
- MRtmpLib:rtmp客户端协议实现之rtmp播放器实现(四)
- 冷启动与热启动的区别
- [CoffeeScript]咖啡,向服务器端进军!
- Linux命令中使用正则表达式
- 数据库多表连接查询
- NYOJ 会场安排问题 14
- poj 2967 Triangles 排序
- Hibernate根据数据库表生成持久化类和映射文件
- Android客户端制作之连接URL
- iOS 获取当前地理位置文本
- sgu-234 Black-White King Strikes Back
- svn配置
- 贪吃蛇游戏,带声音带彩色,标准C++