资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第8章 关系数据库的结构化查询语言SQL -多表连接查询,多表连接查询,8.2,UNION合并查询,8.3,嵌套查询,8.4,单表查询,8.1,第8章 关系数据库的结构化查询语言SQL,1,一、多表连接查询,1、传统连接方式,Select 学号,课程名,From 选修表,,,课程表,Where,选修表,.课程号=课程表.课程号,选修表,课程表,一、多表连接查询1、传统连接方式选修表课程表,2,2、SQL的连接方式JOIN连接(基本原理),JOIN的意义是将,多个数据表,的记录,横向,连接起来,,然后利用ON来设置条件以过滤不需要的记录。例,如:将下面的两个简单的表JOIN的结果为:,选修表,课程表,2、SQL的连接方式JOIN连接(基本原理)选修表课程表,3,Select 学号,,课程名,,成绩,From 课程表,JION,选修表,On,课程表,.课程号=选修表.课程号,生成后的表,Select 学号,课程名,成绩生成后的表,4,在新的SQL标准中规定了专门的连接语句格式:,Select ,From join join 关系3,on,on,on,Where ,注意:join的顺序和on的顺序是逆着的.,在新的SQL标准中规定了专门的连接语句格式:,5,2、JOIN的类型:inner、left、right、full 和Cross,可以使用JOIN参数将那些数据表结合在一起,依据不用,的查询目的,JOIN的方式可分为多种类型:,inner JOIN,:只显示符合条件的数据行,此为默认的,JOIN方式,因此,INNER参数可以省略。,LEFT JOIN,:显示符合条件的数据行,以及左边数据,表中不符合条件的数据行(此时右边数据行会以NULL,来显示),2、JOIN的类型:inner、left、right、,6,RIGHT JOIN,:显示符合条件的数据行,以及右边数据表中不符合条件的数据行(此时左边数据行会以NULL来显示),FULL JOIN,:显示符合条件的数据行,以及左边和右边数据表中不符合条件的数据行(此时缺乏数据的数据行会以NULL来显示),CROSS JOIN,:此类型会直接将一个数据表的每一条数据行和另一个数据表的每一条数据行搭配成新的数据行,不需要用ON来设置条件(表3就是通过这种方式由表1和表2产生的)。,RIGHT JOIN:显示符合条件的数据行,以及右边数据表中,7,选修表,课程表,Select 课程名,学号,From 课程表,left JoiN,选修表,On 课程.课程号=选修.课程号,选修表课程表Select 课程名,学号,8,选修表,学生表,Select 姓名,课程号,From 选修,right JoiN,学生,On 选修.学号=学生.学号,选修表学生表Select 姓名,课程号,9,选修表,学生表,Select 姓名,课程号,From 选修,cross JoiN,student,On 选修.学号=student.学号,选修表学生表Select 姓名,课程号,10,三、UNION合并,UNION可将多个SELECT语句的查询结果合并成一组。,从图中我们能够看出UNION是将多个查询结果做上,下,垂直合并,,所以字段数不会增加,而JOIN做的是,左右水平合并,。,三、UNION合并UNION可将多个SELECT语句的查询结,11,UNION合并很简单:但必须符合下列条件:,欲合并的查询结果,其,字段数,必须,相同;,欲合并的查询结果,其对应的字段一定要具备兼容,的,数据类型,,即数据类型可以不同,但两者必须能,够相互转换,合并后的结果:,合并结果的字段名称会以第一个查询结果 字段名称,为名,其他查询结果的字段则会被忽略。,UNION合并很简单:但必须符合下列条件:,12,合并时,若对应的字段具备不同的数据类型,则会进行兼容性类型转换,转换原则是可容纳较多数据的类型为主。假设乙列是CHAR(10)类型,丁列是CHAR(20)类型,则合并后的乙列是CHAR(20)类型。,合并时,若对应的字段具备不同的数据类型,则会进行兼容性,13,例如有2个数据表,例如有2个数据表,14,分别从员工及客户这两个数据表中查询员工及客户,的姓名和地址,然后将这两个查询结果合并成一分,Select 姓名 as 邀请名单,地址,From 员工,UNION,Select 联络人,地址,From 客户,Order by 姓名,分别从员工及客户这两个数据表中查询员工及客户Select 姓,15,GROUP BY 和HAVING子句只能用在个别,Select_statemen中,不可用在整个语句的最后。,ORDER BY 及子句则只能用在整个语句,的最后,,,针对最后的合并结果做排序或计算,不能,用在个别Select_statemen中。,ALL:如果设置ALL参数,最后的合并结果会将重,复的记录都显示出来。如果不设置ALL参数,则在,合并中,重复的记录将只会显示一笔。,GROUP BY 和HAVING子句只能用在个别,16,UNION的语法:,Select_statemen,UNION,select_statemen,UNION,select_statemen,order by,UNION的语法:,17,四、嵌套查询-子查询,子查询是指包含在主要查询中的另一个SELECT查,询。通常会利用子查询先挑选出部分数据,以作为,主要查询的数据来源或选取条件子查询的语法与范,例子查询的语法和select语句一样,但有下列限,制:,整个子查询语句需用小括号括住,四、嵌套查询-子查询子查询是指包含在主要查询中的另一个SEL,18,select,姓名,from 学生表,where,学号,in,(select,学号,from,选修,where,课程号,=ww01),查询选修了,课程号,是,ww01,课程的学生,姓名,select 姓名 from 学生表查询选修了课程号是,19,子查询的类型与处理方式:,子查询的返回结果可分三种类型,单一值,单列,多行数据和不限列数的多条数据,而用来处理子查,询的返回结果的方法也分3种:,方法一:直接取值:直接使用子查询的返回值,例,如=、做比较或进行其他运算。,方法二:比较清单:使用in、all运算符判断某个值是,否存在于返回清单中.,方法三:测试存在,使用exists运算符判断是否返回,数据。,子查询的类型与处理方式:,20,select 学号 from 选修表,where,成绩,=,(select,max(成绩),from 选修表where,课程号=ww01),查询WW01课程的最高分学生的学号,select 学号 from 选修表,where,成绩,=all,(select,成绩,from 选修表where,课程号=ww01),select 学号 from 选修表查询WW01课程的最,21,select 学号 from 选修表,where,成绩,=,(select,min,(成绩),from 选修表where,课程号=ww01),查询WW01课程的最低分学生的学号,select 学号 from 选修表,where,成绩,any,(select,成绩,from 选修表where,课程号=ww01),select 学号 from 选修表查询WW01课程的最,22,供应表,职工表,仓库表,订购单表,供应表职工表仓库表 订购单表,23,例1、查询所有职工的工资都多于1210元的仓库信息。,例2、查询供应商为华通电子的订单单号。,例3、检索有职工的工资大于或等于WH1仓库中所有职工的工资的仓库号。,例4、检索哪些仓库中至少已经有一个职工的仓库的信息。,例1、查询所有职工的工资都多于1210元的仓库信息。,24,
展开阅读全文