Chinaunix首页 | 论坛 | 博客
  • 博客访问: 428509
  • 博文数量: 54
  • 博客积分: 610
  • 博客等级: 上士
  • 技术积分: 721
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 10:52
文章分类

全部博文(54)

文章存档

2013年(27)

2012年(11)

2011年(16)

分类: 数据库开发技术

2011-01-24 11:05:35

连接分为:内连接、外连接、交叉连接

MOI

  

M_ID

M_NAME

M_ADDRESS

M_T_ID

1001

Guo

Nanjing

2001

1002

Fu

Xian

2002

1003

Wang

Xuzhou

2001

1004

Xue

Wl=adf

2999

TOI

T_ID

T_NAME

T_PHONE

2001

Anne

123456

2002

She

1354

2008

Wh

788


一、内连接——最常用
定义:仅将两个表中满足连接条件的行组合起来作为结果集。
在内连接中,只有在两个表中匹配的行才能在结果集中出现
关键词:INNER JOIN
格式:SELECT 列名表 FROM 表名1 [INNER] JOIN 表名2 ONWHERE 条件表达式
说明:
1)列名表中的列名可以出自后面的两个表,但如果两个表中有同名列,应在列名前标明出处,格式为:表名.列名
2)若连接的两个表名字太长,可以为它们起个别名。 格式为:表名 AS 别名
3INNER是默认方式,可以省略
eg:
select

*

from

moi m  inner join toi t

on m.m_t_id = t.t_id
其中inner可以省略。
等价于早期的连接语法
select

*

from

moi m  , toi t

where

m.m_t_id = t.t_id

结果如下:

M_ID

M_NAME

M_ADDRESS

M_T_ID

T_ID

T_NAME

T_PHONE

1001

Guo

Nanjing

2001

2001

Anne

123456

1002

Fu

Xian

2002

2002

She

1354

1003

Wang

Xuzhou

2001

2001

Anne

123456


二、外连接
1
、左(外)连接
定义:在内连接的基础上,还包含左表中所有不符合条件的数据行,并在其中的右表列填写NULL
关键字:LEFT JOIN
eg:
select

*

from

moi m  left join toi t

on m.m_t_id = t.t_id

或者写作:

select

*

from

moi m  , toi t

where

m.m_t_id= t.t_id(+)

结果如下:

  

M_ID

M_NAME

M_ADDRESS

M_T_ID

T_ID

T_NAME

T_PHONE

1

1003

Wang

Xuzhou

2001

2001

Anne

123456

2

1001

Guo

Nanjing

2001

2001

Anne

123456

3

1002

Fu

Xian

2002

2002

She

1354

4

1004

Xue

Wl=adf

2999

 

 

 


其中outer可以省略。
注意:
当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,SQL ServerInformix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句 中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:
条件在join子句
select

*

from

moi m  left join toi t

on m.m_t_id = t.t_id

and

t.t_id = '2001'
结果是:

  

M_ID

M_NAME

M_ADDRESS

M_T_ID

T_ID

T_NAME

T_PHONE

1

1001

Guo

Nanjing

2001

2001

Anne

123456

2

1002

Fu

Xian

2002

 

 

 

3

1003

Wang

Xuzhou

2001

2001

Anne

123456

4

1004

Xue

Wl=adf

2999

 

 

 


条件在where子句
select

*

from

moi m  left join toi t

on m.m_t_id = t.t_id

where

m.m_t_id = '2001'
结果是:

  

M_ID

M_NAME

M_ADDRESS

M_T_ID

T_ID

T_NAME

T_PHONE

1

1003

Wang

Xuzhou

2001

2001

Anne

123456

2

1001

Guo

Nanjing

2001

2001

Anne

123456



2
、右(外)连接
定义:在内连接的基础上,还包含右表中所有不符合条件的数据行,并在其中的左表列填写NULL
关键字:RIGHT JOIN
3
、完全连接
定义:在内连接的基础上,还包含两个表中所有不符合条件的数据行,并在其中的左表、和右表列填写NULL
关键字:FULL JOIN

三、交叉连接
定义:将两个表的所有行进行组合,连接后的行数为两个表的乘积数。(笛卡尔积)
关键词:CROSS JOIN
格式:FROM 表名1 CROSS JOIN 表名2



 

阅读(2110) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~