结构化查询语言(SQL)

上传人:jin****ng 文档编号:183070960 上传时间:2023-01-29 格式:DOCX 页数:21 大小:48.31KB
收藏 版权申诉 举报 下载
结构化查询语言(SQL)_第1页
第1页 / 共21页
结构化查询语言(SQL)_第2页
第2页 / 共21页
结构化查询语言(SQL)_第3页
第3页 / 共21页
资源描述:

《结构化查询语言(SQL)》由会员分享,可在线阅读,更多相关《结构化查询语言(SQL)(21页珍藏版)》请在装配图网上搜索。

1、结构化查询语言SQLSQL概述SQL的内容在笔试和上机考试中均占到大约30%的比例,此外 它还是查询和视图的根底,因此是学习的重点也是难点。SQL 是结构化查询语言 Structure Query Language 的缩写。查询功能、数据定义、数据操纵SQL 包含了VFP中没有提供数据控制功能SQL 主要特点1SQL是一体化语言2SQL是种高度非过程化的语言3 SQL 语言非常简洁。4SQL语言可直接以命令方式交互使用可嵌入到程序设计语言中以程序方式使用。查询功能SELECT 命令的特点:1 可以自动打开数据库、表文件加以查询,而不需要事先用 OPENDATABASE或USE命令打开。2 可以

2、 直接选取数据 表中的数据 ,而不需要事先用 SETRELATION命令建立关联。3 当需要的索引文件不存在时,会自动建立暂存索引文件,以支 持快速搜索技术Rushmore来查询。4 其查询结果可输出到文件、表、屏幕或报表上,还可以转换成 统计图表。命令格式:SELECT FROM WHERE可与 LIST FIELDS FOR 对照学习。关系操作:投影,选择,联接。说明:功能强大,语法灵活;要处理的数据表无须事先打开,通过 FROM 子句指明并打开。1 SELECT 短语:说明要查询的数据;对应的关系操作为投影, 类似于 FIELDS 子句。2 FROM 短语:说明要查询的数据来自哪个或哪些

3、表,可对单个 表或多个表进展查询;3. WHERE短语:说明查询条件;对应的关系操作为选择,类似 于 FOR 子句。如是多表查询还可能过该子句指明联接条件,进 展联接。4. GROUP BY 短语:用于对查询结果进展分组,可利用它进展分 组汇总;类似于TOTAL命令。5. HAVING 短语:跟随 GROUP BY 使用,它用来限定分组必须 满足的条件;6. ORDER BY 短语:用于对查询的结果进展排序;类似于 SORT 命令。示例数据库:学生管理,包括三个表:学生,课程,选课通过该表反映“学生 与“课程之间“多对多的联系。 问题:请同学们分别指出三个表的主关键字。一、简单查询简单查询基于

4、单个表。例:1查询学生信息SELE * FROM 学生 & “*号代表所有列。类似于:USE 学生LIST2.查询男生学生的学号、某某与生日SELE学号,某某,生日FROM 学生WHERE性别二男类似于USE 学生LIST学号,某某,生日FOR性别二男SELE * FROM 课程 WHERE 学分5类似于USE 学生LIST FOR 学分54、查询学分不在 6 到 9 之间的Sele * from 课程 where 学分 not between 6 and 9二、简单联接查询联接是关系的根本操作之一,联接查询基于多个关系的查询。 例:查询男生学生的选课信息,包括某某,学号与成绩。 分析:本例的

5、查询结果包括两个表“学生与“选课的属性,适用 于联接查询。SELE某某,,成绩;FROM学生,选课;WHERE AND 性别二男说明:如果命令太长一行写不下可在行末加分号“:表续行:因为两个表中均有“学号字段,所以必须指明所属表。 学生.学号=选课.学号:连接条件。还可使用如下 SQL 语句:SELE某某,选课.学号,成绩;FROM 学生JOIN 选课 ON 学生.学号二选课.学号;WHERE性别二男说明:JOINON :建立表与表之间的联接。三、嵌套查询嵌套查询是另一类基于多个关系的查询,此类查询所要求的结果出自 一个关系,但相关的条件却涉与多个关系。1、例:查询女生学生选课信息,包括学号,

