多表连接查询内,外,交叉连接.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多表连接查询 内,外,交叉连接 连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征. select表1.字段名1,表2.字段名2,. from表1,表2 where连接条件 SQL-92标准所定义的FROM子句的连接语法格式为: FROM表名join_type表名[ON(连接条件)] 连接操作中的ON(连接条件)子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构 成。 连接查询分类: 1.自连接查询,对同一个表进行连接操作(可以理解为两个不同表的内连接,有时可与嵌套查询等价) 2.内连接查询,又分为:自然连接、等值连接、不等值连接三种 3.外连接查询,又分为:左外连接、右外连接、全外连接三种 4.交叉连接查询,也作无条件查询。 5.联合查询 一.自连接查询: 一个表自己与自己建立连接称为自连接或自身连接。 进行自连接就如同两个分开的表一样,可以把一个表的某一行与同一表中的另一行连接起来。 例: 查询选学"101"课程的成绩高于"9505201"号学生成绩的所有学生记录, 并按成绩从高到低排列。 select x.*from sclass x,sclass y where x.cno=''101''and x.degree y.degree and y.sno=''9505201''and y.cno=''101'' order by x.degree desc 二.内连接查询 内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 1、等值连接: 所谓等值连接,是指表之间通过"等于"关系连接起来,产生一个临时表, 然后对该临时表进行处理后生成最终结果。其查询结果中列出被连接表中的所有列, 包括其中的重复列。 SELECT* FROM authors AS aINNER JOIN publishers AS p ON a.city=p.city 我们可以有两种方式,这两种是等效的 一种是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS dWHERE e.deptid=d.deptid 另外一个是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS eINNER JOIN DeptTB AS dON e.deptid=d.deptid 3、自然连接: 在等值连接中消除重复列就是自然连接。(state,city在两个表中都存在) SELECT a.*,p.pub_id,p.pub_name,p.country FROM authors AS aINNER JOIN publishers AS p ON a.city=p.city 三外连接查询(左外连接、右外连接、全外连接) 首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述 连接的概念,所以字段非常的简单 EmployeeTB(员工信息表): employeeid employeename deptid 0001张三01 0002李四01 0003王五 02 0004赵六02 0005郑七NULL DeptTB(部门信息表) deptid deptname 01技术部 02市场部 03工程部 1左外联结 但是有些情况下,我们需要知道所有员工的信息,即使他不属于任何部门。 这样我们就可以采用外连接,在这里为左外连接,也就是连接中的左表的表中 的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目, 那么右表中的字段值为NULL(空),在这里就代表,此员工不属于任何部门。 检索语句为: SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS eLEFT OUTER JOIN DeptTB AS dON e.deptid=d.deptid 检索的结果都是: employeeid employeename deptname 0001张三技术部 0002李四技术部 0003王五市场部 0004赵六市场部 0005郑七NULL 但是在这里,工程部同样不会被检索,因为,deptname是在连接的右边的 表中,"工程部"在左表中不存在任何的记录,所以不会被检索。这里关注的是" 连接中的左边的表" 2、右外连接 有时,我

文档评论(0)

ryaoo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档