第八讲 SQL 语言之数据查询 (2)

21
第第第 SQL 第第第第第第第 (2) 第第第第第

description

第八讲 SQL 语言之数据查询 (2). 数据库技术. 三 . 连接查询. 若一个查询同时 涉及两个以上的表 ,则 称为连接查询。连接查询是关系数据库 中最主要的查询,包括: ①等值连接查询、非等值连接查询、 自然连接查询 ②自身连接查询 ③内连接查询、外连接查询 ④复合条件连接查询. 三 . 连接查询. 1. 等值与非等值连接 有些列同时出现在不同表中,例如在表 student 和表 sc 中都有 sno 列。使用等值连接可以把两个表中相对应的记录连接在一起,得到来自两个表的数据。 - PowerPoint PPT Presentation

Transcript of 第八讲 SQL 语言之数据查询 (2)

Page 1: 第八讲  SQL 语言之数据查询 (2)

第八讲 SQL语言之数据查询(2)

数据库技术

Page 2: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

若一个查询同时涉及两个以上的表,则 称为连接查询。连接查询是关系数据库 中最主要的查询,包括: ①等值连接查询、非等值连接查询、 自然连接查询

②自身连接查询 ③内连接查询、外连接查询 ④复合条件连接查询

Page 3: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

1.等值与非等值连接 有些列同时出现在不同表中,例如在表student和表 sc中都有 sno列。使用等值连接可以把两个表中相对应的记录连接在一起,得到来自两个表的数据。

简单点,就是当使用到连接运算符=式,称为 等值运算。

Page 4: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

例如: ① select student.sno,sc.cno,sc.grade

from student,sc where student.sno=sc.sno ② select s.sno,c.cno,sc.grade

from student as s,sc as c

where s.sno=c.sno

Page 5: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

注意问题:① “知道 表名 . ”字段 这种写法的含义 ;特殊点,

“清楚 表名 .*”的含义。②如果省去前面的表名会怎样?③如果表名称太长的话可以适当使用 as子句。 使用 as “ ”对字段和数据表起 别名 的时候, 字段如果在后面使用还是用原来的名称, 数据表则需要用别名?

Page 6: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

自然连接 : 如果在目标列中去掉相同属性列

注意下面语句的区别, 那个可以理解为自然连接?① select student.sno,sc.sno,sc.cno,sc.grade

from student,sc where student.sno=sc.sno ② select student.sno,sc.cno,sc.grade

from student,sc where student.sno=sc.sno

如果 select和 where中的属性列名是唯一的, 可以去掉表名前缀

Page 7: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

非等值连接: 如果连接条件中不使用等号,可以使用 < , > 等,也可以使用 between...and等谓词 , 如:

select student.sno,sc.cno,sc.grade from student,sc where student.sno>sc.sno

不过本例中没实际意义,实际中,绝大多数都使用等值连接

Page 8: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

2.自身连接 连接查询还可以建立表到其自身的连接。 例如查询年龄相同的学生姓名和年龄: select distinct s1.sno,s1.sage from student s1, student s2 where s1.sno<>s2.sno and s1.sage=s2.sage order by s1.sage

Page 9: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

3.内连接和外连接表之间的连接可以分为等值连接和非等值连接,也可以分为内连接( inner join)和外连接( outer join)。

Page 10: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

内连接 内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

Page 11: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

内连接 inner join语法( t-sql推荐用法): from 表 1 [inner] join 表 2 on <条件表达式 >如: select course.cno,sc.sno from course inner join sc

on course.cno=sc.cno注意和下面的语句有没有什么区别: select course.cno,sc.sno from course,sc where course.cno=sc.cno

Page 12: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

内连接分三种:①等值连接:在连接条件中使用等于号 (=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

②不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括 > 、 >=、 <=、 < 、 !>、 !<和 <>。

③自然连接:在连接条件中使用等于 (=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列

Page 13: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

外连接 与内连接相对,参与外连接 outer join的表有主次之分,以主表的每一行数据去匹配从表中的数据列。符合连接条件的数据将直接返回到结果集中,对于那些不符合连接条件的列,将被填上 null值后再返回到结果集中。外连接又可以分为左连接 (left outer join)和右连接(right outer join)。如果主表在左侧,则称为左连接,反之,称为右连接。

Page 14: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

左连接语法:from 表 1 left [outer] join 表 2 on <条件表达式 >

在这个语法格式中,位于 left join运算符左边的表称为主表,右边的表为从表;条件表达式用于指定主表与从表之间的连接条件。使用左连接时,除了返回内部连接的记录以外,还在查询结果中显示出主表中不符合连接条件的记录并在从表的相应字段中填上空值 null。

Page 15: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

例如: select student.sno,sc.grade from student left join sc on student.sno=sc.sno

Page 16: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

右连接语法:from 表 1 right [outer] join 表 2 on < 条件

表达式 >

在这个语法格式中,位于 right join运算符左边的表称为从表,右边的表为主表;条件表达式用于指定主表与从表之间的连接条件。使用右连接时,除了返回内部连接的记录以外,还在查询结果中显示出主表中不符合连接条件的记录并在从表的相应字段中填上空值 null。

Page 17: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

例如: select student.sno,sc.grade from sc right join student on student.sno=sc.sno

Page 18: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

简化左连接和右连接,使用“ *=”和“ =*” 在 where子句中使用: “ 列名 1*=列名 2 ”和“ 列名 1=*列名2 ”

Page 19: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

如前面例子可改成:①select student.sno,sc.grade from student,sc

where student.sno* =sc.sno②select student.sno,sc.grade from sc,student

where student.sno=*sc.sno可以看出左右连接是很相似的,只是要确定那个是主表那个是从表,如果当主表有不符合条件的记录,此时会在从表添加 null值。

Page 20: 第八讲  SQL 语言之数据查询 (2)

数据库技术

三 . 连接查询

4. 复合条件连接 where 子句中有多个连接条件,用于连接多个表, 还可以写上选择条件。 如查询每个学生的学号,姓名,选修的课程名和成绩:

select s.sno,s.sname,c.cname,sc.grade from student as s,course as c,sc where s.sno=sc.sno and sc.cno=c.cno

Page 21: 第八讲  SQL 语言之数据查询 (2)