6、课程号,成绩。SELE *;FROM选课;WHERE 学号IN (SELE 学号FROM 学生 WHERE 性别= 女)说明:IN:相当于集合运算符三。还可使用如下SQL语句:简单联接查询SELE选课.学号,课程号,成绩;FROM 选课JOIN 学生 ON 选课.学号二学生.学号;WHERE性别二女2、查询有“硬盘订购需求的订购单明细记录:这个例子要求查询订购单明细表中的记录,而查询条件是产品标的名称,Sele * from 订购单明细 where 产品号 IN;sele 产品号 from 产品 where 名称=“硬盘3、排除法查询的例子: 查询所有订购数量即订购单中每个订购项目的数量都在

7、50 以上 的订购单的信息Sele*from订购单where订单号notin;sele 订单号 from 订购单明细 where 数量=50Sele*from订购单where订单号notin;sele 订单号from 订购单明细 where数量=50and 订单号 in sele 订单号 from 订购单明细4、找出和某某产品同等价位的所有产品信息:内外层查询的同一个 表,内层查询查处单价,外层查询根据这个单价查询产品信息Sele * from 产品 where 单价=;sele 单价 from 产品 where 规格说明=“某某产品5、内外层互相查询嵌套查询四、特殊运算符1. BETWEEN

8、AND 意为“和之间例:查询成绩在80分到90分之间的选课信息。SELE * FROM 选课 WHERE 成绩 BETWEEN 80 AND 90等价于:SELE * FROM 选课 WHERE 成绩=80 AND 成绩=90例:查询成绩不在80分到90分之间的选课信息。SELE * FROM 选课 WHERE 成绩 NOT BETWEEN 80 AND 902. LIKE 是字符串匹配运算符,通配 “%表示0个或多个字符,表示一个字符。注意:不是“*和“? ,不正确!例:从学生关系中查询姓“黄的学生信息。SELE * FROM 学生 WHERE 某某 LIKE “黄%不能写成:SELE *

9、FROM 学生 WHERE例:从学生关系中查询不姓“黄的学生信息。SELE * FROM 学生 WHERE 某某 NOT LIKE “黄例:SELE * FROM 学生 WHERE 某某 LIKE 黄_SELE * FROM 学生 WHERE 某某 LIKE 黄_五、排序SQL SELECT 可将查询结果排序。排序的短语格式如下:ORDER BY Order_Item ASCIDESC, Order_Item ASCIDESC.说明:可按升序或降序排序,允许按一列或多列排序。 例:按学分进展升序查询课程信息。SELE * FROM 课程 ORDER BY 学分 ASC例:先按学分进展升序排序,

10、学分一样的再按课程名进展降序排序并 输出全部课程信息。SELE * FROM 课程 ORDER BY 学分,课程名 DESC|注:ORDER BY对最终的查询外查询结果进展排序,不能在子查询内查询中使用此短语。六、简单计算查询SQL 不但具有一般的检索能力,而且还有计算方式的检索。用于计算 检索的函数有:1COUNT *:计数2SUM:求和3AVG:算平均值自变量通常为数值型A4MAX:求最大值5MIN:求最小值丿上面的函数可用在SELECT短语中对查询结果进展计算。 例:查询学号为“03的学生选修课程的考试成绩总分和平均分。SELE SUM(成绩),AVG(成绩)FROM 选课 WHERE

11、学号二 03”SELE SUM(成绩)总分,AVG(成绩)平均分 FROM 选课 WHERE 学号二 03”SELE某某,SUM(成绩)AS总分,AVG(成绩)AS平均分;FROM 学生JOIN 选课 ON 学生.学号二选课.学号;WHERE = 03”七、分组与计算查询利用 GROUP BY 子句进展分组计算查询使用得更加广泛。 GROUPBY 短语格式如下:GROUP BY GroupColumn,GroupColunmHAVING FilterCondition说明:1 可按一列或多列分组,还可以用 HAVING 进一步限定分组的条 件。2.GROUP BY子句一般跟在 WHERE子句之

