您的位置:首页 > 数据库

sq lserver数据库操作--连表查询

2015-12-22 14:11 337 查看
  前端时间突然忙了,于是就耽搁了一段时间,迟迟没能及时将所学的、看的记录归档。今天空闲了,在群里聊天也没了意思。于是就把这几天接触的关于数据库方面的知识做一个记录,这也是有个朋友问过我的知识点吧。

  我们都知道,数据库的连表查询无非就是join和union(当然也有通过子查询实现连表查询的效果的,但这个效率很低),而就join来说,又分为left (out) join(左连接、左外链接),right (out) join(右连接、右外链接),full join(全外连接),inner join(内连接),它们四者有何区别呢?区别在于参照上。

  左外链接,以左表为参照,右边表中没有的记录取null,右边重复的记录,则总的查询记录中就重复存在。

  右外链接,以右表为参照,左边表中没有的记录取null,左边重复的记录,则总的查询记录中就重复存在。

  完整外部连接,返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

  内连接,使用比较运算符根据每个表共有的列的值匹配两个表中的行。

  举个例子如下:

  A表: B表:

---------------------------------------------------------- ---------------------------------------------------------------

  id name id aid

  1 name1 1 1

  2 name1 2 1

  3 name1 3 null

  ---------------------------------------------------------------------------------------------------------------------------------------

  左连接:select A.id,A.name,B.id,B.aid from A a left out join B b on a.id=b.aid

  结果:

-----------------------------------------------

  a.id a.name b.id b.aid

  1 name1 1 1

  1 name1 2 1

  2 name2 null null

  3 name3 null null

  右连接:select A.id,A.name,B.id,B.aid from A a right out join B b on a.id=b.aid

  结果:

-----------------------------------------------

  a.id a.name b.id b.aid

  1 name1 1 1

  1 name1 2 1

  null null 3 null

  全连接:select A.id,A.name,B.id,B.aid from A a full out join B b on a.id=b.aid

  结果:

-----------------------------------------------

  a.id a.name b.id b.aid

  1 name1 1 1

  1 name1 2 1

  2 name2 null null

  3 name3 null null

  null null 3 null

  

  内连接:select A.id,A.name,B.id,B.aid from A a inner join B b on a.id=b.aid

  结果:

-----------------------------------------------

  a.id a.name b.id b.aid

  1 name1 1 1

  1 name1 2 1

  union可以取得两个表的交集,又分为union和union all,区别是,前者会去除重复的条目,后者会仍旧保留。做union链接的表的字段必须相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: