加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SQL数据库中 内连接 外连接和自连接(备忘)

(2008-03-17 22:50:47)
标签:

内连接

sql数据库

左表

up

   SQL查询中需要跨越多个表时就需要使用连接查询,今天我把自己的实验心得写下来,就当做备忘录吧。
    首先是内连接,是用的比较多的一种,内连接是指多个表通过连接条件中共享列的相等值进行的匹配连接,它主要有两种形式:等价连接和自然连接。等价连接会产生冗余列,因为它将连接条件中的共享列显示两次,而自然连接则清除了等价连接产生的冗余列,因此我们所说的内连接在没有特殊说明书的情况下都指的自然连接。
    我这里有两个表“XSQK”和“COURSE”如下图:
          show table.JPG
我们通过内连接来查询每位同学都选择了哪门课,结果如下:
      show table.JPG
由此我们可以看出,表XSQK中的所选课程和COURSE中的课程号进行比较,
最终得出每位同学所选择的课。
    二、外连接
     左连接,结果如下图所示:
          3leftjoin.JPG
我们可以看出,左连接是以 “Leftjoin”左边的表为基准,将XSQK的课程号和COURSE的ID进行比较,如果相等则显示出来,什么是左表呢?连接符号(LEFTJOIN左边的表是左表,反之则是右表),如果“LeftJoin”左边的表中有值,而右边表中没有匹配的选项,则显示,反之则不会显示,并且不匹配记录的列会被置空。如:示例中最后一条ID为4的记录,这条记录与所比较的条件(XSKQ.课程号=COURSE.ID)并不匹配,但是因为它在左表XSQK中,因此它被显示出来。
     右连接,与左连接恰恰相反,运行结果如下图:
  3leftjoin.JPG
因为没有人选择数学和音乐这两门课,本来是不匹配查询条件的,但是因为是右连接,所以也被显示。
     三、自连接
     说白了,就是自己跟自己比较。就是把使用内连接或外连接把一个表中的行同该表中另外一些行连接起来,它主要用在查询比较相同的信息。为了连接同一个表,必须为该表在FROM子句中指定两个别名,这样才能在逻辑上把该表作为两个不同的表使用。
    示例表2,如下图:
  6自连接.JPG
该表有三连组成,分别是部门ID、部门名称、部门所属上级部门(UP_id)
  我们使用自连接进行查询,需要找出每个部门所属的上级部门。因为,这个表结构不够清晰,因为部门和所属的上级部门混在同一个表中。使用自连接查询结果如下图:6自连接.JPG
 
可能理解起来有些困难,我在下面做一下解释如下图:
   6自连接.JPG
看上图可能好理解一点,让A的UP_ID和B的ID相比较,就能得出部门以及所属上级部门。
 
 
 
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有