数据库多表连接查询

来源:互联网 发布:阿里云企业网站 编辑:程序博客网 时间: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 asc

  • select 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

感觉不甚正确….

0 0
原创粉丝点击