第七章结构化查询语言—SQL_第1页
第七章结构化查询语言—SQL_第2页
第七章结构化查询语言—SQL_第3页
第七章结构化查询语言—SQL_第4页
第七章结构化查询语言—SQL_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上一页下一页1第七章第七章 结构化查询语言结构化查询语言SQLSQL第一节第一节 SQLSQL概述概述第二节第二节 SQLSQL定义功能定义功能 第三节第三节 SQLSQL操纵功能约操纵功能约第四节第四节 SQLSQL查询功能查询功能上一页下一页2第一节第一节 SQL概述概述 SQL是结构化查询语言是结构化查询语言(Structured Query Language)的缩写。首先由美国的缩写。首先由美国ANSI(美国国家标准协会美国国家标准协会)提出,后被提出,后被ISO采纳为国际标准。采纳为国际标准。一、一、 SQL语言发展简史语言发展简史二、二、 SQL语言的特点及分类语言的特点及分类是一

2、种一体化的语言。它包括了数据定义、数据查询、数据操纵和数据控制等是一种一体化的语言。它包括了数据定义、数据查询、数据操纵和数据控制等功能。功能。 数据定义数据定义 CREATE、ALTER、DROP等等 数据查询数据查询 SELECT 数据操纵数据操纵 INSERT、UPTATE、DELETE等等 由于由于VFP在数据安全性方面的欠缺,不支持在数据安全性方面的欠缺,不支持SQL的数据控制功能。的数据控制功能。(2) 是一种高度过程化的语言。是一种高度过程化的语言。(3) 非常简洁,但功能很强。非常简洁,但功能很强。(4) 可以直接以命令方式交互使用,又可以嵌入程序设计语言中以程序方式使用。可以

3、直接以命令方式交互使用,又可以嵌入程序设计语言中以程序方式使用。(1) 返 回上一页下一页3第二节第二节 SQL的定义功能的定义功能 一、定义表的结构一、定义表的结构格式:格式: CREATE TABLE (字段属性描述字段属性描述) 该命令直接创建指定名称的表的结构,各字段的名称、类型、宽度等与括号中的描述相同。该命令直接创建指定名称的表的结构,各字段的名称、类型、宽度等与括号中的描述相同。如果此时有打开的数据库,则建立的是数据库表,否则是自由表。如果此时有打开的数据库,则建立的是数据库表,否则是自由表。【例例7.1】用】用SQL命令创建仓库表(命令创建仓库表(CKB.DBF)的结构,要求如

4、下。)的结构,要求如下。 CREATE TABLE CkB (CKH C(6),CKM C(10), CHF L,MJ N(3,0) 返 回字段名数据类型 宽度 小数位 备注CKH字符型6仓库号CKM字符型10仓库名CHF逻辑型存货否MJ数值型30面积上一页下一页4 二、修改表的结构二、修改表的结构 用用ALTER TABLE命令可以修改表的结构并且可以指定数据的完整命令可以修改表的结构并且可以指定数据的完整性控制信息。该命令包括四种具体格式,分别可以完成不同的修改操作。性控制信息。该命令包括四种具体格式,分别可以完成不同的修改操作。(1)追加新字段)追加新字段 ALTERTABLE ADD

5、(2)修改原字段的属性)修改原字段的属性 ALTERTABLE ALTER (3)删除字段)删除字段 ALTERTABLE DROP (4)字段更名)字段更名 ALTERTABLE RENAME TO 【例【例7.27.2】为为CKB表添加一个管理员(表添加一个管理员(GLY)字段,类型为字符型,宽度)字段,类型为字符型,宽度位为位为8。 ALTER TABLE CKB ADD GLYGLY C(8)返 回上一页下一页5【例【例7.37.3】将将CKB表的管理员(表的管理员(GLY)字段的宽度修改为)字段的宽度修改为10。 ALTER TABLE CKB ALTER GLYGLY C(10)【

