第八讲 SQL语言之数据查询(2) 第三讲 SQL Server 2000 数据库技术
三. 连接查询 若一个查询同时涉及两个以上的表,则 称为连接查询。连接查询是关系数据库 中最主要的查询,包括: ①等值连接查询、非等值连接查询、 自然连接查询 ②自身连接查询 ③内连接查询、外连接查询 ④复合条件连接查询 数据库技术
三. 连接查询 1.等值与非等值连接 有些列同时出现在不同表中,例如在表student和表sc中都有sno列。使用等值连接可以把两个表中相对应的记录连接在一起,得到来自两个表的数据。 简单点,就是当使用到连接运算符=式,称为 等值运算。 数据库技术
三. 连接查询 例如: ① 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 数据库技术
三. 连接查询 注意问题: ①知道“表名.字段”这种写法的含义;特殊点, 清楚“表名.*”的含义。 ②如果省去前面的表名会怎样? ③如果表名称太长的话可以适当使用as子句。 使用as对字段和数据表起“别名”的时候, 字段如果在后面使用还是用原来的名称, 数据表则需要用别名? 数据库技术
三. 连接查询 自然连接: 如果在目标列中去掉相同属性列 注意下面语句的区别,那个可以理解为自然连接? ① select student.sno,sc.sno,sc.cno,sc.grade from student,sc where student.sno=sc.sno ② select student.sno,sc.cno,sc.grade 如果select和where中的属性列名是唯一的,可以 去掉表名前缀 数据库技术
三. 连接查询 非等值连接: 如果连接条件中不使用等号,可以使用<,>等,也可以使用 between...and等谓词,如: select student.sno,sc.cno,sc.grade from student,sc where student.sno>sc.sno 不过本例中没实际意义,实际中,绝大多数都使用等值连接 数据库技术
三. 连接查询 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 数据库技术
三. 连接查询 3.内连接和外连接 表之间的连接可以分为等值连接和非等值连接,也可以分为内连接(inner join)和外连接(outer join)。 数据库技术
三. 连接查询 内连接 内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。 数据库技术
三. 连接查询 内连接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 数据库技术
三. 连接查询 内连接分三种: ①等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。 ②不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。 ③自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列 数据库技术
三. 连接查询 外连接 与内连接相对,参与外连接outer join的表有主次之分,以主表的每一行数据去匹配从表中的数据列。符合连接条件的数据将直接返回到结果集中,对于那些不符合连接条件的列,将被填上null值后再返回到结果集中。外连接又可以分为左连接(left outer join)和右连接(right outer join)。如果主表在左侧,则称为左连接,反之,称为右连接。 数据库技术
三. 连接查询 左连接语法: from 表1 left [outer] join 表2 on <条件表达式> 在这个语法格式中,位于left join运算符左边的表 称为主表,右边的表为从表;条件表达式用于指定主 表与从表之间的连接条件。使用左连接时,除了返回 内部连接的记录以外,还在查询结果中显示出主表中 不符合连接条件的记录并在从表的相应字段中填上空 值null。 数据库技术
三. 连接查询 例如: select student.sno,sc.grade from student left join sc on student.sno=sc.sno 数据库技术
三. 连接查询 右连接语法: from 表1 right [outer] join 表2 on <条件表达式> 在这个语法格式中,位于right join运算符左边的表 称为从表,右边的表为主表;条件表达式用于指定主 表与从表之间的连接条件。使用右连接时,除了返回 内部连接的记录以外,还在查询结果中显示出主表中 不符合连接条件的记录并在从表的相应字段中填上空 值null。 数据库技术
三. 连接查询 例如: select student.sno,sc.grade from sc right join student on student.sno=sc.sno 数据库技术
三. 连接查询 简化左连接和右连接,使用“*=”和“=*” 在where子句中使用: “ 列名1*=列名2 ”和“ 列名1=*列名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值。 数据库技术
三. 连接查询 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 数据库技术
Thank You !