首页 > 数据库技术 > 详细

mysql的多表查询

时间:2014-04-19 15:54:28      阅读:575      评论:0      收藏:0      [点我收藏+]

转自:http://huaxia524151.iteye.com/blog/1423614

转自:http://blog.sina.com.cn/s/blog_4c197d420101cnm9.html

 

连接类型

分为三种:交叉连接(笛卡尔积)、内连接(自然连接、等值连接、非等值连接)、外连接。

 

现有表R,S如下:

表R

 bubuko.com,布布扣

表S

 bubuko.com,布布扣

(1)交叉连接(笛卡尔积)cross join

没有where子句的交叉连接将产生连接表的笛卡尔积。

 

例一:

select * from R cross join S;

select * from R,S;

结果:

 bubuko.com,布布扣

注:不需要任何条件。结果为两张表函数相乘(3x3=9)。

 

例二:

select * from R cross join S where R.C = S.C;

结果:

 bubuko.com,布布扣

(2)内连接

内连接分为三种:自然连接、等值连接、非等值连接。

 

A.自然连接 natural join:在连接条件中使用等于=运算符比较被连接列的列值,但删除连接表中重复列。

 

例一:

select * from R natural join S;

select e.empno,e.ename,m.empno,m.ename from emp e,emp m where m.mgr = e.empno; 

结果:

bubuko.com,布布扣
 B.等值连接  :使用等于=比较连接列的列值,在查询结果中列出接连表中的所有列,包括其中的重复列。

select * from R  join S where R.C = S.C;

select * from R inner join S where R.C = S.C;

结果:

 bubuko.com,布布扣

C.非等值连接:在连接条件中,可以使用其他比较运算符,比较被连接列的列值,如:<、>、!=等。

 

(3)外连接

外连接分为三类:全外连接、左外连接、右外连接。

 

A.左外连接 left join / left outer join

select * from R left join S on R.C = S.C;

 bubuko.com,布布扣

左外连接要遍历左表的所有记录,右表没有的用null表示。

 

B.右外连接 right join / right outer join

select * from R right join S on R.C = S.C;

 bubuko.com,布布扣

右外连接要遍历右表所有的记录,左表没有的用null表示。

 

C.全外连接 full join / full outer join

select * from R full join S on R.C = S.C;

 bubuko.com,布布扣

 

mysql中的全连接补充:

MySQL支持左连接,右连接,但是并不支持全连接。

通过基本是下全连接的效果。
表数据说明:

表a

bubuko.com,布布扣
表b

 bubuko.com,布布扣

 

自然连接sql:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a ,stu_b b
where a.id=b.id

 bubuko.com,布布扣

 

 

左连接sql:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
left join stu_b b
on a.id=b.id

bubuko.com,布布扣

右连接sql:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
right join stu_b b
on a.id=b.id

 bubuko.com,布布扣

 

 

合并左、右连接:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
left join stu_b b
on a.id=b.id
union
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
right join stu_b b
on a.id=b.id

 bubuko.com,布布扣

也可以是:
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
left join stu_b b
on a.id=b.id
union
select a.id as a_id,a.name as a_name, b.id as b_id,b.name as b_name
from stu_a a
right join stu_b b
on a.id=b.id
where a.id is null

 

 

 

 

 

 

mysql的多表查询,布布扣,bubuko.com

mysql的多表查询

原文:http://www.cnblogs.com/x_wukong/p/3670439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!