1 / 52

第 10 章 关系数据库标准语言 SQL

第 10 章 关系数据库标准语言 SQL. 10-1 SQL 语言简介 225 10-2 数据定义 226 10-3 数据操作 230 10-4 数据查询 234. 10-1 SQL 语言简介. 10-1-1 SQL 语言的规则 225 10-1-2 SQL 语言的特点 225. 10-1-1 SQL 语言的规则. 支持 SQL 语言的数据库是由表组成,它用一个或多个关系模式定义。 一个 SQL 表由行集合构成,一行是由多列构成,每列对应一个数据项。

xaria
Download Presentation

第 10 章 关系数据库标准语言 SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第10章 关系数据库标准语言SQL 10-1 SQL语言简介 225 10-2 数据定义 226 10-3 数据操作 230 10-4 数据查询 234

  2. 10-1 SQL语言简介 10-1-1 SQL语言的规则 225 10-1-2 SQL语言的特点 225

  3. 10-1-1 SQL语言的规则 • 支持SQL语言的数据库是由表组成,它用一个或多个关系模式定义。 • 一个SQL表由行集合构成,一行是由多列构成,每列对应一个数据项。 • 表可以是一个实际存储数据在数据库中的表,也可以是由视图构成的表的定义。 • 表和存储文件之间的关系可以是一对一也可以是一对多的关系。 • 用户可以用SQL语句对视图和基本表进行查询等操作。 • SQL用户可以是应用程序,也可以是终端用户。

  4. 10-1-2 SQL 语言的特点 • 简洁易学SQL虽然功能强大,但是只用了9个命令动词完成了核心功能中的数据定义、数据操纵、数据控制,不需要掌握繁琐的语句。SQL语言接近英语口语,是面向用户、性能良好的语言,非常简单,容易掌握。 • 高度集成化SQL语言集成了数据定义、数据操纵、数据控制等方面的功能,基本上包括了数据库活动中的各个方面,与非关系模型的数据库语言具有同样简单实用的特点,为用户提供了一个强有力工具。 • 高度智能化SQL 语言是一种非过程化、高度智能化的语言,只要用户描述清楚要完成什么功能,SQL语言就可以将要求提交系统,自动完成全部工作。 • 高度灵活化 SQL语言是一种用法高度灵活化的语言,既能以人机交互方式来使用,也可以嵌入到程序开发语言中使用如PowerBuilder、Visual FoxPro、Access,使用方便、灵活。

  5. 10-2 数据定义 10-2-1 表的定义(创建表) 226 10-2-2 修改表的结构 228 10-2-3 删除表 229 10-2-4 视图的定义 230

  6. 10-2-1 表的定义(创建表) 命令格式: CREATE TABLE | DBF <表名1> [NAME <长表名>] [FREE] (<字段名1> <字段类型> [(<宽度> [, <小数位数>])][NULL|NOT NULL] [CHECK <有效性规则1> [ERROR <提示信息1>]] [DEFAULT <默认值1>] [PRIMARY KEY|UNIQUE [<候选关键字1> TAG <标识名1>]] [REFERENCES <表名2> [TAG <标识名2>]] [NOCPTRANS] [,<字段名2> <字段类型> [(<宽度> [,<小数位数>])]][NULL|NOT NULL] [ CHECK <有效性规则2> [ERROR <提示信息2>]] [ PRIMARY KEY | UNIQUE [<候选关键字2> TAG <标识名3>]] [, FOREIGN KEY <外部关键字4> TAG <标识名4> [NODUP] REFERENCES <表名3> [TAG <标识名5>]] ......) | FROM ARRAY <数组名> 功能:创建一个只有字段没有记录的空数据表。

  7. 【例10.1】先创建一个数据库,其库名为“d:\new book\图书管理”,再创建一个名为“图书.DBF”的数据表,其表结构用关系模式表示为:图书 (图书编号C(6), 书名 C(20), 出版单位 C(20), 单价 Y, 库存量 I ),并设置图书编号为主键。 CREATE DATABASE "d:\new book\图书管理" CREATE TABLE "d:\new book\图书" (图书编号 C(6); PRIMARY KEY,书名 C(20),出版单位 C(20),单价 Y,库存量 I)

  8. 【例10.2】创建一个名为“借书.DBF”的数据表,其表结构用关系模式表示为:借书 (图书编号C(6), 学号 C(8), 借阅日期 D, 归还日期 D,),并设置与上题“图书”表通过字段图书编号建立连接。 CREATE TABLE "d:\new book\借书" (图书编号 C(6),学号 C(8), 借阅日期 D, 归还日期 D,; FOREIGN KEY 图书编号 TAG 图书编号 REFERENCES 图书)

  9. 10-2-2 修改表的结构 1.命令格式1: ALTER TABLE <表名1>ADD | ALTER [COLUMN] <字段名1> 字段类型> [(<宽度> [,<小数位数>])][NULL | NOT NULL][CHECK <有效性规则1> [ERROR <出错信息1>]][DEFAULT <默认值1>][PRIMARY KEY | UNIQUE][REFERENCES <表名2> [TAG <标识名1>]][NOCPTRANS][NOVALIDATE] 功能:实现添加新字段(用ADD)、修改已有字段(ALTER)的字段变量名、数据类型、宽度和完整性约束条件。

  10. 【例10.3 】对创建的“图书”数据表增加一个“作者”字段,其数据类型为字符型,字段长度为8。 ALTER TABLE "d:\new book\图书" ADD 作者 C(8) 【例10.4】把创建的“图书”表的“出版单位”字段的宽度改为30,并且给“库存量”字段确定有效性规则,即库存量小于0时显示“库存错误”。 ALTER TABLE "d:\new book\图书" ALTER 出版单位 C(30) CHECK 库存量>0 Error "库存错误!"

  11. 2.命令格式2: ALTER TABLE <表名>ALTER [COLUMN] <字段名>[NULL | NOT NULL][SET DEFAULT <默认值>][SET CHECK <有效性规则> [ERROR <出错信息>]][DROP DEFAULT][DROP CHECK][NOVALIDATE] 功能:修改指定字段的DEFAULT、CHECK规则,但不影响原有表中的数据。

  12. 【例10.5】为“图书”表的“书名”字段增设默认值“请输入书名:”。【例10.5】为“图书”表的“书名”字段增设默认值“请输入书名:”。 ALTER TABLE “d:\new book\图书” ALTER 书名; SET DEFAULT "请输入书名:"

  13. 3.命令格式3: ALTER TABLE <表名1>[DROP [COLUMN] <字段名1>][SET CHECK <有效性规则> [ERROR <出错信息>]][DROP CHECK][ADD PRIMARY KEY <主关键字> TAG <标识名1> [FOR <条件1>]][DROP PRIMARY KEY][ADD UNIQUE <候选关键字1> [TAG <标识名2> [FOR <条件2>]]][DROP UNIQUE TAG <候选标识名>][ADD FOREIGN KEY [<外关键字>] TAG <标识名3> [FOR <条件3>]REFERENCES <表名2> [TAG <标识名4>]][DROP FOREIGN KEY TAG <标识名5> [SAVE]][RENAME COLUMN <字段名2> TO <字段名3>][NOVALIDATE] 功能:是对前两个功能的补充和增强,可以修改字段名(RENAME)、删除字段名(DROP),并且对有效性规则可以进行增加(ADD)、删除(DROP)等。

  14. 【例10.6】把“图书”表的“作者”字段该为“作者简介”,再删除 “作者简介”字段。把“借书”表的“图书编号”设为候选关键字。 ALTER TABLE "d:\new book\图书" RENAME COLUMN 作者 TO 作者简介 ALTER TABLE “d:\new book\图书” DROP COLUMN 作者简介 ALTER TABLE "d:\new book\借书" ADD UNIQUE 图书编号 TAG 编号

  15. 10-2-3 删除表 命令格式: DROP TABLE <表名> 功能:直接从磁盘上<或当前打开的数据库中删除指定的表文件。 【例10.7】删除已创建的“图书.DBF”数据表。 DROP TABLE "d:\new book\图书" 注意:删除表最好打开相应的数据库,再执行。否则以后会出现错误提示。如果只是想删除一个表中的所有记录,则应使用DELETE语句,

  16. 10-2-4 视图的定义 命令格式: CREATE VIEW <视图名> AS SELECT <查询语句> 功能:按照SELECT查询语句创建一个指定视图名的本地视图或者远程视图。 说明:使用当前数据库建立的视图,称为本地视图。如果使当前数据库之外的数据库建立的视图称为远程视图。 【例10.8】从前面创建的“学生情况表”表中取得记录来建立学生信息视图。 OPEN DATABASE "d:\new book\计算机系学生管理.dbc" CREATE VIEW 学生信息 AS SELECT * FROM学生情况表 说明:“*”代表取所有字段。

  17. 10-3 数据操纵 10-3-1插入记录 230 10-3-2更新记录 232 10-3-3删除记录 233

  18. 10-3-1 插入记录 1.命令格式1: INSERT INTO 表名〉[(<字段名1> [,<字段名2>, ...])] VALUES(<表达式1> [,<表达式2>, ...]) 功能: 在指定的表文件末尾追加一条记录。各字段值为VALUES中对应的各表达式值。

  19. 【例10.9】向“学生情况表”数据表中添加一条记录,其学号是“20111”,姓名是“王英”,性别是“女”,出生日期是“06/18/1986”。【例10.9】向“学生情况表”数据表中添加一条记录,其学号是“20111”,姓名是“王英”,性别是“女”,出生日期是“06/18/1986”。 INSERT INTO "d:\new book\学生情况表"(学号,姓名,性别,; 出生日期) VALUES ("20111","王英","女",ctod("06/18/1986")) BROWSE

  20. 2.命令格式2: INSERT INTO〈表名〉FROM ARRAY〈数组名|FROM MEMVAR 功能:为指定的表添加一条记录,用数组或同名的内存变量的值赋值给记录的各字段。

  21. 【例10.10】先定义数组CJ(4),它元素值分别为(“20100”,【例10.10】先定义数组CJ(4),它元素值分别为(“20100”, “丁丁”,80,90),然后再把该数组值插入到“学生成绩表” 表中。 DIMENSION CJ(4) CJ(1)= "20100" CJ(2)= "丁丁" CJ(3)=80 CJ(4)=90 INSERT INTO "d:\new book\学生成绩表" FROM ARRAY CJ BROWSE

  22. 【例10.11】先定义内存变量,分别为学号=“22111”,姓名=“黄红”,英语=95,电子线路=85,然后再把内存变量值插入到“学生成绩表”中。【例10.11】先定义内存变量,分别为学号=“22111”,姓名=“黄红”,英语=95,电子线路=85,然后再把内存变量值插入到“学生成绩表”中。 学号="22111" 姓名="黄红" 英语=95 电子线路=85 INSERT INTO "d:\new book\学生成绩表" FROM MEMVAR BROWSE

  23. 10-3-2 更新记录 命令格式: UPDATE [〈数据库!〉]〈表名〉 SET〈字段名1〉=〈表达式〉[,〈字段名2〉=〈表达式〉…] [WHERE〈条件〉] 功能: 更新指定表文件中满足WHERE条件子句的记录数据。其中SET子句用于指定字段和修改的值,如果省略WHERE子句,则表示表中所有的记录。

  24. 【例10.12】将“学生成绩表”表中,学号是“22111”的【例10.12】将“学生成绩表”表中,学号是“22111”的 记录,其高等数学成绩改为70,大学物理改为90,英语成 绩再加上1分。 UPDATE "d:\new book\学生成绩表" SET高等数学=70,; 大学物理=90, 英语=英语+1 WHERE 学号="22111" BROWSE

  25. 10-3-3 删除记录 命令格式: DELETE FROM [数据库名!]〈表名〉[WHERE〈条件1〉[AND | OR〈条件2〉...]] 功能: 从指定的表中逻辑删除满足WHERE子句条件的所有记录。如果要物理删除还需执行PACK命令,逻辑删除的记录才真正地从物理上删除。可以用RECALL命令取消逻辑删除。如果没有WHERE 字句则删除表中的全部记录。 说明: 这里的删除是逻辑删除,即在删除的记录前加上一个逻辑标记

  26. 【例10.13】逻辑删除“学生成绩表”表中,学号是“22111”的记录。【例10.13】逻辑删除“学生成绩表”表中,学号是“22111”的记录。 DELETE FROM "d:\new book\学生成绩表" WHERE 学号="22111" BROWSE

  27. 10-4 数据查询 10-4-1简单查询 235 10-4-2连接查询 236 10-4-3带特殊运算符的条件查询 238 10-4-4排序查询 240 10-4-5分组与计算查询 241 10-4-6别名与多表查询 242 10-4-7嵌套查询 242 10-4-8查询结果处理 243

  28. 10-4-1 简单查询 1.无条件查询 命令格式: SELECT [ALL|DISTINCT] <选项1> AS <显示列名1>,... <选项n> AS <显示列名n> FROM 表名 说明: • <选项n> 可以是字段名、常量、表达式、函数,如AVG(求均值)、SUM(求和)、COUNT(*)等指定查询的内容。 • 如果要查询所有字段,可以使用通配符“*”。

  29. 【例10.14】查询“学生情况表”表中,所有学生的记录信息。【例10.14】查询“学生情况表”表中,所有学生的记录信息。 SELECT * FROM "d:\new book\学生情况表"

  30. 2.条件查询 命令格式: SELECT [ALL|DISTINCT] <选项1> AS <显示列名1>,... <选项n> AS <显示列名n> FROM <表名> WHERE <条件表达式> 说明:条件表达式可以是简单表达式或任意复杂的复合表达式。最常用的是比较运算符,如:=、<>、!=、==、>、>=、<、<=,逻辑运算符NOT、AND、OR。

  31. 【例10.15】查询“学生情况表”表中,所有女学生的学号,姓名,年龄。【例10.15】查询“学生情况表”表中,所有女学生的学号,姓名,年龄。 SELECT 学号,姓名,year(date())-year(出生日期) AS "年龄"; FROM "d:\new book\学生情况表" WHERE 性别= "女"

  32. 10-4-2 连接查询 1.内部连接 子句命令格式: FROM〈表名1〉INNER JOIN〈表名2〉ON〈连接条件〉 【例10.16】从“学生情况表”和“学生成绩表”中查询出所有学生的学号、姓名、性别、高等数学和英语成绩。 SELECT 学生情况表.学号,学生情况表.姓名,性别,高等数学,英语; FROM 学生情况表 INNER JOIN 学生成绩表 ON 学生情况表.学号=学生成绩表.学号

  33. 2.外连接 (1)左连接 子句命令格式: FROM〈表名1〉LEFT JOIN〈表名2〉ON〈连接条件〉 说明:查询结果中返回<表名1> 中所有的记录,如果<表名2> 中某条记录满足<连接条件>, 则返回相应值,否则返回空值NULL。

  34. 【例10.17】用左连接的方式查询出“学生情况表”所有记录的学号、姓名、性别以及对应高等数学、大学物理和英语成绩。【例10.17】用左连接的方式查询出“学生情况表”所有记录的学号、姓名、性别以及对应高等数学、大学物理和英语成绩。 SELECT 学生情况表.学号,学生情况表.姓名,性别, 高等数学,; 大学物理,英语 FROM 学生情况表 LEFT JOIN 学生成绩表 ; ON 学生情况表.学号=学生成绩表.学号

  35. (2)右连接 子句命令格式: FROM〈表名1〉 RIGHT JOIN〈表名2〉ON〈连接条件〉 说明:与左连接相反,查询结果中返回<表名2>中所有的记录,如果<表名1> 中某条记录满足<连接条件>,则返回相应值,否则返回空值NULL。

  36. 【例10.18】用右连接的方式做10.17题。 SELECT 学生情况表.学号,学生情况表.姓名,性别, 高等数学,大学物理,英语 FROM 学生情况表 RIGHT JOIN 学生成绩表 ON 学生情况表.学号=学生成绩表.学号

  37. (3)完全连接 子句命令格式: FROM〈表名1〉 FULL JOIN〈表名2〉ON〈连接条件〉 说明:完全连接是左连接和右连接的综合,先进行右连接,然后再进行左连接。不满足连接条件则为空值NULL。查询结果包含两个表中的所有纪录。

  38. 【例10.19】用完全连接的方式做10.17题。 SELECT 学生情况表.学号,学生情况表.姓名,性别, 高等数学,大学物理,英语 ; FROM 学生情况表 FULL JOIN 学生成绩表 ON 学生情况表.学号=学生成绩表.学号

  39. 10-4-3 带特殊运算符的条件查询 1. IN运算符 查找出IN所指定的值的记录。 【例10.20】查询“学生情况表”中男生的所有信息。 SELECT * FROM 学生情况表 WHERE 性别 IN ("男")

  40. 2.Like运算符 将LIKE指定的字符串样式的记录查找出来。 注意:通配符“%”表示0至多个字符,“—”表示一个字符。 【例10.21】查询“学生情况表”中姓“王”的学生的记录信息。 SELECT * FROM 学生情况表 WHERE 姓名 LIKE "王%"

  41. 3.BETWEEN…AND运算符 查询数值在指定的范围之内的记录。也叫区间运算符。 【例10.22】从“学生成绩表”和“学生情况表”中查找出高等数学在70到85之间的男同学的学号、姓名、性别和高等数学信息。 SELECT DISTINCT 学生成绩表.学号,学生成绩表.姓名,; 性别,高等数学 FROM 学生成绩表,学生情况表 ; WHERE 高等数学 BETWEEN 70 AND 85 AND 性别="男"

  42. 4.IS NULL 运算符 该运算符主要是测试字段是否为空值。 【例10.23】查询“学生情况表”中的所有字段是否为空值。 SELECT 学号,性别 FROM 学生情况表 WHERE 性别 IS NULL

  43. 10-4-4 排序查询 子句命令格式: ORDER BY <排序列名1> [ASC | DESC] [,<排序列名2> [ASC | DESC] 说明:当有多个<排序列名>时,它们之间应该用逗号隔开,先按第一个排序,对第一个排序相同的记录根据第二个列名进行排序,以此类推。

  44. 【例10.24】:按照高等数学降序,大学物理降序列出所有学生的成绩信息。【例10.24】:按照高等数学降序,大学物理降序列出所有学生的成绩信息。 SELECT * FROM 学生成绩表 ORDER BY 高等数学 DESC,大学物理 DESC

  45. 10-4-5 分组与计算查询 1. 分组查询 子句命令格式: GROUP BY <分组列名1> [,<分组列名2>,….] [HAVING <筛选条件>] 说明:根据指定的字段进行分组查询,将具有相同数值的记录合并成一条。HAVING设置过滤条件,且必须与GROUP BY 一起使用,指定结果中的组必须满足的条件。HAVING子句与WHERE子句用法相同。

  46. 【例10.25】先查询“学生选课表”表中所有信息,然后再按课程号分组,最后查找课程号为102的学生的记录,并且按成绩降序排列。【例10.25】先查询“学生选课表”表中所有信息,然后再按课程号分组,最后查找课程号为102的学生的记录,并且按成绩降序排列。 SELECT * FROM 学生选课表 SELECT 课程号, COUNT(课程号) FROM 学生选课表; GROUP BY 课程号 SELECT * FROM 学生选课表 WHERE 课程号=102; ORDER BY 成绩 DESC

  47. 2. 计算查询 【例10.26】从“学生选课表”中查找选修课程2门以及2门以上的学生的学号,累计学分,求平均成绩。 SELECT 学号,SUM(学分) AS 累计学分,AVG(成绩); AS 平均成绩 FROM 学生选课表 GROUP BY 学号; HAVING COUNT(课程号)>=2

  48. 10-4-6 别名与多表查询 子句命令格式: FROM <表名1> <别名1> [,<表名2> <别名2>, …] 说明:给表定义别名以后就不需要用 表名.字段名来引用,而只需用别名.字段名来引用,比较简便。

  49. 【例10.27】定义“学生情况表”的别名为ST,定义“学生成绩表”的别名为CJ,查询出每个学生的学号,姓名,性别,英语,电子线路成绩。【例10.27】定义“学生情况表”的别名为ST,定义“学生成绩表”的别名为CJ,查询出每个学生的学号,姓名,性别,英语,电子线路成绩。 SELECT ST.学号,ST.姓名,性别,CJ.英语,CJ.电子线路; FROM 学生情况表 ST, 学生成绩表 CJ; WHERE ST.学号=CJ.学号

  50. 10-4-7 嵌套查询 嵌套查询就是在一个查询中有多个SELECT语句,用一个 SELECT语句查询结果作为另外一个SELECT语句的筛选条件。 【例10.28】利用“学生情况表”和“学生成绩表”查询所有高等数学>=80的女生的姓名,高等数学,英语,电子线路成绩。 SELECT ST.姓名,ST.性别,CJ.高等数学,CJ.英语,CJ.电子线路; FROM 学生情况表 ST, 学生成绩表 CJ ; WHERE ST.学号 IN (SELECT 学号 FROM 学生成绩表 ; WHERE 高等数学>=80) AND ST.学号=CJ.学号 AND 性别="女"

More Related