再看数据库——(6)连接

简介:

连接是多表查询的基础。

由于关系数据库不包含指针或其他关联记录与记录的机制,连接成为了生成跨表数据关系的唯一机制。这也就是要用连接的原因。

分类:

1、内连接

使用比较运算符比较被连接列的列值。

等值——"="

不等——"="以外运算符

自然——"=",但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

示例:

数据库中的两张表分别为dbo.Staff和dbo.Province.

注:dbo.Staff表中的主键为Code,dbo.Province表中的NameCode即为第一张表的主键。

dbo.Staff


dbo.Province


SELECT * FROM dbo.Staff,dbo.Province_Staff WHERE dbo.Staff.Code=dbo.Province_Staff.NameCode


使用别名为

SELECT * FROM dbo.Staff AS s,dbo.Province_Staff AS p WHERE s.Code=p.NameCode

等价于

SELECT * FROM dbo.Staff AS s INNER JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


显示结果:



内连接时,如果被连接的表不包含被匹配的记录,有可能丢失信息。


2、外连接

查到的结果集合中包含了符合连接条件的行,也包括连接中的所有行

左外连接(也叫左关联):

示例:

SELECT * FROM dbo.Staff AS s LEFT JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


显示结果:


对比图中的两个表,左外连接是以左边的表(dbo.Staff)为基准,补充右表的内容,如果没有相应的匹配项,则显示为NULL

右外连接

示例:

SELECT * FROM dbo.Staff AS s RIGHT JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


显示结果:

全外连接

示例:

SELECT * FROM dbo.Staff AS s FULL OUTER JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


显示结果:

执行时中先以Dbo.Staff表进行左外连接,然后以dbo.Province_Staff表进行右外连接。


3、交叉连接

示例:

select *from dbo.Staff as s CROSS Join dbo.Province_Staff as pOrder by s.Code


显示结果:

先按dbo.staff表的Code排序,要Join的右表无条件拼接过来。这样依次执行,这样这种记录便为两个表的记录的笛卡尔积。

总结:

    在使用多表查询时,也可以不用连接查询,那就需要用大量的where...and语句来代替。连接查询有优点,也有缺点。优点是SQL语句的可读性好,易于维护和扩展。缺点是相比之下,查询效率比较低。当然,也有很多人提出改善连接查询效率的办法,这就由开发人员根据需求做出选择。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值