6、例【例7.47.4】将将CKB表的管理员(表的管理员(GLY)字段名更改为)字段名更改为“负责人(负责人(FZR)”。 ALTER TABLE CKB RENAME GLY TO FZR三、三、 表的删除表的删除 格式:格式:DROP TABLE 说明:直接从磁盘上删除指定的表。若是数据库表,则必须先打开数据说明:直接从磁盘上删除指定的表。若是数据库表,则必须先打开数据库。库。 【例【例7.57.5】删除删除CKB表表 DROP TABLE CKB返 回上一页下一页6主要包括数据的插入(主要包括数据的插入(INSERT)、删除()、删除(DELETE)、更新()、更新(UPDATE)三种功)三

7、种功能。能。一、数据插入一、数据插入 SQL 的的INSERT命令用于向指定的表中追加一条记录,无论该表是否已经打命令用于向指定的表中追加一条记录,无论该表是否已经打开,也不必从键盘输入数据,而是直接把数据写在命令中。该命令动词是开,也不必从键盘输入数据,而是直接把数据写在命令中。该命令动词是INSERT,因此也叫因此也叫“插入命令插入命令”。 格式:格式: Insert into Insert into ( (字段字段1 1,字段,字段2 2,););Values (Values (表达式表达式1 1,表达式,表达式2 2,) 若只插入部分字段,必须在表名后用括号依次指明所插入的字段名,且与

8、若只插入部分字段,必须在表名后用括号依次指明所插入的字段名,且与VALUES后括号中表达式的值一一对应。当插入整条记录时,则不必指出字段名,后括号中表达式的值一一对应。当插入整条记录时,则不必指出字段名,但但VALUES后括号中表达式的值,必须依次为表内所有字段的值。后括号中表达式的值,必须依次为表内所有字段的值。返 回第三节第三节 SQL的操纵功能的操纵功能上一页下一页7【例【例7.7】向】向XSQK表插入一条记录,学号、姓名、班级分别是表插入一条记录,学号、姓名、班级分别是“0801100204”,“王一王一”和和“流体力学流体力学”这三个值。这三个值。 INSERT INTO XSQK(

9、xh,xm,bj) VALUES (INSERT INTO XSQK(xh,xm,bj) VALUES (0801100204,王一王一, , 流体力学流体力学)【例【例7.8】向】向CJ表插入一条记录,表插入一条记录,“xh”、“kcdm”、“cj”分别为分别为“0801100204”、“150104”、86。 INSERT INTO CJ VALUES (INSERT INTO CJ VALUES (0801100204 , 150104,86),86) 可以可以“浏览浏览”方式查看插入结果。方式查看插入结果。 返 回上一页下一页8二、删除数据二、删除数据格式:格式: DELETE FRO

10、M DELETE FROM WHERE WHERE 功能:功能:对指定表中满足条件的记录做删除对指定表中满足条件的记录做删除标记标记。如果不指定条。如果不指定条件,则对所有记录添加删除件,则对所有记录添加删除标记标记。 说明:此命令无须事先打开表,注意条件子句用说明:此命令无须事先打开表,注意条件子句用WHERE。【例【例7.9】将】将XSQK表中年龄大于表中年龄大于25岁的女生进行逻辑删除。岁的女生进行逻辑删除。解:解: DELETE FROM XSQK;DELETE FROM XSQK;WHERE(YEAR(DATE()-YEAR(CSRQ)25) AND XB=WHERE(YEAR(DA

11、TE()-YEAR(CSRQ)25) AND XB=女女 返 回上一页下一页9三、三、 更新命令更新命令格式: UPDATE SET 字段名字段名1= ,字段名字段名2= WHERE 功能:对指定表中满足条件的记录,用指定表达式的值更新指定字段的值。功能:对指定表中满足条件的记录,用指定表达式的值更新指定字段的值。 说明:说明: 如果不指定条件如果不指定条件,该命令默认的范围为所有记录。该命令默认的范围为所有记录。【例【例7.107.10】将将XSQK表中所有学生的入学成绩都提高表中所有学生的入学成绩都提高5分。分。 UPDATE XSQK SET RXCJRXCJ=RXCJ+5【例【例7.1

12、17.11】将将XSQK表中表中1990年及其以后出生的所有学生的入学成绩都提年及其以后出生的所有学生的入学成绩都提高高10分。分。 UPDATE XSQK SET RXCJRXCJ=RXCJ+10; WHERE YEAR(CSRQ)=1990四、四、SQL与与VFP命令对比命令对比 1、VFP需先打开表,需先打开表,SQL不用。不用。 2、SQL中要出现表名,中要出现表名,VFP除除USE和和SET RELATION外都不出表名。外都不出表名。返 回上一页下一页10 查询功能是查询功能是SQL的核心,的核心,SQL的查询命令又称为的查询命令又称为SELECT语句语句。一、一、SELECTSE

13、LECT命令的格式命令的格式SELECT ALLDISTINCT TOP n PERCENT; SELECT ALLDISTINCT TOP n PERCENT; 别名别名.ASAS , ,别名别名22ASAS ; ;FROM FROM 数据库名数据库名!ASAS,数据库名数据库名2 2!表名表名 ; ;INNERLEFT OUTERRIGHTOUTERFULLOUTER JOIN INNERLEFT OUTERRIGHTOUTERFULLOUTER JOIN ! WHERE WHERE |; GROUP BY GROUP BY 1, 2HAVING HAVING ; ORDER BY ORD

14、ER BY ASC|DESCASC|DESCASC|DESC;2ASC|DESC;INTO TABLEINTO TABLEINTO CURSORINTO CURSOR| INTO ARRAY| INTO ARRAYTO FILE 这条命令看起来很复杂,但其基本形式由这条命令看起来很复杂,但其基本形式由SELECT-FROM模块构成,模块构成,其余多为可选项,要根据查询的需求去选用。其余多为可选项,要根据查询的需求去选用。第四节第四节 SQL的数据查询的数据查询返 回上一页下一页11二、基本查询二、基本查询 格式:格式:SELECTALL|DISTINCTFROM 1、查询指定字段、查询指定字段

15、【例【例7.12】 从学生情况表(从学生情况表(XSQK)中查询所有学生的学号()中查询所有学生的学号(XH)、姓名()、姓名(XM)、)、班级(班级(BJ)和入学成绩()和入学成绩(RXCJ)信息。)信息。 SELECT XH,XM,BJ,RXCJ FROM XSQK 【例【例7.13】查询查询成绩表成绩表(CJ)中的所有学生成绩信息。中的所有学生成绩信息。 SELECT SELECT * * FROM CJ &“ FROM CJ &“* *”为通配符,表示所有字段。为通配符,表示所有字段。 该命令等价于:该命令等价于: SELECT XH,KCDM,CJ FROM CJSE

16、LECT XH,KCDM,CJ FROM CJ 2 2、查询经过计算的列、查询经过计算的列 【例【例7.14】查询学生情况表(】查询学生情况表(XSQK)中所有学生的学号()中所有学生的学号(XH)、姓名()、姓名(XM)和)和年龄。年龄。SELECT XH,XM,YEAR(DATE()-YEAR(CSRQ) AS 年龄年龄 FROM XSQK 3、去掉重复值【例【例7.15】查询学生情况表(】查询学生情况表(XSQK)中所有学生的班级()中所有学生的班级(BJ),要求去掉重复信),要求去掉重复信息。息。 SELECT DISTINCT BJ FROM XSQK返 回上一页下一页12三、条件查

17、询三、条件查询 在在SELECT语句中,查询条件用语句中,查询条件用WHERE子句来描述。主要有以下几种子句来描述。主要有以下几种情况:情况:1 1比较大小比较大小用于比较的运算符包括:用于比较的运算符包括:=,=,=,#、!=或或。【例【例7.16】查询学生情况表】查询学生情况表(XSQK)中所有男生的学号中所有男生的学号(XH)、姓名、姓名(XM)和性和性别别(XB)。 SELECT XH,XM,XB FROM XSQK WHERE xb=SELECT XH,XM,XB FROM XSQK WHERE xb=男男 【例【例7.17】 查询学生情况表查询学生情况表(XSQK)中入学成绩中入学

18、成绩(RXCJ)多于多于565分(含)的分(含)的学生的学号学生的学号(XH)、姓名、姓名(XM)和入学成绩和入学成绩(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ=565SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ=5652多重条件多重条件使用逻辑运算符使用逻辑运算符AND、NOT和和OR可以进行复合条件查询。可以进行复合条件查询。【例【例7.18】 查询学生情况表查询学生情况表(XSQK)中所有男生且入学成绩中所有男生且入学成绩(RXCJ)高于高于500分的学生的学号分的学生的学号(XH)、姓名、姓名(XM)和

19、入学成绩和入学成绩(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE XB=SELECT XH,XM,RXCJ FROM XSQK WHERE XB=男男 AND RXCJ500 AND RXCJ500返 回上一页下一页13【例【例7.19】 查询学生情况表查询学生情况表(XSQK)中金融中金融091班和政法班和政法092班的所有学生信班的所有学生信息息 。 SELECT SELECT * * FROM XSQK WHERE BJ= FROM XSQK WHERE BJ=金融金融091 OR BJ= OR BJ=政法政法092 3. 确定范围确定范围BETWE

20、ENAND和和NOT BETWEENAND分别用来描述宇段值在分别用来描述宇段值在或不在指定范围的条件。其中,或不在指定范围的条件。其中,AND的左端给出查询范围的下限,的左端给出查询范围的下限,AND的的右端给出的是查询范围的上限。右端给出的是查询范围的上限。【例【例7.20】 查询学生情况表查询学生情况表(XSQK)中入学成绩中入学成绩(RXCJ)在在550到到600分之间分之间的学生的学号的学生的学号(XH)、姓名、姓名(XM)和入学成绩和入学成绩(RXCJ) 。 SELECT XH,XM,RXCJ FROM XSQK WHERE RXCJ BETWEEN 550 AND 600SELE

21、CT XH,XM,RXCJ FROM XSQK WHERE RXCJ BETWEEN 550 AND 6004 4确定集合确定集合 这里所说的集合是相同类型的常量所组成的集合。谓词这里所说的集合是相同类型的常量所组成的集合。谓词IN用来描述字用来描述字段的值属于指定的集合,段的值属于指定的集合,NOT IN则描述字段值不属于指定的集合。则描述字段值不属于指定的集合。【例【例7.21】 查询学生情况表查询学生情况表(XSQK)中金融中金融091班和政法班和政法092班的所有学生信班的所有学生信息息 。 SELECT SELECT * * FROM XSQK WHERE BJ IN ( FROM

22、XSQK WHERE BJ IN (金融金融091,政法政法092)返 回上一页下一页145 5部分匹配查询部分匹配查询 LIKE是字符匹配运算符,进行匹配运算时可以使用通配符是字符匹配运算符,进行匹配运算时可以使用通配符“”和和下划线下划线“_”,其中,其中,“”表示表示0个或多个任意字符,个或多个任意字符,“_”表示表示1个任意字个任意字符。例如,第符。例如,第2个字符为个字符为B的字符串可以表示为的字符串可以表示为“_B”。LIKE的格式为:的格式为:LIKE【例【例7.227.22】查询】查询XSQKXSQK表中所有姓表中所有姓“张张”的学号(的学号(XHXH)和姓名()和姓名(XMX

23、M)。)。 SELECT XH,XM FROM XSQK WHERE XM LIKE SELECT XH,XM FROM XSQK WHERE XM LIKE 张张%四、四、 统计查询统计查询SQL提供了许多库函数,可以进一步增强检索功能,这些函数主要有:提供了许多库函数,可以进一步增强检索功能,这些函数主要有: COUNT(COUNT(列名列名| |* *) ) 按列统计记录个数按列统计记录个数 SUM(SUM() ) 计算一列值的总和计算一列值的总和 AVG(AVG() ) 计算一列值的平均值计算一列值的平均值 MAX(MAX() ) 求一列值中的最大值求一列值中的最大值 MIN(MIN(

24、) ) 求一列值中的最小值求一列值中的最小值返 回上一页下一页15 如果指定如果指定DISTINCT,则表示在计算时要取消指定行或列中的重复值。,则表示在计算时要取消指定行或列中的重复值。使用使用SUM,AVG,MAX,MIN函数时,指定列必须是数值型。另外,在函数时,指定列必须是数值型。另外,在标准标准SQL中只能在中只能在SELECT子句和子句和HAVING短语中使用库函数。短语中使用库函数。【例【例7.237.23】查询成绩表(】查询成绩表(CJCJ)中学号为)中学号为“0901100103”0901100103”的学生的学号的学生的学号(XHXH),总分和平均分。),总分和平均分。SE

25、LECT XH,SUM(CJ) AS 总分总分,AVG(CJ) AS 平均分平均分 FROM CJ;WHERE XH=0901100103【例【例7.247.24】查询成绩表(】查询成绩表(CJCJ)中课程代码()中课程代码(KCDMKCDM)为)为“150205”150205”的课程代的课程代码,最高分和最低分。码,最高分和最低分。SELECT KCDM,MAX(CJ) AS 最高分最高分,MIN(CJ) AS 最低分最低分 ;FROM CJ WHERE KCDM=150205【例【例7.257.25】统计成绩表(】统计成绩表(CJCJ)中有多少门课。)中有多少门课。SELECT COUNT

26、(DISTINCT KCDM) AS 课程数课程数 FROM CJ【例【例7.267.26】统计】统计XSQKXSQK表中学生人数。表中学生人数。SELECT COUNT(*) AS 学生人数学生人数 FROM XSQK 返 回上一页下一页16五、五、 分组查询分组查询 GROUP BY 子句可以将查询结果按一列或多列值分组,列值相等的为子句可以将查询结果按一列或多列值分组,列值相等的为一组,还可以利用一组,还可以利用HAVING短语按一定的条件对分组后的数据进行筛选。短语按一定的条件对分组后的数据进行筛选。GROUP BY子句一般应跟在子句一般应跟在 WHERE子句之后,没有子句之后,没有W

27、HERE子句时,跟在子句时,跟在FROM子句后。子句后。如果对分组有要求的话,则可以用如果对分组有要求的话,则可以用HAVING短语指定筛选条短语指定筛选条件。该短语必须与件。该短语必须与GROUP BY配合使用。需要强调的是,配合使用。需要强调的是,HAVING短语与短语与WHERE子句之间并不矛盾,子句之间并不矛盾,WHERE子句用于表的选择运算,子句用于表的选择运算,HAVING短短语用于设置分组的筛选条件,即满足该条件的分组数据才被输出。语用于设置分组的筛选条件,即满足该条件的分组数据才被输出。【例【例7.27】查询成绩表(查询成绩表(CJCJ)中每门课程的课程代码()中每门课程的课程

28、代码(KCDMKCDM)、最高分和最)、最高分和最低分。低分。SELECT KCDM,MAX(CJ) AS 最高分最高分,MIN(CJ) AS 最低分最低分; FROM CJ GROUP BY KCDM【例【例7.28】查询成绩表(查询成绩表(CJCJ)中每名学生的学号()中每名学生的学号(XHXH)、最高分和最低分。)、最高分和最低分。SELECT XH,MAX(CJ)AS 最高分最高分,MIN(CJ) AS 最低分最低分 FROM CJ;GROUP BY XH返 回上一页下一页17【例【例7.29】 统计输出班级人数超过统计输出班级人数超过18(含)人的各班级的入学成绩平均分。(含)人的各

29、班级的入学成绩平均分。 SELECT BJ,AVG(RXCJ) AS SELECT BJ,AVG(RXCJ) AS 平均分平均分 FROM XSQK;FROM XSQK; GROUP BY BJ HAVING COUNT( GROUP BY BJ HAVING COUNT(* *)=18)=18【例【例7.30】在成绩表(】在成绩表(CJ)里查询选修了)里查询选修了“150104”和和“150205”的学生平的学生平均成绩在均成绩在80分及以上的学生的学号和平均成绩。分及以上的学生的学号和平均成绩。SELECT XH,KCDM,AVG(CJ) AS 平均成绩平均成绩 FROM CJ;WHERE

30、 KCDM IN (150104,150205) GROUP BY XH;HAVING AVG(CJ)=80六、查询的排序六、查询的排序 利用利用ORDER BY子句可以对查询的结果按指定字段进行排序。其中,子句可以对查询的结果按指定字段进行排序。其中,ASC表示升序,表示升序,DESC表示降序,缺省时表示升序。另外,利用该子句还表示降序,缺省时表示升序。另外,利用该子句还可以实现多重排序。可以实现多重排序。【例【例7.31】查询查询学生情况表学生情况表(XSQK)中的学生信息,要求按入学成绩由高到中的学生信息,要求按入学成绩由高到低顺序排序。低顺序排序。 SELECT SELECT * *

31、FROM XSQK ORDER BY RXCJ DESC FROM XSQK ORDER BY RXCJ DESC返 回上一页下一页18【例【例7.32】查询查询学生情况表学生情况表(XSQK)中的学生学号(中的学生学号(XH)、姓名()、姓名(XM)、)、班级(班级(BJ)和入学成绩()和入学成绩(RXCJ)。要求查询结果按班级升序排列,班级)。要求查询结果按班级升序排列,班级相同再按入学成绩降序排列。相同再按入学成绩降序排列。 SELECT XH,XM,BJ,RXCJ FROM XSQK ORDER BY BJ,RXCJ DESCSELECT XH,XM,BJ,RXCJ FROM XSQK

32、 ORDER BY BJ,RXCJ DESC【例【例7.33】 统计输出班级人数超过统计输出班级人数超过18(含)人的各班级的入学成绩平均分(含)人的各班级的入学成绩平均分,并按平均分降序排列。并按平均分降序排列。 SELECT BJ,AVG(RXCJ) AS SELECT BJ,AVG(RXCJ) AS 平均分平均分 FROM XSQK;FROM XSQK; GROUP BY BJ HAVING COUNT( GROUP BY BJ HAVING COUNT(* *)=18 ORDER BY 2 DESC)=18 ORDER BY 2 DESC如果用户需要输出满足条件的前几个记录,可以使用以

33、下短语:如果用户需要输出满足条件的前几个记录,可以使用以下短语: TOP PERCENT 其中,其中, 表示要显示前几个记录的数目。若使用表示要显示前几个记录的数目。若使用PERCENTPERCENT,则则 应取应取0.010.01至至99.9999.99间的实数,表示要显示所有查询结果中间的实数,表示要显示所有查询结果中的前百分之几的记录。的前百分之几的记录。注意,注意,TOPTOP短语要与短语要与ORDER BYORDER BY短语同时使用才有效。短语同时使用才有效。【例【例7.34】 查询入学成绩最高的三位同学的姓名和入学成绩。查询入学成绩最高的三位同学的姓名和入学成绩。SELECT T

34、OP 3 XM,RXCJ FROM XSQK ORDER BY RXCJ DESCORDER BY RXCJ DESC返 回上一页下一页19【例【例7.35】查询入学成绩最低的】查询入学成绩最低的30%同学的姓名和入学成绩。同学的姓名和入学成绩。 SELECT TOP 30 PERCENT XM,RXCJ FROM XSQK; ORDER BY RXCJ DESC七、利用空值查询七、利用空值查询 在在SQL中可以查询某字段取值为空中可以查询某字段取值为空(NULL)的记录,空值不同于零和空的记录,空值不同于零和空格,它不占任何存储空间,中是一个特殊的符号格,它不占任何存储空间,中是一个特殊的符

35、号“NULL”。输入。输入NULL的的方法是复合键方法是复合键CTRL+0(零)。(零)。【例【例7.36】查询课程表(】查询课程表(KCB)中没有课程名称的记录信息。)中没有课程名称的记录信息。 SELECT * FROM KCB WHERE KCMC IS NULL注:查询空值时要使用注:查询空值时要使用“IS NULL”,而,而“=NULL”是无效的,因为空值不是无效的,因为空值不是一个确定的值。是一个确定的值。八、连接查询八、连接查询 如果查询涉及两个或两个以上的表,则需要将相关的表按某个字段连如果查询涉及两个或两个以上的表,则需要将相关的表按某个字段连接起来,这种查询称为连接查询(多

36、表查询)接起来,这种查询称为连接查询(多表查询)。返 回上一页下一页201、等值连接查询、等值连接查询(1)2个表查询条件格式个表查询条件格式 表名表名1公共字段名公共字段名=表名表名2公共字段名公共字段名其中,引用不同表中的字段需在字段名前加表名和其中,引用不同表中的字段需在字段名前加表名和 “.”。【例【例7.37a】 查询查询“赵刚赵刚”同学的学号、姓名,性别和成绩。同学的学号、姓名,性别和成绩。SELECT XSQK.XH,XM,XB,CJ FROM XSQK,CJ ;WHERE XSQK.XH=CJ.XH AND XM=赵刚赵刚(2)3个表查询查询条件格式个表查询查询条件格式表名表名

37、1公共字段名公共字段名1=表名表名2公共字段名公共字段名1 AND 表名表名2公共字段名公共字段名2=表表名名3公共字段名公共字段名2 【例【例7.37b 】 查询查询“赵刚赵刚”同学的学号、姓名,性别、选修的课程名称和同学的学号、姓名,性别、选修的课程名称和成绩。成绩。SELECT XSQK.XH,XM,XB,KCMC,CJ; FROM XSQK,CJ,KCB;WHERE CJ.KCDM=KCB.KCDM AND XSQK.XH=CJ.XH;AND XM=赵刚赵刚返 回上一页下一页212、超连接查询、超连接查询超连接查询包括内部连接、左连接、右连接和全连接等几种情况的查询。超连接查询包括内部

38、连接、左连接、右连接和全连接等几种情况的查询。这里只介绍内连接。这里只介绍内连接。格式如下:格式如下:(1 1)2个表查询条件格式个表查询条件格式FROM FROM 表名表名1 1INNER INNER JOIN JOIN 表名表名2 ON 2 ON 表名表名1.公共字段名公共字段名=表名表名2.公共字段名公共字段名可以看出,超连接查询是通过可以看出,超连接查询是通过FROM短语给出连接类型,用短语给出连接类型,用ON短语给出短语给出连接条件进行的。连接条件进行的。其中其中INNER 可以省略。可以省略。【例【例7.37c 】 查询查询“赵刚赵刚”同学的学号、姓名,性别和成绩。同学的学号、姓名

39、,性别和成绩。SELECT XSQK.XH,XM,XB,CJ FROM XSQK JOIN CJ ;ON XSQK.XH=CJ.XH WHERE XM=赵刚赵刚(2 2)3个表查询条件格式个表查询条件格式FROM FROM 表名表名1 1 JOIN JOIN 表名表名2 JION 2 JION 表名表名3 ON 3 ON 表名表名2.公共字段名公共字段名=表名表名3.公共字公共字段名段名 ON 表名表名1.公共字段名公共字段名=表名表名2.公共字段名公共字段名 返 回上一页下一页22【例【例7.37d 】 查询查询“赵刚赵刚”同学的学号、姓名,性别、选修的课程名称和同学的学号、姓名,性别、选修

40、的课程名称和成绩。成绩。SELECT XSQK.XH,XM,XB,KCMC,CJ ; FROM XSQK JOIN CJ JOIN KCB;ON CJ.KCDM=KCB.KCDM ON XSQK.XH=CJ.XH ;WHERE XM=赵刚赵刚九、嵌套查询九、嵌套查询所谓所谓嵌套查询,是指在嵌套查询,是指在WHERE子句条件中涉及字段与另一个子句条件中涉及字段与另一个SELECT查查询结果的比较,询结果的比较,也就是说,嵌套查询是指在一个也就是说,嵌套查询是指在一个SELECT语句中包含另一语句中包含另一个个SELECT语句的查询。语句的查询。SQL 支持嵌套查询,这正是支持嵌套查询,这正是SQ

41、L结构化的具体体结构化的具体体现。现。 处于内层的查询称为子查询,处于外层的查询称为父查询。处于内层的查询称为子查询,处于外层的查询称为父查询。在子查询在子查询的的SELECT语句不能使用语句不能使用ORDER BY子句,即子句,即ORDER BY子句只能对最终子句只能对最终查询结果排序。查询结果排序。1、返回一个值的子查询、返回一个值的子查询 当子查询的返回值只有一个时,可以使用当子查询的返回值只有一个时,可以使用,=,=,!=或或 等等比较运算符将父查询和子查询连接起来。比较运算符将父查询和子查询连接起来。返 回上一页下一页23【例【例7.38 】 从成绩表中查询从成绩表中查询“赵刚赵刚”

42、同学的考试成绩信息,要求显示同学的考试成绩信息,要求显示CJ表表的所有字段。的所有字段。SELECT * FROM CJ ;WHERE XH=(SELECT XH FROM XSQK WHERE XM=赵刚赵刚)2、返回一组值的子查询、返回一组值的子查询如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在运算符和子查询之间插入算符,可以在运算符和子查询之间插入ANY、SOME、ALL。WHERE子句中的条件书写格式为:子句中的条件书写格式为: ANY|SOME|ALL(ANY|SOME|ALL(子查询子查询

43、) )其中,其中,ANY和和SOME是作用相同的谓词。是作用相同的谓词。ANY代表某个值,代表某个值,ALL代表所有代表所有值。从上述格式可以看出,使用谓词值。从上述格式可以看出,使用谓词ANY或或ALL时必须同时使用比较运算时必须同时使用比较运算符。例如,符。例如, ANYANY的语义为:大于子查询结果中的某个值。的语义为:大于子查询结果中的某个值。 ALLALL的语义为:大于子查询结果中的所有值。的语义为:大于子查询结果中的所有值。由于子查询的结果是记录的集合,故也可使用谓词由于子查询的结果是记录的集合,故也可使用谓词IN来实现。来实现。返 回上一页下一页24【例【例7.39 】查询选修了

44、课程代码(】查询选修了课程代码(KCDM)为)为“150204”的学生的姓名的学生的姓名(XM)。)。 SELECT XM FROM XSQK WHERE XH=ANY;(SELECT XH FROM CJ WHERE KCDM=150205)也可以写成:也可以写成:SELECT XM FROM XSQK WHERE XH IN;(SELECT XH FROM CJ WHERE KCDM=150205)【例【例7.40】查询高于男生入学成绩最高分的女生的姓名和入学成绩。】查询高于男生入学成绩最高分的女生的姓名和入学成绩。SELECT XM,RXCJ FROM XSQK WHERE RXCJAL

45、L;(SELECT RXCJ FROM XSQK WHERE XB=男男) AND XB=女女也可以写成:也可以写成: SELECT XM,RXCJ FROM XSQK WHERE RXCJ;(SELECT MAX(RXCJ) FROM XSQK WHERE XB=男男) AND XB=女女返 回上一页下一页25EXISTS也称为存在量词,也称为存在量词,WHERE子句中使用量词子句中使用量词EXISTS表示当子查询的表示当子查询的结果非空时,条件为真:反之,则为假。结果非空时,条件为真:反之,则为假。EXISTS前也可以加前也可以加NOT,表示检测,表示检测条件为条件为“不存在不存在”。【例

46、【例7.41】查询选修了课程代码(】查询选修了课程代码(KCDM)为)为“140101”的学生的姓名的学生的姓名(XM)。)。SELECT XM FROM XSQK WHERE EXISTS;(SELECT * FROM CJ WHERE XSQK.XH=CJ.XH AND KCDM=140101)十、查询结果输出十、查询结果输出1、 将查询结果存入表中将查询结果存入表中 若在若在SELECTSELECT语句中使用语句中使用INTO TABLEINTO TABLE 短语,则可以将查询的结果存放短语,则可以将查询的结果存放到表中,该表是自由表。到表中,该表是自由表。2、将查询结果存入临时文件中、将查询结果存入临时文件中 若在若在SELECTSELECT语句中使用语句中使用IN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论