sql连接查询
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.连接概述 连接概述
连 接 查 询
命令格式: SELECT {table_alias.column}[,… n] FROM table_s_name [AS] table_alias [,… n] 注意: a.在一个SELECT 语句中,系统首先执行FROM子句 ,然后执行SELECT,所以一旦在FROM子句中定义了表的 别名,尽管SELECT子句在FROM前面,也要使用别名。 b.在一个定义了别名的SELECT 语句中,从FROM子句 向后是依次执行的,因此,FROM后的每一个子句只有在其 前面定义了别名后才能够并且只能够使用别名。别名的作用 范围仅限于本T-SQL语句中,而其他独立的T-SQL语句无权 使用这个别名。
注:与上题的区别
15
三.外连接 外连接
连 接 查 询
三.全外连接 (full outer join)
全外连接是将左表中的所有记录分别与右表中的每条 记录进行组合,结果集中除返回内部连接的记录以外,还 在查询结果中返回两个表中不符合条件的记录,并在左表 或右表的相应列中填上NULL 【例】学生信息表全外连接成绩信息表. (则不管两个的行是否满足连接条件,均返回 至查询结果集)
【例】查询学生成绩表score中与学号为”1006100101”的学生 所学课程相同的学生的学号,姓名,课程号,成绩 select s2.sno,s1.cno,grade from score s1,score s2 where s1.cno=s2.cno and s1.sno<>s2.cno and s1.sno='1006100101'
连接查询
连 接 查 询
在实际应用中,数据查询往往会涉及到多个表 ,这就需要将多个表连接起来进行查询。 连接查询是关系数据库中最主要的查询.在T_SQL中, 连接查询有两大类表示形式: A.符合SQL标准连接谓词表示形式 B.T_SQL扩展的使用关键字join的表示形式(这种 连接分为内连接、外连接、交叉连接和自连接4种.)
一Baidu Nhomakorabea连接概述 连接概述
连 接 查 询
多表联接查询实际上是通过各个表之间共同列的关联性来查 询数据,使用时应该注意以下几点: 1.尽可能以表的主键和外键来指定联接条件,如果以各 表共同拥有的列来指定联接,则这些列的数据类型必须相同 或相兼容。 2.如果所要联接的表具有相同的列名,则在引用这些列 的时候,必须指定其表名,格式为:表名.列名 3.参与联接查询的表的个数越多,SQL SERVER处理这个 查询所花费的时间就越长,所以应该尽量限制表的个数。 4.当表的名称太长时,为了书写上的方便简单,在SQL 语言的查询语句中可以定义表的别名。 5
13
三.外连接 外连接
连 接 查 询
一.左外连接 (left outer join)
所谓左外联接指的是返回参与联接查询的表中所有匹 配的行和所有来自左表的不符合指定条件的行。在右表中 对应于左表无记录的部分用NULL值表示。 【例】查找没有选课的学生信息:要求用左外连接完成。 Select * from student a left outer join score b on a.sno=b.sno where grade is null
3
一.连接概述 连接概述
在where子句中定义连接的语法格式如下: SELECT 表名.列名1 [ ,...n ] FROM 表名1 [ ,...n ] WHERE {表名1.列名 联接条件 表名2.列名 } [ ,...n ] ANSI连接语法格式如下: SELECT 表名.列名1 [ ,...n ] FROM { 表名1 [联接类型] JOIN 表名2 join) 内连接(inner 内连接 用来指定 外连接(outer join) 连接条件 ON 连接条件 } [ ,...n外连接 ] 交叉连接(cross join) 交叉连接 WHERE 查询条件 (注意:1.查询操作对行进行筛选的逻辑顺序)
11
二.内连接 内连接
连 接 查 询
三.不等值连接
在连接条件中使用除等号(=)运算符以外的其他比较 运算符,比较被连接的列的列值.
12
三.外连接 外连接
连 接 查 询
在上面的连接操作中,不满足连接条件的 元组不能作为查询结果输出。 外连接根据连接时保留表中记录的侧重不 同分为“左外连接”(left outer join)、“ 右外连接”(right outer join)和“全外连接 ”(full outer join)。
二.内连接 内连接
连 接 查 询
内连接(Inner Join)也叫自然连接,使 用JOIN或INNER JOIN关键字表示。在内连接中 ,只有在两个表中匹配的行才能在结果集中出 现。 通常有3种:
1.等值连接 2.自然连接 3.不等值连接
9
二.内连接 内连接
连 接 查 询
一.等值连接
在连接条件中使用等号(=)运算符比较表中的列值. 在select子句中并没指定所需显示的列,因此连接的列会 显示两次,产生冗余列. 【例】查询所有参加考试的学生基本信息和成绩信息 select * from student inner join score on student.sno=score.sno
14
三.外连接 外连接
连 接 查 询
二.右外连接 (right outer join)
和左外连接类似,右外连接是将左表中的所有记录分别 与右表中的每条记录进行组合,结果集中除返回内部连接的 记录以外,还在查询结果中返回右表中不符合条件的记录, 并在左表的相应列中填上NULL
【例】student表右外连接score表 Select * from student a right outer join score b on a.sno=b.sno order by a.s no,a.s name,b.course id
18
四.交叉连接 交叉连接
连 接 查 询
select * from student cross join course 【例】student表交叉连接course表
19
五.自连接 自连接
连 接 查 询
自连接就是一个表的两个副本之间的内连接。表 名在FROM子句中出现两次,必须对表指定不同的别名 ,在SELECT子句中引用的列名也要使用表的别名进行 限定。
10
二.内连接 内连接
二.自然连接
连 接 查 询
在连接条件中使用等号(=)运算符比较被连接 列的列值.但他使用选择列表指定查询结果集合中 所包括的列,并删除连接表中的重复列. 【例】
select s.* ,cno,grade from student s inner join score sc on s.sno=sc.sno
6
一.连接概述 连接概述
A. 在where子句中定义连接 【例】查询每个学生的学号,姓名,邮编等基本信息及其所 选课程的成绩情况: select student.sno,sname,spostno,cno,grade from student,score where student.sno=score.sno 【例】查询学生的学号,姓名,院系名称和专业名称 select s.sno 学号,sname 姓名,classname 班级, p.pname 专业名,dname 系部名称 from student s,class c,profression p,department d where s.classno=c.classno and c.pno=p.pno and p.dno=d.dno
7
一.连接概述 连接概述
B. ANSI连接即在from子句中定义连接
连 接 查 询
具体分为以下几种: INNER JOIN :显示符合条件的记录,此为默认值,可省略inner; LEFT (OUTER) JOIN:显示符合条件的数据行以及左边表中不符合条 件的数据行,此时右边数据行会以NULL来显示,此称为左连接; RIGHT (OUTER) JOIN:显示符合条件的数据行以及右边表中不符合条 件的数据行,此时左边数据行会以NULL来显示,此称为右连接; FULL (OUTER) JOIN:显示符合条件的数据行以及左边表和右边表中 不符合条件的数据行,此时缺乏数据的数据行会以NULL来显示; CROSS JOIN:会将一个表的每一笔数据和另一表的每笔数据匹配成新的 数据行。 当将JOIN 关键词放于FROM子句中时,应有关键词ON与之相对应,以表 8 明连接的条件。
20
回顾
连接查询
where子句中连接谓词 使用jion关键字 等值连接 自然连接 不等值连接 左外连接 left 右外连接 right 全外连接 full
–内连接 –外连接
不能限定条件 不使用where子句 –自连接
–交叉连接
必须给表指定别名
21
子项目4 子项目 学生信息管理数据库应用
任务4.1.3 任务4.1.3
多表查询
任务描述
本任务主要是在单表查询的基础上的深入,也是 我们实现查询的重点。 要求同学们能够在系统的功能页面中实现基于多 表信息的查询。如输入学号或姓名,能够查找学生的 各门课程的成绩,或查找出图书的借阅信息等。 具体内容: 1、设计系统功能页面 2、编制查询语句 3、汇报及修改
16
三.外连接 外连接
连 接 查 询
以上三种连接均可以使用where子句和having子句对 搜索条件进行限定,删除不复合条件的记录.
17
四.交叉连接(cross join) 交叉连接
连 接 查 询
所谓交叉联接指的是将两个表进行拼接,结果 表是由第一个表的每行与第二个表的每一行拼接 后形成的表,因此结果表的行数等于两个表的行数 之积,不需要用ON子句来指定两个表之间任何连 接的列。(即交叉连接不能带有条件,且不使用 where子句)