首页 第7章 SQL应用0

第7章 SQL应用0

举报
开通vip

第7章 SQL应用0nullnull关系型数据库标准语言SQL关系型数据库标准语言SQLSQL的数据查询功能 SQL的数据定义功能 SQL的数据操纵功能7.1 SQL语言概述7.1 SQL语言概述SQL语言的特点: (1)SQL是一种一体化的语言,决不仅仅是一个查询工具,它集数据定义、数据查询、数据操纵和数据控制功能于一体,可以独立完成数据库的全部操作。 (2)SQL语言是一种高度非过程化的语言,在描述清楚用户要“做什么”的情况下,SQL语言就可以将要求交给系统,自动完成全部工作。null(3)SQL语言非常简洁,它只有为数不...

第7章 SQL应用0
nullnull关系型数据库 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 语言SQL关系型数据库标准语言SQLSQL的数据查询功能 SQL的数据定义功能 SQL的数据操纵功能7.1 SQL语言概述7.1 SQL语言概述SQL语言的特点: (1)SQL是一种一体化的语言,决不仅仅是一个查询工具,它集数据定义、数据查询、数据操纵和数据控制功能于一体,可以独立完成数据库的全部操作。 (2)SQL语言是一种高度非过程化的语言,在描述清楚用户要“做什么”的情况下,SQL语言就可以将要求交给系统,自动完成全部工作。null(3)SQL语言非常简洁,它只有为数不多的9条命令:CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。其语法也非常简单,因此容易学习和掌握。 (4)SQL语言可以直接以命令方式交互使用,也可以嵌入到程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 语言中以程序方式使用。这些使用方式为用户提供了灵活的选择余地。尽管SQL的使用方式不同,但SQL语言的语法基本是一致的。7.2 SQL数据查询功能7.2 SQL数据查询功能SELECT [ALL|DISTINCT] [<别名>.]<字段名1>[AS <显示列名>][,[<别名>.]<字段名2>[AS <显示列名>]…] FROM [<数据库名>!]<表名> [[INNER | LEFT [OUTER] | RIGHT [OUTER]| FULL [OUTER] JOIN <数据库名>! ]<表名> [ON <联接条件>…] [WHERE <联接条件1> [ AND <联接条件2>…] [AND|OR <筛选条件1> [ AND|OR <筛选条件2>…]]] [GROUP BY <分组列名1>[, <分组列名2>…]] [HAVING < 筛选条件>] [UNION [ALL] SELECT命令] [ORDER BY <排序选项1>[ASC|DESC][,<排序选项2> [ASC|DESC]…]] [[INTO CURSOR 临时表名]|[INTO DBF|TABLE永久表名]|[TO FILE <文件名>] [ADDITIVE]|TO PRINTER [PROMPT] | TO SCREEN]] null 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 : SELECT输出查询结果中列的信息,不可缺省。ALL表示将数据库表的所有字段作为输出结果,可用“*”表示所有字段;DISTINCT用来去掉查询结果中列的重复项;如果是多个数据库表的联接查询,则必须说明所要查询字段所在的数据库表(或自表),即表名.字段名;AS用来为列数据重新定义标题。 FROM子句列出要查询的数据表,不可缺省。对于数据库表,可以用“数据库名!数据表名”来表示数据表名字。 nullWHERE子句说明查询的条件,包括联接条件和筛选条件。条件之间必须用“与”或“或”(.AND. 或 .OR.)关系运算符联接,此联接为等值联接。 FROM子句中提供的联接有内部联接,即相当于等值联接( INNER…JOIN…ON)和外部联接。外部联接又分为左外部联接、右外部联接和全外部联接( ( LEFT(RIGHT、FULL)…JOIN…ON)。 GROUP BY子句指定分组查询的分组依据,以便于对数据进行分组统计,分组依据可以是多个字段表达式。 nullHAVING短语一般是和GROUP BY子句一起使用,目的是对分组统计后的数据再进行筛选,用于指定筛选条件。 ORDER BY子句用来对查询结果按升序(ASC)或降序(DESC)进行排序,排序的依据可以是一个或多个字段表达式。 INTO和TO用于指定查询结果输出去向。ADDITIVE可以将查询结果追加到原文件的尾部,缺省时则将查询结果覆盖原文件。 除了SELECT子句和FROM子句外,其他子句均可缺省。7.2.1 简单查询7.2.1 简单查询 生成的简单查询是基于单个表。这些查询由SELECT…FROM短语构成无条件查询;或由SELECT…FROM…WHERE短语构成有条件的查询。 SELECT命令中的选项,不仅可以是字段名,也可以是表达式,也可以是函数,SELECT命令可以操纵的常用函数在下列表中列出。 null查询计算函数的格式及功能null举例: ⑴ 查询全部学生信息。 ⑵ 查询学生的姓名,并去掉重名。 ⑶ 查询全部学生的学号、姓名和年龄,并以学号、姓名和年龄字段输出。 ⑷ 对“选课成绩”表,查询出选修了课程号为“G0002”的所有学生的期末考试成绩的平均分、最高分和最低分。 ⑸ 统计男生人数,只显示“性别”、“男生人数”为列名的两列。 SELECT * FROM 学生 SELECT DISTINCT 姓名 FROM 学生 SELECT 学号, 姓名, YEAR(DATE())-YEAR(出生日期) AS 年龄 FROM 学生SELECT AVG(期末分) AS 平均分, MAX(期末分) AS 最高分, MIN(期末分) AS 最低分; FROM 选课成绩 WHERE 课程号=”G0002” SELECT 性别, COUNT(*) AS 男生人数 FROM 学生 WHERE 性别="男" 7.2.2 带条件的查询7.2.2 带条件的查询查询条件中常用的运算符nullnull举例: ⑴ 查询出“湖北”或“湖南”籍的学生名单。 ⑵ 查询出入学成绩在550分到650分之间的学 生名单。 ⑶ 查询出所有姓“王”的学生名单。 ⑷ 查询出所有非建筑学专业的学生名单。 SELECT 学号, 籍贯 FROM 学生档案 WHERE 籍贯 IN ("湖北","湖南") 或:SELECT 学号, 籍贯 FROM 学生档案 WHERE "湖"$籍贯 SELECT 学号, 入学成绩 FROM 学生档案WHERE 入学成绩 BETWEEN 550 AND 650 或:SELECT 学号, 入学成绩 FROM 学生档案; WHERE 入学成绩 >= 550 AND 入学成绩 <=650 SELECT 姓名 FROM 学生 WHERE 姓名 LIKE "王%" SELECT 姓名,专业 FROM 学生 WHERE 专业 NOT IN ("建筑学") 或:SELECT 姓名, 专业 FROM 学生 WHERE 专业 !="建筑学" 或:SELECT 姓名, 专业 FROM 学生 WHERE NOT(专业="建筑学") 7.2.3 嵌套查询(子查询)7.2.3 嵌套查询(子查询) 在一个SELECT命令中的WHERE子句中出现另一个SELECT命令,而该SELECT命令的结果作为主查询的条件,这种查询称为嵌套查询,或称为子查询。 创建“学生管理”数据库,添加表“学生”、“选课成绩”、“课程”、“学生档案”、“教师”和“任课”6个表。 1.返回单个值的子查询 null⑴ 查询出选修“大学英语”课的所有学生的学号。 ⑵ 查询出讲授“大学物理”(课程号为“G0004”)课的所有教师的姓名。 ⑶ 查询出选修了“G0005”课的学生的学号和期末分,这些学生的期末成绩高于选修了“G0005”课的平均期末成绩。 SELECT 学号 FROM 选课成绩 WHERE 课程号=; (SELECT 课程号 FROM 课程 WHERE 课程名称="大学英语") SELECT 姓名 FROM 教师 WHERE 教师代号=; (SELECT 教师代号 FROM 任课 WHERE 课程号="G0004")SELECT 学号, 期末分 FROM 选课成绩 WHERE 课程号="G0005" AND 期末分>=; (SELECT AVG(期末分) FROM 选课成绩 WHERE 课程号="G0005")null2.返回一组值的子查询 ⑴ IN运算符的运用 ① 查询出选修了“高等数学”或“大学计算机基础”的所有学生的学号。 ② 查询出所有至少一门课程分数在90分以上的学生信息。 ③ 查询出同时选修了课程号为“G0001”和“G0002”的学生的学号。 ④ 查询出所有“女生”的入学成绩总和。 SELECT 学号 FROM 选课成绩 WHERE 课程号 IN; (SELECT 课程号 FROM 课程 WHERE 课程名称="高等数学" OR 课程名称="大学计算机基础") SELECT * FROM 学生 WHERE 学号 IN; (SELECT 学号 FROM 选课成绩 WHERE 期末分>=90)SELECT 学号 FROM 选课成绩 WHERE 课程号="G0001" AND 学号 IN; (SELECT 学号 FROM 选课成绩 WHERE 课程号="G0002")SELECT SUM(入学成绩) FROM 学生档案 WHERE 学号 IN; (SELECT 学号 FROM 学生 WHERE 性别="女")null⑵ ALL运算符的运用 ① 查询出选修了“G0002”课的学生,这些学生的期末成绩比选修了“G0006”课的最高期末成绩还要高的学生的学号和期末成绩。 它等价与: SELECT 学号, 期末分 FROM 选课成绩 WHERE 课程号="G0002" AND 期末分>ALL(SELECT 期末分 FROM 选课成绩 WHERE 课程号="G0006")SELECT 学号, 期末分 FROM 选课成绩 WHERE 课程号="G0002" AND 期末分>=(SELECT MAX(期末分) FROM 选课成绩 WHERE 课程号="G0006") null⑶ ANY(或SOME)运算符的运用 ① 查询出选修了“G0002”课的学生,这些学生的期末成绩比选修了“G0006”课的最低期末成绩都要高的学生的学号和期末成绩。 它等价与:SELECT 学号, 期末分 FROM 选课成绩 WHERE 课程号="G0002" AND 期末分>ANY(SELECT 期末分 FROM 选课成绩 WHERE 课程号="G0006") SELECT 学号, 期末分 FROM 选课成绩 WHERE 课程号="G0002" AND 期末分>=(SELECT MIN(期末分) FROM 选课成绩 WHERE 课程号="G0006") null⑷ EXISTS运算符的运用 ① 查询出所有没有被选修的课程号和课程名称。 ②查询出所有任课教师的教师代号和姓名。 SELECT 课程号, 课程名称 FROM 课程 WHERE NOT EXISTS; (SELECT * FROM 选课成绩 WHERE 课程号=课程.课程号) SELECT 教师代号,姓名 FROM 教师 WHERE EXISTS; (SELECT * FROM 任课 WHERE 教师代号=教师.教师代号) 7.2.4 多表查询7.2.4 多表查询 查询出字段信息涉及到多个表,查询必须在多表之间进行,因此则必须处理表和表之间的联接关系。在联接操作中,经常需要使用关系名即表名作前缀。 1.等值联接 等值联接是按多个表中的相对应字段的共同值为联接条件而查询出的 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 集。 ① 查询出“自动化”专业的学生选课情况,要求输出姓名、课程名称、授课教师和学分数。 SELECT a.姓名 AS 学生姓名, e.课程名称,d.姓名 AS 教师姓名, e.学分; FROM 学生 a, 任课 b, 选课成绩 c, 教师 d, 课程 e; WHERE a.学号=c.学号 AND c.课程号=b.课程号 AND b.教师代号=d.教师代号 AND; b.课程号=e.课程号 AND a.专业="自动化" null2.非等值联接 ① 查询出选修了“G0006”课的学生中,成绩大于学号为“07170102”的学生选修该门课程成绩的学生的学号及其成绩。 ② 查询出每个学生所选修课程中期末成绩最高的学生信息。 SELECT a.学号,a.期末分 FROM 选课成绩 a, 选课成绩 b; WHERE a.期末分>b.期末分 AND a.课程号=b.课程号; AND b.课程号="G0006" AND b.学号="07170102" SELECT a.学号, a.课程号, a.期末分 FROM 选课成绩 a; WHERE 期末分=(SELECT MAX(期末分) FROM 选课成绩 b WHERE a.学号=b.学号) 7.2.5 联接查询7.2.5 联接查询 在FROM子句中提供的联接分为内部联接和外部联接。外部联接又分为左外部联接、右外部联接和全外部联接。 1.内部联接(INNER JOIN) 内部联接是指所有满足联接条件的记录都包含在查询结果中,事实上,以上多表查询中所举的例子全部都是内部联接。 ① 查询出喜欢唱歌的学生的学号和姓名。 SELECT a.学号, a.姓名 FROM 学生 a , 学生档案 b; WHERE a.学号=b.学号 AND “唱歌”$b.特长 如用内部联接: SELECT a.学号,a.姓名 FROM 学生 a INNER JOIN 学生档案 b ON a.学号=b.学号 AND "唱歌"$b.特长 7.2.6 排序与分组统计查询7.2.6 排序与分组统计查询1.排序(ORDER BY) SELECT查询结果是按查询过程中的自然顺序输出的,如果要使查询结果有序(升序或降序)输出,则需要用到子句ORDER BY,允许按一列或多列排序。 ① 查询教师的授课情况,要求输出教师的姓名、性别、职称以及授课的课程号,先按性别的升序排序,性别相同的,再按职称的降序排序。 SELECT a.姓名, a.性别, a.职称, b.课程号; FROM 教师 a INNER JOIN 任课 b ON a.教师代号 =b.教师代号; ORDER BY 性别,职称 DESC null2、分组统计(GROUP BY)与筛选(HAVING) GROUP BY子句可以对查询结果按指定列进行分组,分组的目的是为了进行统计,比如求某个组的最大值、最小值、平均值等等,也可以统计每一组的记录数。如果在分组的基础上还要按照某个条件再进行筛选,则必须使用与GROUP BY配套的子句HAVING。HAVING子句与WHERE子句功能一样,都是按条件进行筛选记录,但WHERE子句作用于基本表,而HAVING子句作用于组,必须与GROUP BY子句配合使用。 ⑴ 在“教师”表中,统计各个职称的人数,要求输出姓名、职称和各职称人数字段列。 SELECT 姓名, 职称, COUNT(*) AS 各职称人数 FROM 教师 GROUP BY 职称 null⑵ 在“学生”和“学生档案”两个表中,统计各个少数民族学生的人数。 ⑶ 在“选课成绩”表中,统计出各个课程期末成绩的平均分。 ⑷ 在上题基础上,统计出各个课程期末成绩的平均分高于80分的信息。 SELECT b.民族, COUNT(*) AS 各少数民族人数; FROM 学生 a , 学生档案 b WHERE a.学号=b.学号 AND b.民族!="汉" GROUP BY b.民族 SELECT 课程号,AVG(期末分) AS 各课程平均分 FROM 选课成绩 GROUP BY 课程号 SELECT 课程号, AVG(期末分) AS 各课程平均分 FROM 选课成绩; GROUP BY 课程号 HAVING AVG(期末分)>=80 7.2.7 查询结果处理7.2.7 查询结果处理1.显示部分结果 有时只需要显示满足条件的前几个记录,使用短语: TOP 数字表达式 [PERCENT] TOP短语必须与ORDER BY短语同时使用时才有效。不使用PERCENT时,数字表达式是1至32767之间的整数,表明显示前几个记录;使用PERCENT时,数字表达式是0.01至99.99之间的实数,表明显示结果中前百分之几的记录。null举例: ⑴ 查询出入学成绩前4名的学生的姓名、性别和入学成绩。 ⑵ 显示入学成绩前40%的学生的姓名、性别和入学成绩。 SELECT TOP 4 a.姓名,a.性别,b.入学成绩 FROM 学生 a,学生档案 b WHERE a.学号=b.学号 ORDER BY b.入学成绩 DESC SELECT TOP 40 PERCENT a.姓名,a.性别,; b.入学成绩 FROM 学生 a,学生档案 b; WHERE a.学号=b.学号 ORDER BY; b.入学成绩 DESCnull2.将查询结果存放到临时文件中 使用短语:INTO CURSOR 临时表名 将查询结果存放到临时数据库文件(游标)中,该短语产生的临时文件是一个只读的dbf文件,当查询结束后该临时数据库文件是当前文件,这个表文件的操作与其他表一样,不同的是,当关闭文件时该临时文件将自动删除。 举例: ⑴ 将查询到的职称为“教授”的教师信息存放到临时文件temp1中。 SELECT * FROM 教师 WHERE 职称="教授" INTO CURSOR temp1 null3.将查询结果存放到永久表中 使用短语:INTO DBF|TABLE 永久表名 将查询结果存放到永久表中(dbf文件)。 一般利用INTO CURSOR短语暂时存放一些中间结果,当使用完后关闭这些临时文件而自动删除。比如一些复杂的汇总查询需要分几个阶段完成,需要几个中间结果再汇总等等,下面例子分两部进行。 ⑴ 查询学生所修课程及期末考试成绩,要求输出学号、姓名、课程名称和期末分,并将结果存入永久表test2.dbf。 SELECT a.学号,a.姓名,b.课程号,b.期末分 FROM 学生 a,选课成绩 b; WHERE a.学号=b.学号 INTO CURSOR temp2 SELECT a.学号,a.姓名,b.课程名称,a.期末分 FROM temp2 a,课程 b; WHERE a.课程号=b.课程号 ORDER BY a.学号 INTO TABLE test2 null4.将查询结果存放到文本文件中 使用短语:TO FILE 文件名 [ADDITIVE]将查询结果存放到永久生成文本文件中。如果使用短语ADDITIVE,是将结果追加到原文本文件的尾部,否则将结果覆盖原有文件。 举例: ⑴ 将查询到的职称为“教授”的教师信息存放到文本文件temp.txt中。 SELECT * FROM 教师 WHERE 职称="教授" TO FILE temp additivenull5.将查询结果存放到数组中 使用短语:INTO ARRAY 数组变量名 可以将查询结果存放到数组中,生成的数组可以在程序执行过程中使用。 举例: ⑴ 将查询到的职称为“教授”的教师信息存放到数组temp中。 SELECT * FROM 教师 WHERE 职称="教授" INTO ARRAY temp null6.将查询结果直接输出到屏幕或打印机 使用短语:TO SCREEN或TO PRINTER [PROMPT] 可以将查询结果输出到Visual FoxPro的屏幕上和打印机上。如果使用选项PROMPT,则在开始打印之前打开打印机的设置对话框。 举例: ⑴ 将查询到的职称为“教授”的教师信息存放到屏幕或打印机上。 SELECT * FROM 教师 WHERE 职称="教授" TO SCREEN SELECT * FROM 教师 WHERE 职称="教授" TO PRINTER PROMPT 7.3 SQL数据定义功能 7.3 SQL数据定义功能 SQL数据定义有3组命令:建立数据库对象(CREATE)、修改数据库对象(ALTER)和删除数据库对象(DROP)。而数据库对象包括数据库、查询和视图,这3组命令针对不同的数据库对象分别有各自的3个命令。本节就以表对象的3个命令:建立表结构(CREATE TABLE)、修改表结构(ALTER TABLE)和删除表(DROP TABLE)来阐述SQL的数据定义功能。 7.3.1 表结构的定义7.3.1 表结构的定义 在Visual FoxPro中,还可以通过SQL语言的CREATE TABLE命令建立表结构,其命令格式为: CREATE TABLE|DBF <表名1> [FREE] (<字段名1> <字段类型> ( <字段宽度> [, <小数位数>] ) [ NULL| NOT NULL] [CHECK <条件表达式1> [ERROR <出错显示信息> ]] [DEFAULT <表达式1>] [PRIMARY KEY | UNIQUE ] REFERENCES <表名2> [TAG <标识1>] [<字段名2> <字段类型> ( <字段宽度>[, <小数位数>] ) [NULL| NOT NULL] [CHECK <条件表达式2 > [ERROR <出错显示信息>] ] [DEFAULT <表达式2 >] [PRIMARY KEY| UNIQUE ] REFERENCES <表名3> [TAG <标识2>] …) | FROM ARRAY <数组名> null说明: ⑴ 表名1:建立表的文件名。 ⑵ FREE:表示创建的表为自由表。 ⑶ 字段名1、字段名2、…:建立新表的字段名。 ⑷ 字段类型:字段类型 。 ⑸ 字段宽度及小数位数 。 ⑹ NULL、NOT NULL:规定该字段是否 接受.NULL.(空值),其默认值为NULL。 ⑺ CHECK <条件表达式>:检测字段的值是否有效 。null⑻ ERROR <出错显示信息>:进行CHECK检测,不满足条件,显示该出错提示信息。 ⑼ DEFAULT <表达式>:给字段指定默认值 ⑽ PRIMARY KEY:指定数据库表某字段为关键字段。如果该表为自由表,则不能使用该参数。 ⑾ UNIQUE:指定某个字段为候选关键字段。 ⑿ REFERENCES <表名>:新创建的表作为子表,而这里指定的表作为新创建表的永久性父表。 ⒀ TAG <标识>:确定父表中的关联字段,若缺省该参数,则父表中的主索引字段默认为关联字段。 ⒁ FROM ARRAY <数组名>:用指定的数组元素值创建表。 null举例: ⑴ 创建一个教师表Teacher,表结构为:教师代号(字符型)、姓名(字符型)、性别(逻辑型)、职称(字符型)、工资(货币型)、执教起始时间(日期型)。其中教师代号不能为空,工资在5000~6000之间,当输入数据时超过该范围,显示出错信息“工资在5000~6000之间,重新输入”。执教起始时间默认值为{^1980/1/1}。 由于没有打开或新建任何一个数据库,则建立的Teacher表是一个自由表。 CREATE TABLE Teacher(教师代号 C(8) NOT NULL , 姓名 C(8), 性别 L, 职称 C(10), ; 工资 Y CHECK 工资 >=5000 and 工资 <=6000; ERROR "工资在5000~6000之间,重新输入" , 执教起始 D DEFAULT {^1980/1/1} ) null⑵ 在创建的“学生教师管理”数据库中,创建4个表:教师表,课程表、任课表和成绩表,并且建立它们之间的联接关系。 用命令MODI DATA打开数据库设计器,可以看到所建立的表及它们之间的联系。 OPEN DATA 学生教师管理 CREATE TABLE 教师表(教师代号 C(6) PRIMARY KEY, 姓名 C(8), 性别 L,职称 C(10),工资 N(8,2) ) CREATE TABLE 课程表(课程号 C(5) PRIMARY KEY, 课程名 C(20), 学分 I ) CREATE TABLE 任课表(教师代号 C(6), 课程号 C(5), 教师姓名 C(8), FOREIGN KEY 教师代号 TAG 教师代号 REFERENCES 教师表, FOREIGN KEY 课程号 TAG 课程号 REFERENCES 课程表) CREATE TABLE 成绩表(学号 C(7),课程号 C(5),成绩 N(5,1),FOREIGN KEY 课程号 TAG 课程号 REFERENCES 课程表) 7.3.2 删除表 7.3.2 删除表 命令格式为:DROP TABLE <表名> 直接从磁盘上删除所指定的表文件。所指定的表文件是否为数据库中的表,如果是,则使该数据库为当前打开的数据库,执行删除操作后,从数据库中删除该表,否则虽然从磁盘上删除了该表文件,但记录在数据库文件DBC中的信息却没有删除,以后会出现错误提示。如果是自由表,则直接从磁盘中删除该表文件,但必须注意删除自由表时,必须关闭数据库,否则会显示在当前的数据库中找不到该表对象的提示信息。 例如:删除“学生教师管理”数据库中的表。 OPEN DATA 学生教师管理 DROP TABLE 成绩表 DROP TABLE 任课表 DROP TABLE 课程表 DROP TABLE 教师表 7.3.3 修改表结构7.3.3 修改表结构修改表结构命令:ALTER TABLE 该命令有3种格式 格式1: ALTER TABLE <表名1> ADD|ALTER [COLUMN] <字段名> <字段类型> [(<宽度> [,<小数位数>] )] [NULL| NOT NULL] [CHECK <逻辑表达式> [ERROR <出错信息显示> ] ] [DEFAULT <表达式> ] [PRIMARY KEY | UNIQUE ] [REFERENCES <表名2> [TAG <标识名> ] ] null 该格式命令可以添加(ADD)新的字段或修改(ALTER)已有的字段,其语法格式可以和CREATE TABLE的语法格式相对应。 举例: ⑴ 在创建的“学生教师管理”数据库中,创建3个表:Student,Score和Course;然后修改这3个表,在Student表中增加学号字段,并设置其为关键字段,修改Course表中的课程号字段为关键字段;并将这3个表建立关联,Score表与Student表以学号字段进行联接,Score表与Course表以课程号字段进行联接。 CREATE TABLE Student(姓名 C(10),入学成绩 N(5,1)) CREATE TABLE Course(课程号 N (7),课程名称 C(20),学分 N(1)) CREATE TABLE Score(学号 C(6),课程号 C(7),期末成绩 N(5,1)) ALTER TABLE Student ADD 学号 C(6) NOT NULL PRIMARY KEY ALTER TABLE Course ALTER 课程号 C(5) PRIMARY KEY ALTER TABLE Score ALTER 学号 C(6) PRIMARY KEY REFERENCES Student TAG 学号 ALTER TABLE Score ALTER 课程号 C(5) REFERENCES Course TAG 课程号 null 用命令MODI DATA打开数据库设计器,可以看到所建立的表及它们之间的联系。 null格式2: ALTER TABLE <表名> ALTER [COLUMN] <字段名> [NOT NULL] [SET DEFAULT <表达式> ] [SET CHECK <逻辑表达式> [ERROR <出错显示信息> ] ] [DROP DEFAULT] [DROP CHECK] 该格式命令主要用于定义、修改和删除有效性 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 及默认值定义。 举例: ⑴ 定义Student表的入学成绩字段不能为空值;设置有效性规则及默认值;如有需要可以对CHECK作相应修改;删除有效性规则及默认值设置 。 ALTER TABLE Student ALTER 入学成绩 NOT NULL ALTER TABLE Student ALTER 入学成绩 SET DEFAULT 500 SET CHECK 入学成绩>=500 AND 入学成绩<=600 ERROR "入学成绩在500到600之间" ALTER TABLE Student ALTER 入学成绩 SET DEFAULT 550 SET CHECK 入学成绩>=550 AND 入学成绩<=600 ERROR "入学成绩在550到600之间" ALTER TABLE Student ALTER 入学成绩 DROP DEFAULT DROP CHECK null格式3: ALTER TABLE <表名> [DROP [COLUMN ] <.字段名> ] [SET CHECK <逻辑表达式> [ERROR <出错显示信息> ] ] [DROP CHECK ] [ADD PRIMARY KEY <表达式> TAG <索引标识> [FOR <逻辑表达式> ] ] [DROP PRIMARY KEY ] [ADD UNIQUE <表达式> [TAG <索引标识> [FOR <逻辑表达式> ] ] ] [DROP UNIQUE TAG <索引标识>] [ADD FOREIGN KEY <表达式> TAG <索引标识> [FOR <逻辑表达式> ] REFERENCES <表名2> [TAG <索引标识> ] ] [DROP FOREIGN KEY TAG <索引标识> [SAVE ] ] [RENAME COLUMN <原字段名> TO <目标字段名> ] null 该格式命令可以删除指定字段(DROP [COLUMN])、修改字段名(RENAME COLUMN)以及修改指定表的完整性规则,比如主索引、外关键字、候选索引并建立关联等、对表的合法值限定的建立与删除。 举例: 修改Course表 、Score 表属性,比如设置和删除Check规则,建立关联和删除关联等。打开“学生教师管理”数据库,当进行以上的各种操作后,均可以在该数据库中的数据库表中显示出来。 ALTER TABLE Course SET CHECK SUBSTR(课程号,1,1)="T" ERROR "课程号以T开头" ALTER TABLE Course DROP CHECK ALTER TABLE Course ADD PRIMARY KEY 课程号 TAG 课程号 ALTER TABLE Course DROP PRIMARY KEY ALTER TABLE Score ADD FOREIGN KEY 课程号 TAG 课程号 REFERENCES Course TAG 课程号 ALTER TABLE Score DROP FOREIGN KEY TAG 课程号 ALTER TABLE Score RENAME COLUMN 期末成绩 TO 期末分 ALTER TABLE Course DROP COLUMN 课程名称 ALTER TABLE Course ADD UNIQUE 课程号 TAG 课程号 ALTER TABLE Course DROP UNIQUE TAG 课程号 7.4 SQL数据操纵功能7.4 SQL数据操纵功能 SQL的数据操纵功能是完成对数据库中数据的操作,主要由数据插入(INSERT)、数据更新(UPDATE)和数据删除(DELETE)等命令组成。 7.4.1 数据插入(INSERT) Visual FoxPro支持两种SQL数据插入命令的格式。第一种是标准格式,第二种是Visual FoxPro的特殊格式。 null第一种格式: INSERT INTO <表名> [(字段名1 [,<字段名2> [,...] ] )] VALUES(<表达式1> [,<表达式2> [,...] ]) INSERT INTO在指定表的尾部添加新记录;其记录值为VALUES后面表达式的值。 只需插入某些字段数据时,只列出插入数据的字段名,并且数据必须与字段要一一对应;当需要插入表中所有字段的数据时,表名后面的字段名可以省略,但插入数据格式及顺序必须与表的结构对应。 null第二中格式: INSERT INTO <表名> FROM ARRAY <数组名>| FROM MEMVAR 在指定的表尾添加一条新记录,FROM ARRAY <数组名>说明从指定的数组中插入记录值;FROM MEMVAR说明从同名的内存变量来插入记录值。 举例: ⑴ 向“学生”表尾部追加两条记录。一条为所有字段数据,一条只输入 学号和姓名数据。 INSERT INTO 学生; VALUES(“07452109”, “李丙”, “男”, 1.74, {^1989-09-18}, "法学", .T. , "优秀学生干部") INSERT INTO 学生(学号, 姓名) VALUES("07452120", "张丁") null⑵ 定义一个数组A(4),向数组中的各个元素赋值。利用该数组向教师表中添加记录。 DIMENSION A(4) A(1)="T0002" A(2)="张甲" A(3)="男" A(4)="教授" INSERT INTO 教师 FROM ARRAY A 要求数组中各元素的数据类型与表中各字段的数据类型要一一对应,如果不一致,则新记录对应的字段值为空值;如果表中的字段数大于数组中的数组元素个数,则多出的字段值为空值。 7.4.2 数据更新(UPDATE) 7.4.2 数据更新(UPDATE) UPDATE命令对指定表中记录的某些字段值进行数据更新。命令格式为: UPDATE [ <数据库名>!] <表名> SET <字段名1>=<表达式1>[,<字段名2>=<表达式2>...] [WHERE <逻辑表达式>] WHERE子句指定更新条件,对满足条件的一些记录的字段用表达式的值进行更新。若不使用WHERE子句,则对全部的记录进行更新。 null举例: ⑴ 在“学生档案”表中将学号为“07170102”学生的籍贯改为黑龙江,民族改为满族。 ⑵ 在选课成绩表中,对学号前两个字符为“07”的学生所选修的课程为“大学英语”的平时分加10分。 UPDATE 学生档案 SET 籍贯="黑龙江", 民族="满" WHERE 学号="07170102" UPDATE 选课成绩 SET 平时分=平时分+10 ; WHERE SUBSTR(学号,1,2)="07" AND 课程号 IN(SELECT 课程号 FROM 课程 WHERE 课程名称="大学英语")7.4.3 删除记录(DELETE) 7.4.3 删除记录(DELETE) SQL的DELETE命令可以为指定表中的记录进行逻辑删除。命令格式为: DELETE FROM [<数据库名>!] <表名> [WHERE <条件表达式>] 举例: ⑴ 在“学生”表中逻辑删除性别为“男”、并且修了课程号为“G0005”的学生记录。 DELETE FROM 学生 WHERE 性别="男" AND 学号 IN(SELECT 学号 FROM 选课成绩 WHERE 课程号="G0005")
本文档为【第7章 SQL应用0】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_656509
暂无简介~
格式:ppt
大小:412KB
软件:PowerPoint
页数:0
分类:其他高等教育
上传时间:2013-08-09
浏览量:14