连接查询

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多表查询目的在于解决单表查询无法实现的复杂的信息搜集,涉及到的数据必须位于同一数据库的不同表,而表与表之间我们事先在创建数据库及表时,会明确表之间的公共字段,从而确保结果输出的是有意义的数据(难点)。

一、连接查询(难点:明确两表的连接条件、公共字段)

1、交叉连接(笛卡尔积运算)

2、内连接(条件连接重点)连接谓词:join

3、外连接where子句

4、自连接

二、子查询(重点)

以上两种查询方式不同,主要区别1、连接查询可以在最终结果中显示多张表的信息2、在于逻辑顺序不一样

本节内容:

解决查询问题思路:

1、明确查询的数据库以及涉及的多张数据表

2、明确最终输出的字段(只能来源于1中的表)

3、明确查询的条件(不只有表中查询的条件还有两个表连接

的条件)

4、书写语句

5、得到查询结果

交叉连接:

(1,2,3,)(4,5)14,15,24,25,34,35

连接原理:第一张表的每一行分别与第二张表的每一行进行连接,得到的结果集行数是两张表的行数之积,列数是两张表的列数之和。

有两张表t1和t2

例1:将t1和t2进行笛卡尔积连接

分析:t1的每一行分别和t2的每一行连接,得到一张新的表,

行数9,列数4

T1.xh=t2.xh符合这个条件的记录有意义,列名称可以只显示公共字段的一个

select*

from t1crossjoin t2

where T1.xh=t2.xh

格式一:

Select *|部分列

From 表名1,表名2 …,表名n

格式二:

Select *|部分列(若涉及公共字段要通过表名前缀来区分)From 表名1 cross join表名2 …cross join表名n

将course和class交叉连接

select*

from course,class

select*

from course crossjoin class

查看所有学生可能的选课情况

交叉连接的结果大多数都是无意义的,只有部分有意义。而结果是否有意义取决于公共字段值是否相同,若不相同则可以通过内连接的方式将它们(无意义的行记录)筛选掉,而列相同的也不需要重复出现,也可以去掉

交叉连接等值连接(相等连接)去掉连接后公共字段

不相同的记录去掉重复列内连接on 表1.字段名=表2.字段名

自然连接

内连接:在交叉连接的基础上只保留满足连接条件的记录

格式一:p110

Select 字段名列表

From 表名1,表名2 …表名n

Where 表名1.字段名=表名2.字段名and …

格式二:p113

Select字段名列表

From 表名1 [inner]join表名2on表名1.字段名=表名2.字段名…inner join 表名3 on 连接条件…

将t1和t2进行内连接

--格式解决.2

select a.学号,姓名,课程名

from A innerjoin B on A.学号=b.学号

xk例题:

1、查询学生的基本信息以及他的选课信息分析:1明确涉及的表:student,stucou

2明确输出的列:student.*,stucou.*

3连接条件:student.stuno=stucou.stuno

Select student.*,couno,WillOrder, State,RandomNum

From student join stucou on student.stuno=stucou.stuno

Select student.*,couno,WillOrder, State,RandomNum

From student,stucou

Where student.stuno=stucou.stuno

2、查询00电子商务班级学生的选课情况

select*

from class join student on

class.classno=student.classno

join stucou on student.stuno=stucou.stuno

where classname='00电子商务'

找出朱川所在的班的班级名称

Select classname

From student,class

Where student.classno=class.classno and stuname='朱川'

3、查找朱川基本信息以及所在班级名称

Select student.*,classname

From student join class on student.classno=class.classno

Where stuname='朱川'

4、查找朱川基本信息以及所在系部名称

Select student.*,departname

From student,class,department

Where student.classno=class.classno and class.departno=department.depart no and stuname='朱川'

Select student.*,departname

from student join class on student.classno=class.classno

join department on class.departno=department.departno

where stuname='朱川'

5、查找朱川基本信息以及所在系部名称、班级名称、选课课程编号

Select student.*,departname,classname,couno

From student,class,department,stucou

Where student.classno=class.classno and class.departno=department.depart no and

Student.stuno=stucou.stuno and stuname='朱川'

相关文档
最新文档