- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)