12、后,没有 WHERE子HAVING子句必须跟在GROUP BY之后,不能单独使用。在查询中是先用 WHERE 子句限定元组,然后进展分组,最后再用HAVING子句限定分组。例:求每个学生选课的考试成绩平均分。SELE学号,AVG(成绩)FROM 选课 GROUP BY 学号说明:在此查询中,选按学号属性进展分组,然后再计算每个学号的平均成绩。例:在选课表中求每个选课门数为4 门的学生的总分和平均分。SELE学号,SUM(成绩)AS总分,AVG(成绩)AS平均分;FROM选课;GROUP BY 学号 HAVING COUNT(*)=4SELE某某,SUM(成绩)AS总分,AVG(成绩)AS平均分

13、;FROM 学生JOIN 选课 ON 学生.学号二选课.学号;WHERE性别=女;GROUP BY 选课.学号 HAVING COUNT(*)=4例:求平均成绩在 80 分以上的各课程的课程号与平均成绩。SELE课程号,AVG(成绩)FROM 选课;GROUP BY 课程号 HAVING AVG(成绩)80八、使用空值进展查询空值的概念:空值就是缺值或还没有确定值,不能把它理解为任何意义的数据。比如表示价格的一个字段值,空值表示没有定价,而数值0可能表示免费。空值与空或空白字符串、数值0等具有不同的含义。 例:假设在选课中有些学生某门课程还没有考试,如此成绩为空。试 找出尚未考试的选课信息。S

14、ELE * FROM 选课 WHERE 成绩 IS NULL注:不能写成“=NULL例:试找出成绩不为空的选课信息。SELE * FROM 选课 WHERE 成绩 IS NOT NULL九、别名与自联接查询在联接操作中,要使用关系名作前缀,为简单起见,SQL允许在FROM 短语中为关系名定义别名。格式为: 关系名别名 例:查询选课信息中的某某,课程名,成绩。SELE某某,课程名,成绩;FROM 学生S,课程 C,选课SC;说明:在上面的例子中,别名并不是必须的,但是在关系的自联接操 作中,别名如此是必不可少的。SQL不仅可以对多个关系实行联接操 作,也可将同一关系与其自身进展联接,这种联接就称

15、为自联接。在 这种自联接操作关系上,本质上存在着一种特殊的递归联系,也就是 关系中的一些元组,根据出自同一值域的两个不同的属性,可以与另 外一些元组有一种对应关系一对多的联系。注:元组即记录。 例:试查询先修课的课程名 在本例中,先修课号与课程号出自同一值域,会涉与自联接查询。SELE DISTINCT C2.先修课号 C1.课程名;FROM课程C1,课程C2;十、内外层相关嵌套查询前面讨论的嵌套查询是外层查询依赖于内层查询的结果,而内层查询 与外层查询无关。但有时也需要内、外层互相关的查询,这时内层查 询的条件需要外层查询提供值,而外层查询的条件需要内层查询的结 果。例:查询只有一个学生选修

16、的课程的学号,课程号与成绩。SELE *;FROM 选课 SCI;WHERE SCI.课程号 NOT IN;(SELE 课程号 FROM 选课 SC2 WHERE SC1.学号SC2.学号)SELE * FROM 选课 SCI;WHERE NOT EXIST (SELE * FROM 选课 SC2 ;WHERE SCI.学号SC2.学号 AND SC2.课程号二SCI.课程号)十一、用量词和谓词的查询前面已学过NOT IN运算符,此处还有两种与子查询相关的运算符。格式1: 表达式X比拟运算符ANYIALLISOME(子查询)格式 2: NOT EXISTS (子查询)说明:1. ANY、ALL

17、和SOME为量词,ANY和SOME是同义词,在进展比拟运算时只要子查询中有一行能使结果为真,如此结果为真;ALL 如此要求子查询中的所有行都使结果为真时,结果才为真。2. EXISTS为谓词,EXISTS和NOT EXISTS是用来检查在子查询中是否有结果返回,也就是存在元组或不存在元组。例:查询选修课程的学生的学号,某某,性别与生日。看懂SELE * FROM 学生 WHERE EXIST (SELE * FROM 选课 WHERE 学生.学号=选课.学号)注:本例中内层查询引用了外层查询的表,只有这样使用谓词EXISTS 或NOT EXISTS才有意义。例:确定哪些客户目前没有订购单:这里

18、的查询是客户没有订购单子 记录或不存在订购单子记录Sele * from 客户 where not exists ;sele * from 订购单 where 客户号=客户.客户号 :此查询等 价于 sele * from 客户 where 客户号 not insele 客户号 from 订购单 例:查询学分最高的课程信息。SELE * FROM 课程 WHERE 学分=ALL (SELE 学分 FROM 课 程)SELE * FROM 课程 WHERE NOT 学分ANY (SELE 学分 FROM 课程)SELE * FROM 课程 WHERE NOT 学分 SOME (SELE 学分 F

19、ROM课程)SELE * FROM 课程 WHERE 学分=(SELE MAX(学分)FROM 课 程)例:查询学分不是最高的课程信息。SELE * FROM 课程 WHERE 学分ANY (SELE 学分 FROM 课程) SELE * FROM 课程 WHERE 学分SOME (SELE 学分 FROM 课 程)十二、超联接查询在两个表的超联接查询中,首先保证一个表中满足条件的元组都在结 果中,然后将满足联接条件的元组与另一个表中的元组进展联接,不 满足联接条件的如此将应来自另一表的属性置为空值。语法:SELEFROMTalbelINNERILEFTIRIGHTIFULLJOINTablO

20、oin ConditionWHERE说明:1. INNER JOIN:等价于JOIN,为普通联接。2. ON Join Condition:用于指定联接条件。例:比拟几种联接方式。SELE某某,课程号,成绩FROM 学生JOINSELE某某,课程号,成绩FROM 学生LEFT JOINSELE某某,课程号,成绩FROM 学生 RIGHT JOINSELE某某,课程号,成绩FROM 学生FULL JOIN十三、集合并运算可将两个 SELECT 语句的查询结果通过并运算合并成一个查询结果。 为进展并运算,要求两个查询结果具有一样的字段个数,并且对应字 段的值要出自同一值域,也就是具有一样的数据类型

21、和取值X围。 例:查询学号为 01 与 02 的选课信息。SELE * FROM 选课 WHERE 学号二 01”;UNION;SELE * FROM 选课 WHERE 学号二 02”word十四、VFP中有关SQL SELECT的几个特殊选项1 显示局部结果格式:TOP n PERCENT功能:只需要满足条件的前几个记录。说明:(1) n是1至32767之间的整数,说明显示前几个记录。2)当使用 PERCENT 时,说明显示结果中前百分之几的记录。例:显示学分最低的前2项课程记录。SELE * TOP 2 FROM 课程 ORDER BY 学分 DESC &通常与ORDER BY子句连用2

22、将结果存放在数组中格式: INTO ARRAY ArrayName 3 将结果存放在临时文件中格式: INTO CURSOR CursorName说明:临时表中一个只读的 DBF 文件,当查询完毕后该临时文件是 当前文件,可像一般的 DBF 文件一样使用,当关闭文件时该文件将 自动删除。4 将结果存放在永久表中,通过该子句可实现表的复制。格式: INTO TABLE|DBF TableName 5 将结果存放到文本文件中格式: TO FILE FileName ADDITIVE 6 将结果直接输出到打印机 格式:TO PRINTER PROMPT习题: P131/ 2 P132/ 4,5,6第

23、三节 数据操作功能一、插入命令格式 1: INSERT INTO 数据表名 (字段名 1,字段名 2,.) VALUES (表达式 1,表达式 2.) 功能:在指定表尾添加一条新记录,其值为 VALUES 后面的表达式 的值。命 令 格 式 2 : INSERT INTO 数 据 表 名 FROM ARRAY ArrayName|FROM MEMVAR 功能:向指定表中添加一条新记录,其值来自于数组或对应的同名内 存变量。例:向课程表中插入记录:05”,数理逻辑,6”,03”INSERT INTO 课程 VALUES( 05”, 数理逻辑,6, 03”)说明:1 如未使用字段名指明,如此 VA

24、LUES 中的表达式数目必须与表 中的字段数一样,而且相应的数据类型必须一致。2 如 果表中 设定了主 索引, 如此插入 记录时 只能用该 SQLINSERT命令而不能使用APPEND或INSERT命令。3 注意插入数据的数据类型必须与表设计时的类型一致。二、更新命令格式:UPDATE TableName SET字段名1=表达式1,字段名2= 表达式 2. WHERE Condition类似于 REPLACE 命令。通常嵌入在循环结构内,用另一个表的数据 来修改本表。例:将课程关系中课程号为“01的课程的学分加 1 分。UPDATE 课程 SET 学分=学分+1 WHERE 课程号=01” 习

25、题: P148/2 P150/6三、删除命令格式: DELETE FROM TableName WHERE Condition说明:类似于 VFP 的 DELE . FOR . 命令。假如无WHERE子句会删除表中的全部记录2此命令为逻辑删除。用PACK命令进展物理删除。例:删除课程关系中课程号为“05的元组。DELE FROM 课程 WHERE 课程号=05” 习题: P156/25第二节 数据定义功能一、表的定义命令格式: CREATE TABLE 数据表名(字段名 1 字段类型(字段宽度, 小 数 位 数 )NULL|NOT17 / 20NULLCHECK ERRORDEFAULTPRI

26、MARY KEYIUNIQUE字段名 2. .)说明:例:用SQL CREATE命令建立学生2数据表CREATE TABLE 学生 2(学号 C(2) NOT NULL PRIMARY KEY,某某C(8),;性别 C(2) CHECK 性别二男 OR 性别二女 ERROR “性别只 能是男或女 DEFAULT“男,生日D)习题: P157/2二、表的删除命令格式: DROP TABLE TableName功能:直接从磁盘上删除指定的表。例:删除上例中的表“学生 2DROP TABLE 学生 2习题: P148/1三、表结构的修改命令格式 1:ALTER TABLE TableName ADD

27、|ALTER COLUMN字段名1. 说明:此格式可添加ADD新的字段或修改ALTER已有的字段,它 的句法根本与CREATE TABLE的句法相对应。例:为课程关系增加长度为6 的字符型的先修课号属性。ALTER TABLE 课程 ADD 课程号 C(6)例:课程中的课程号属性的长度由6 改为 8。ALTER TABLE 课程 ALTER 课程号 C(8)习题:P153/13 P142/37 P157/1 P159/6,8 P160/12命令格式 2:ALTER TABLE 表名 ALTER COLUMN 字段名 1 NULL|NOT NULLSET DEFAULT SET CHECK .

28、ERROR.DROP DEFAULTDROP CHECK说明:此格式主要用于定义、修改和删除字段一级的有效性规如此和默认值 定义。例:为课程关系增加学分大于2的有效性规如此ALTER TABLE 课程 ALTER 学分 SET CHECK 学分2习题: P151/9 P154/17命令格式 3: ALTER TABLE 表名DROP COLUMN字段名SET CHECK.ERROR.DROP CHECKRENAME COLUMN 字段名 TO 新字段名说明:此格式可删除字段,可修改字段名,可定义、修改和删除表一级的有 效性规如此等。例:将课程表的先修课号字段名改为先修课。ALTER TABLE

29、课程 RENAME先修课号TO 先修课例:删除课程表中的先修课字段 。ALTER TABLE课程 DROP先修课四、视图操作1定义视图命令格式:CREATE VIEW 视图名 AS select查询语句说明:视图是一个虚表,它一旦建立使用方法跟表十分类似,它不会 形成单独的文件,它的内容保存在数据库中,所以自由表不能建立视 图。这是视图与查询的一个区别。例: CREATE VIEW 学生成绩 AS ;SELE某某,SUM(成绩)AS总分,AVG(成绩)AS平均分;FROM 学生 JOIN 选课 ON 学生.学号=选课.学号;GROUP BY 选课.学号USE 学生成绩BROWSELE * FROM 学生成绩2视图的删除命令格式: DROP VIEW 视图名第五节 例题解析略

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!