已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 SQL关系数据库查询查询语言 125第7章 SQL关系数据库查询语言7.1 SQL语言概述SQL是Structured Query Language的缩写,意思为“结构化查询语言”,它是关系数据库的标准语言。SQL包含:(1)数据查询 SELECT(2)数据定义 CREATE、DROP、ALTER(3)数据修改 INSERT、UPDATE、DELETE(4)数据控制 GRANT、REVOKE其中数据查询是SQL语言的重要组成部分。Visual FoxPro6.0在SQL方面没有提供数据控制功能。例:1. SQL 语言的核心是()CA 数据操纵B 数据定义C 数据查询D 数据控制7.2 SQL的数据查询功能由SELECT构成的数据查询语句是SQL的核心语句。SELECT语句包括单表查询、多表连接查询、嵌套查询和集合查询等。7.2.1 SQL语法格式SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。【格式】SELECT ALL|DISTINCT TOP|PERCENT, AS FROM ,WHERE GROUP BY HAVING ORDER BY ASC|DESCINTO ARRAY |INTO CURSOR |INTO DBF|TABLE |TO FILE ADDITIVE|TO PRINTERPROMPT【说明】整个语句的含义是,根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中查找出满足条件的记录,再按SELECT子句中的目标表达式选出记录中的字段值形成结果表。GROUP限定结果分组,ORDER限定结果的排序。其中主要短语的含义如下: SELECT说明要查询的数据; FROM说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询; WHERE说明查询条件,即选择元组的条件; GROUP BY短语用于对查询结果进行分组,可以利用它进行分组汇总; HAVING短语必须跟随GROUP BY使用,它用来限定分组必须满足的条件; ORDER BY短语用来对查询的结果进行排序。本章都是以 “教学”数据库为例进行查询。7.2.2 简单查询简单查询是对一个基本表做的简单查询,有以下几种情况:1查询全部或部分字段【例7.1】 显示学生表中所有信息SELECT * FROM 学生说明:* 表示输出显示所有的字段。查询结果的字段顺序可以和原表中的字段的顺序不一致。【例7.2】 显示教师表中男教师的姓名、职称和部门信息。SELECT 姓名,职称, 部门FROM 教师 WHERE 性别=男2查询结果可以是通过某一字段或几个字段计算得到的虚拟字段【例7.3】 显示入学成绩表中学生的语、数、外的平均成绩。SELECT 学号,姓名,(语文数学外语)/3 AS 平均分 FROM 入学成绩 AS 短语可以省略,AS后面只是标识,不是字段。3去掉查询结果中的重复记录【例7.4】 显示教师表中都有哪些部门。SELECT 部门 FROM 教师 利用DISTINCT去掉查询结果中的重复记录。SELECT DISTINCT 部门 FROM 教师例:05:8.查询 教师 表中 职称 为 教授 的教师信息,应该使用的命令是()D ASELECT* FROM教师WHERE 教授 $ ALLTRIM(职称) B.SELECT* FROM教师WHERE RIGHT(ALLTRIM(职称),4)=教授 CSELECT* FROM教师WHERE HEAD(ALLTRIM(职称),4)=教授 DSELECT* FROM教师WHERE LEFT(ALLTRIM(职称),4)= 教授 05: 教师表 教师(教工号C (5),姓名C (6),职称C (6),出生日期D,工资N (10,2),系号N(1)教工号 姓名 职称 出生日期 工资系号 10001张立中 副教授 07/01/70 2000.00 1 20002 王秋艳教授 02/05/63 3000.00 2 10003刘星斌讲师 07/01/78 1500.00 1 30004张月新讲师 07/23/75 1600.00 3 10005李明玉教授 12/01/69 2600.00 1 20006孙民山助教 07/03/82 1100.00 2 30007刘芳菲教授 09/01/60 2200.00 3写出下述SQL语句的查询结果。SELECT姓名,职称FROM教师WHERE工资=2500王秋艳教授李明玉教授07:14.在SQL查询中,使用WHERE子句指出的是()DA.查询目标 B.查询结果C.查询视图 D.查询条件7.2.3 联接查询有一些查询同时涉及到两个或两个以上的表时,这种查询称之为联接查询(也称为多表查询)。在多表之间进行查询时,必须处理表与表之间的联接关系,具体按照哪一个关键字进行联接。1简单联接查询【例7.5】 显示学生的学号、姓名、课程名和成绩的信息。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程 WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号在该查询中学号、姓名是学生表的字段,课程名是课程表的字段,成绩是选课表的字段。FROM后面是这三个表名,WHERE后面是表之间联接的条件,当不同表中含有相同的字段名时(如学号和课程号字段),必须指明是哪个表的字段。2超联接查询以上的联接只是按照联接条件两个表进行联接,那么不符合联接条件的记录也要查询出来,就要利用超联接查询,超联接分为内联接(也称为等值联接)、左联接、右联接和全联接。其语法结构如下: 【格式】SELECTFROM INNER|LEFT|RIGHT|FULL JOIN ON WHERE【说明】INNER JOIN 或JOIN为内联接,也称为等值联接,按照联接条件进行联接,不满足条件的记录不会出现在查询结果中,是常用的一种联接形式。LEFT JOIN 为左联接,除按照联接条件进行联接外,第一个表不满足条件的记录也会出现在查询结果中。RIGHT JOIN 为右联接,除按照联接条件进行联接外,第二个表不满足条件的记录也会出现在查询结果中。FULL JOIN 为全联接,除按照联接条件进行联接外,两个表中不满足条件的记录也会出现在查询结果中。ON 指明联接条件,而不能在WHERE后面给出联接条件。下面举例来比较这四种联接方式的不同,我们以简单联接查询的【例7.6】为例分别以四种联接方式进行查询,比较查询结果的不同之处。查询学生的学号、姓名、课程名和成绩的信息。【例7.6】 内联接查询SELECT 学生.学号,姓名,课程名,成绩 FROM( 学生 JOIN 选课 ON 学生.学号=选课.学号) JOIN 课程 ON 选课.课程号=课程.课程号 等价于另一种内联接查询方式。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生 JOIN 选课 JOIN 课程 ON 选课.课程号=课程.课程号 ON 学生.学号=选课.学号注意:多个表用“JOIN”语句联接的顺序要与联接条件“ON”的顺序恰好相反。内联接查询等价于简单联接查询。SELECT 学生.学号,姓名,课程名,成绩 FROM 学生,选课,课程 WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号【例7.7】 左联接查询SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 LEFT JOIN 选课 ON 学生.学号=选课.学号)LEFT JOIN 课程 ON 选课.课程号=课程.课程号因为是左联接查询,其中学生表中有四个学生记录没有选课,不符合联接条件,同样也被查询出来,该学生没有选课,因此相应的课程名和成绩为空。【例7.8】 右联接查询SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 RIGHT JOIN 选课 ON 学生.学号=选课.学号)RIGHT JOIN 课程 ON 选课.课程号=课程.课程号因为是右联接查询,其中课程表中有的课程记录没有被学生所选,不符合联接条件,同样也被查询出来,该课程没有被学生所选,因此相应的学号和姓名为空。【例7.9】 全联接查询SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 full JOIN 选课 ON 学生.学号=选课.学号)full JOIN 课程 ON 选课.课程号=课程.课程号全联接查询的结果是左联接查询和右联接查询结果的并集。例:2.SQL语句中,SELECT命令中的JOIN是用来建立表间的联系短语,联接条件应出现在下列哪个短语中()BA. WHEREB. ONC. HAVINGD. INNER7.2.4 嵌套查询在SQL语言中,可以用多个简单查询构成复杂的查询,从而增强SQL的查询能力。如果把SELECT-FROM-WHERE语句称为一个查询块,那么嵌套查询就是指将一个查询块嵌套在另一个查询块WHERE子句或HAVING短语条件中的一种查询方式。1带有比较运算的子查询当子查询的返回结果是个单列时,可以使用、=、!=等或使用带有谓词ANY、SOME、ALL的比较运算符进行查询。【例7.10】 查询教师表中与李明同一职称的姓名和职称。SELECT 姓名,职称 FROM 教师 WHERE 职称=(SELECT 职称 FROM 教师 WHERE 姓名=李明)注意:在使用、=、!=等比较运算符不带有谓词ANY、SOME、ALL时,子查询的查询结果一定就是一条记录的一个字段(即一个数值),当查询结果是多条记录或多个字段时将无法进行比较运算。【例7.11】 查询每一门课程成绩都大于等于学号为“080102”的所有科成绩的学生学号(这里并不是每一门课程对应比较)。SELECT 学号 FROM 选课 WHERE 成绩=ALL (SELECT 成绩 FROM 选课 WHERE 学号= 080102)2其它运算的子查询子查询中使用最多的是谓词IN,EXISTS和NOT IN,NOT EXISTS,含义为当查询的指定字段值包含(或不包含)在子查询结果字段值表中时条件为真。【例7.12】 查询选课程号是1001课的学生的学号和姓名。select 学号,姓名 from 学生 where 学号 in (select 学号 from 选课 where 课程号=1001)【例7.13】 查询没有选修任何一门课的学生信息。SELECT * FROM 学生 WHERE NOT EXISTS (SELECT * FROM 选课 WHERE 学号=学生.学号)注意:NOT EXISTS即不是比较,也不是运算,只是判断子查询中是否有查询结果,所以与其它嵌套查询不同,在谓词NOT EXISTS前没有相应的字段名。例:06:5.根据“工资”表中的数据,以下SQL语句中执行结果相同的有( )ADEA. SELETE * FROM 工资 WHERE 部门号 IN(21,22) B. SELETE * FROM 工资 WHERE LEFT(部门号,1) 3C. SELETE * FROM 工资 WHERE 部门号21 AND部门号22 D. SELETE * FROM 工资 WHERE 部门号21 OR部门号22E. SELETE * FROM 工资 WHERE LEFT(部门号,1)= 23.SQL语句可以进行多个查询的嵌套,但Visual FoxPro中只支持()层嵌套。BA. 1B.2C.3D.无穷4.在成绩表中,查找物理分数最高的学生记录,下列SQL语句的空白处应填入的是()DSELECT * FROM 成绩表WHERE 物理=(SELECT 物理 FROM 成绩表)A. SOME B. EXITSC. ANYD. ALL5.当前目录下有XUESH.dbf和CHJI.dbf两个表文件,要求查找同时选修了课程号为“9801”和“9802”的学生姓名,下列SQL语句的空白处应填入的语句为()ASELECT 姓名 FROM XUESH.CHJI;WHERE XUESH.学号=CHJL.学号;AND 课程号=“9801”; AND 姓名 ;(SELECT 姓名 FROM XUESH,CHJI WHERE XUESH.学号=CHJI.学号;AND 课程号=”9802”)A. IN B. EXITSC. LIKED. ALL7.2.5 几个特殊的运算符当查询的值介于什么范围之内,可以使用NOT BETWEENAND。【例7.14】 查询入学成绩在550到610之间的学生信息。SELECT * FROM 学生 WHERE 入学成绩 BETWEEN 550 AND 610当查询是进行字符串匹配时,可以使用NOT LIKE。【例7.15】 查询所有姓李的学生信息。SELECT * FROM 学生 WHERE 姓名 LIKE 李%在字符串匹配查询中可以使用通配符,%(百分号)表示任意长度的字符串,_(下划线)表示任意单个字符串。当涉及空值查询时,可以使用IS NOT NULL。【例7.16】 查询有哪些课程还没有选定老师来上课。SELECT * FROM 课程 WHERE 教师号 IS NULLNULL表示空,意思是还没有确定,与数值“0”不一样,0表示一个确切的数。在判断空值时要使用“IS”语句,不确定就不能进行比较,因此不能使用比较运算符“=”来判断。例:6.有如下SQL SELECT 语句:SELECT *FROM 工资表 WHERE 基本工资=1000下列语句与该语句等价的是()AA. SELECT * FROM 工资表 WHERE 基本工资 BETWEEN 1000 AND 3000B. SELECT * FROM 工资表 WHERE 基本工资 BETWEEN 3000 AND 1000C. SELECT * FROM 工资表 WHERE 基本工资 FROM 1000 INTO 3000D. SELECT * FROM 工资表 WHERE 基本工资 FROM 3000 INTO 10007.查询“学生成绩”表中所有不是姓“李”的学生记录,其SQL语句为:SELECT * FROM 学生成绩 WHERE 姓名 “李%” NOT LIKE8.检索尚未确定的供应商的订单号,正确的语句是()CA. SELECT * FROM 订购单 WHERE 供应商号 NULLB. SELECT * FROM 订购单 WHERE 供应商号 =NULLC. SELECT * FROM 订购单 WHERE 供应商号 IS NULLD. SELECT * FROM 订购单 WHERE 供应商号 IS NOT NULL7.2.6 排序我们可以使用ORDER BY语句按照一个或多个字段对查询结果进行升序(ASC)或降序(DESC)排列,默认为升序排列。对于空值排序,升序时空值记录将最后显示,降序时将最先显示。ORDER BY语句只能对最终的查询结果进行排序,在子查询中不能使用。ORDER BY语句后不能接任何运算表达式,不能按某个表达式的运算结果进行排序。使用TOP PERCENT语句可以只显示排序之后的前几条记录或前百分之多少条记录。【例7.17】 查询计算机专业的学生信息,查询结果按入学成绩降序排列。SELECT * FROM 学生 WHERE 专业=计算机 ORDER BY 入学成绩 DESC【例7.18】 查询入学成绩前二名的学生信息。SELECT * TOP 2 FROM 学生 ORDER BY 入学成绩 DESC【例7.19】 显示入学成绩由高到低的前百分之三十的学生信息。SELECT * TOP 30 PERCENT FROM 学生 ORDER BY 入学成绩 DESC注意: TOP语句要与ORDER BY语句同时使用才有效。例:05:10.在Visual FoxPro的查询设计器中“排序“,选项卡对应的SQL短语是()B A. SET B.ORDER BY C. WHERE D. JOIN08: 11.按工资升序显示“人才”表中的人员“姓名”和“工资”的SQL语句是()A A. SELECT姓名,工资FROM人才ORDER BY工资ASC B. SELECT姓名,工资FROM人才ORDER BY工资DESC C. SELECT姓名,工资FROM人才GROUP BY工资ASC D. SELECT姓名,工资FROM人才GROUP BY工资DESC9.下列对于SQL的嵌套查询排序的描述中,说法正确的是()DA. 既能对外层查询排序,也能对内层查询排序B. 只能对外层查询排序,不能对内层查询排序C. 不能对外层查询排序,只能对内层查询排序D. 既不能对外层查询排序,也不能对内层查询排序10.在成绩表中要求按“物理”降序排列,并查询前两名学生的姓名,正确的语句是()DA. SELECT 姓名 TOP 2 FROM 成绩表 WHERE 物理 DESCB. SELECT 姓名 TOP 2 FROM 成绩表 FOR 物理 DESCC. SELECT 姓名 TOP 2 FROM 成绩表 GROUP BY 物理 DESCD. SELECT 姓名 TOP 2 FROM 成绩表 ORDER BY 物理 DESC7.2.7 计算查询与分组查询在查询过程中,可能会遇到一些简单的计算,下面我们介绍几个在查询中用到的计算函数。l COUNT() 统计记录的个数。l COUNT( DISTINCT|ALL )统计一列中值的个数l SUM(DISTINCT|ALL)计算某一列值的总和(此列必须是数值型)。l AVG(DISTINCT|ALL)计算某一列值的平均值(此列必须是数值型)。l MAX(DISTINCT|ALL)计算某一列值的最大值。l MIN(DISTINCT|ALL)计算某一列值的最小值。如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。【例7.20】 查询选修了课程的学生人数。SELECT COUNT(DISTINCT 学号) FROM 选课注意:一个学生可能选修了多门课程,所以要用DISTINCT语句去掉重复的记录。【例7.21】 查询学生的入学平均成绩。SELECT AVG(入学成绩) FROM 学生例:05:4.在Visual FoxPro中用SQL语句进行查询时,用于统计数据表中记录个数的函数是()CA. AVG() B. MAX() C .COUNT()D. SUM()06:17. 查询应发工资最高的职工姓名和应发工资,正确的SQL语句是( )CA. SELETE 姓名,AVG(应发工资) FROM 工资B. SELETE 姓名,MIN(应发工资) FROM 工资C. SELETE 姓名,MAX(应发工资) FROM 工资D. SELETE 姓名,最高应发工资 FROM 工资“职工”表职工(编号(C,3),姓名(C,8),性别(C,2),出生日期(D),婚否(L),职务号(C,2),工资(N,7,2) 编号 姓名 性别 出生日期 婚否 职务号 工资 001 王云鹤 男 01/05/1969 T 03 1276.00 002 张晓云 女 12/25/1974 F 04 980.00 003 刘玉龙 男 04/17/1955 T 01 1580.00 004 刘宗武 男 10/18/1975 F 05 876.00 005 孙大鹏 男 06/15/1975 T 05 850.00 006 李莉 女 12/12/1970 T 02 1290.00“职务”表职务(职务号(C,2),职务名称(C,6) 职务号 职务名称 01 处长 02 副处长 03 科长 04 秘书 05 科员07:13.显示“职工”表中女职工的工资和,程序如下:SET TALK OFFCLEARSELECT_FROM 职工;WHERE 性别女RETURN13、Sum(工资)例:11.利用SQL语句统计选修了“日语”课程的学生人数。请将下列的语句补充完整。SELECT FROM 选课表 WHERE 课程名= “日语”COUNT(*)上面的一些计算函数是对整个表中的记录进行计算,可以利用GROUP BY语句把记录分组分别进行计算。GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。同时还可以用HAVING语句对分组的记录加以限定再计算,HAVING语句不能单独使用只能跟在GROUP BY语句之后,在查询过程中与WHERE语句并不矛盾,WHERE语句限定所有记录,HAVING语句只限定分组。【例7.22】 查询选修了两门以上课程的学生平均成绩等信息。SELECT 学号,AVG(成绩) AS 平均成绩 FROM 选课 GROUP BY 课程号 HAVING COUNT(*)=2实际上在分组查询时,有时要求分组需要满足某个条件时才可以检索,这时可以用HAVING子句来限定分组。注意:HAVING子句和WHERE子句的区别:WHERE子句是用来指定表中各行所应满足的条件,用于基表或视图,而HAVING子句是用来指定每一分组所满足的条件,作用于组,只有满足HAVING条件的那些组才能在结果中被显示。另外HAVING子句总是跟在GROUP BY子句之后,不可以单独使用。HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。例:07:12.“职工”表中求每种职务的平均工资的SQL语句是()BA.SELECT 职务号,AVG(工资) FROM 职工 ORDER BY 职务号 B.SELECT 职务号,AVG(工资) FROM 职工 GROUP BY 职务号C.SELECT 职务号,AVG(工资) FROM 职工 GROUP BY 工资D.SELECT 职务号,AVG(工资) FROM 职工 ORDER BY 工资例:12.在成绩表中,检索选修三门以上课程的学生及格学科的总成绩。成绩表中包含学号、姓名、课程名和成绩4个字段。将下列的SQL语句补充完整。HAVINGSELECT 学号,SUN(成绩) FROM 成绩表;WHERE 成绩=60GROUP BY 学号; COUNT (*)=37.2.8 集合的并运算使用UNION子句可以进行集合的并运算,即可以将两个SELECT语句的查询结果合并成一个查询结果。但是要求进行并运算的两个查询结果要具有相同的字段个数,并且对应字段的值要具有相同的数据类型和取值范围。【例7.23】 查询教师表中助教和副教授的教师号、姓名、性别和职称。SELECT 教师号,姓名,性别,职称 FROM 教师 WHERE 职称=助教;UNION SELECT 教师号,姓名,性别,职称 FROM 教师 ;WHERE 职称=副教授7.2.9 查询去向1在查询窗口中显示查询结果使用SELECT语句查询默认情况下,是将结果显示在查询窗口中。本章上面的例子都是将查询结果查询窗口。2利用临时表文件存放查询结果使用INTO CURSOR语句可以将查询结果存放在临时表文件中,该表是一个只读的表文件,可以像一般的表文件一样在程序中使用,程序结束关闭文件时该表文件将自动删除。【例7.24】 将学生表中入学成绩最高的三位学生信息存放到临时表aab中。SELECT * TOP 3 FROM 学生 ORDER BY 入学成绩 DESC INTO CURSOR aab该语句执行完成之后,临时表将自动打开,并且是当前文件。可以通过浏览命令查看查询结果。在一些复杂的查询中,需要分步来完成,利用临时表文件存放每一步的查询结果,最终完成这个复杂的查询。3利用永久表文件存放查询结果使用INTO DBFTABLE 语句可以将查询结果存放在永久表文件中,该SELECT语句执行完查询之后,该表将以自由表保存并作为当前文件自动打开。【例7.25】 将男学生的信息存放到永久表abc中。SELECT * FROM 学生 WHERE 性别=男 INTO DBF abc4利用文本文件存放查询结果使用TO FILEADDITIVE语句可以将查询结果存放在文本文件中,如果使用ADDITIVE语句,查询结果将追加到该文本文件尾部,否则将覆盖原有文件。【例7.26】 将男学生的信息存放到文本文件abc中。SELECT * FROM 学生 WHERE 性别=男 TO FILE abc5利用数组存放查询结果使用INTO ARRAY语句将查询结果存放在变量数组中,如果查询结果是多列多条记录,将其自动存在二维数组中,数组的行列与记录的行列元素对应。在涉及到计算查询时,查询结果一般是一个数值,如平均值、最值等,可以将其存放到一维数组的第一元素中,然后在程序中再进行处理。【例7.27】 计算学生表中有多少位男学生将其存放在变量aa中。SELECT COUNT(*) FROM 学生 WHERE 性别=男 INTO ARRAY aa变量aa中存放的是5,在学生表中有5位男学生。注意:变量aa其实也是一个数组,但是数组aa就一个数据元素aa(1,1),使用时可以省略下标,直接用变量aa即可。【例7.28】 将学生的信息存放到二维数组ab中。SELECT * FROM 学生 INTO ARRAY ab二维数组ab (1,1)存放着第一条记录的第一个字段的值“080101”。例:13.SQL查询语句中,要将结果输入到一个临时表中,应选择的字句是 ()CA. TO FILEB. INTO ARRARYC. INTO CURSORD. INTO TABLE14.检索学生表中“性别”为“男”的学生记录,将结果保存到文本文件XB中,其SQL语句为:TO FILESELECT *FROM 学生表 WHERE 性别=“男” XB7.3 SQL的定义功能标准SQL的数据定义功能非常广泛,在本节将主要介绍Visual FoxPro 6.0支持的表定义功能和视图定义功能。7.3.1 创建表创建表命令:【格式】CREATE TABLE ( ( ,)NULL|NOT NULL CHECK 域完整性约束条件 ERROR 出错信息 DEFAULT 默认值 PRIMARY KEY,)【说明】创建一个只有字段没有记录的空数据表。【例7.29】 建立仓库管理数据库,在此库中建立仓库数据库表 。CREATE DATABASE 仓库管理CREATE TABLE 仓库(仓库编号 C(4) PRIMARY KEY,楼名 C(12),面积 I CHECK(面积0) ERROR 面积应为非负 DEFAULT 100)使用FOREIGN KEYTAGREFERENCES 短语,将两个表进行永久性联接。CREATE TABLE仓库用户(仓库编号 C(4),使用者 C(12),使用时间 C(10), FOREIGN KEY 仓库编号 TAG 仓库编号 REFERENCES 仓库) “FOREIGN KEY 仓库编号”是为“仓库用户”表建立普通索引,“TAG 仓库编号REFERENCES仓库”是将仓库编号字段与“仓库”表进行永久性联接。注意:数据库或表建立完之后将自动打开,如果建立自由表,将不能使用CHECK、ERROR、DEFAULT、PRIMARY KEY等命令进行约束条件的设置。例:15.利用SQL语句的定义功能,建立一个学生文件,其中为学号建立主索引,年龄的默认值为18,语句格式为:PRIMARY KEY CREATE TABLE 学生(学号 C(5) 年龄 I DEFAULT 18)7.3.2 删除表删除表命令:【格式】DROP TABLE 【说明】该命令将表从数据库中物理性的删除,在执行该命令时最好将数据库打开,再删除其中的表,否则表可以删除,但是表在数据库中的信息将不能删除,此后打开数据库之后将会出现错误。7.3.3 表结构的修改修改表结构命令【格式】ALTER TABLE ADD|ALTER|DROP|RENAME COLUMN SET|DROP CHECK域完整性约束条件 ERROR 出错信息 SET|DROP DEFAULT 默认值 ADD DROP PRIMARY KEY【例7.30】 向仓库表中添加一个“楼层”字段。ALTER TABLE 仓库 ADD楼层I CHECK楼层0 ERROR 楼层应为非负 DEFAULT 100【例7.31】 将仓库表中的仓库编号字段的宽度由4改为6ALTER TABLE仓库ALTER仓库编号 C(6)【例7.32】 修改仓库表中的面积字段的有效性规则。ALTER TABLE 仓库 ALTER面积SET CHECK面积30 ERROR 面积应大于30平方米 ALTER面积SET DEFAULT 40【例7.33】 修改仓库表中“面积”字段的名称为“使用面积”。ALTER TABLE 仓库 RENAME COLUMN 面积 TO使用面积【例7.34】 删除仓库表中“使用面积”字段。ALTER TABLE 仓库 DROP COLUMN 使用面积例:16.为“仓库”表增加一个“面积”字段,类型为数值型,宽度是7,小数位数为2,正确的命令是()CA. CREATE TABLE 仓库 ADD 面积N(7,2)B. CREATE TABLE 仓库 ALTER 面积N(7,2)C. ALTER TABLE 仓库 ADD面积N(7,2)D. ALTER TABLE 仓库ALTER 面积N(7,2)7.3.4 视图的定义视图是一个虚拟的表,在存储介质中找不到相应的存储文件。视图类似SELECT 语句的查询窗口,视图保存了这个查询窗口,保存了查询的数据是满足什么样的条件来自于哪几个表,真正的数据还是分别保存在各自的表中。由于视图是表中派生出来的,所以不存在修改结构的问题。视图最大的特点是,虽然不保存真正的数据,但是可以像一般的表一样进行建立查询、表单、报表等。1.定义视图命令【格式】CREATE VIEW AS 【例7.35】 建立学生的学号、姓名、课程名和入学成绩的视图CREATE VIEW 成绩表 AS SELECT 学生.学号,姓名,课程名,入学成绩 FROM 学生,选课,课程 WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号2.删除视图命令【格式】DROP VIEW 例:17.删除视图 STUDENT 的命令是()DA. DELETE STUDENT VIEWB. DELETE STUDENTC.DROP STUDENT VIEWD.DROP VIEW STUDENT7.4 SQL的数据操作功能SQL语言的操作功能是指对数据的操作功能,包括对数据库中表的数据的增加、删除和更新操作。7.4.1 插入记录插入记录命令【格式】INSERT INTO (字段名1,字段名2, VALUES (数值1,数值2,)【例7.36】 向上一节创建的仓库表中插入一条记录。INSERT INTO 仓库(仓库编号,楼名,面积,楼层) VALUES(0001,基楼,120,5) 注意:当数据库中的表定义了主索引或候选索引后,只能用SQL语言的插入(INSERT)命令,不能使用VFP的插入命令(INSERT或APPEND),因为VFP的插入命令是先插入一条空记录,然后再输入各字段的数值,设置了主索引或候选索引后的表不能插入空记录。在插入日期型数据时应使用严格日期格式。例:07:8.使用SQL语句将一条新的记录插入职务表,正确的语句是:INSERT_ Into_职务(职务号,职务名称) VALUES (06,副科长)例:18.若有如下SQL语句:INSERT INTO 职工 VALUES(“WH4”,”E15”,”张清”,2800)则在命令窗口执行该命令后()。DA. 向表中任意位置插入一条新消息B. 在当前记录之前,插入一条新语句C. 在当前记录之后,插入一条新语句D. 在表末尾新增一条记录7.4.2 删除记录删除记录命令【格式】DELETE FROM WHERE 【例7.37】 删除仓库表中仓库编号为0002的记录。DELETE FROM仓库WHERE 仓库编号=0002注意:如果没有WHERE语句,那么将删除表中所有的记录。该命令只是逻辑删除表中的记录,如果是物理删除还需要再使用PACK命令。使用DELETE删除语句时不需要打开数据表,就可以执行删除的操作。7.4.3 更新记录更新记录命令【格式】UPDATE SET字段名1=表达式1 ,字段名2=表达式2, WHERE 【例7.38】 在入学成绩表中,计算总分成绩。 UPDATE 入学成绩 SET 总分=语文+数学+外语+综合【例7.39】 将学生表中少数民族学生的入学成绩提高10分。UPDATE 学生 SET入学成绩=入学成绩+10 WHERE汉族否=.t.注意:如果没有WHERE语句,那么将更新表中所有的记录。06:16. 用于更新表中数据的SQL语句是( )CA.ALTER B.DROPC.UPDATE D.DELETE07:3.SQL语言中UPDATE语句的功能是()DA.数据定义 B.数据查询C.修改表中某些字段名 D.修改表中某些字段的值例:19.用SQL语句实现将所有教师的奖金提高10%UPDATA 教师 奖金=奖金*1.1SETSQL例: 08: “特长”表 特长(编号(C,4) , 专业(C,10) , 专业年限(N,2) , 职称(C,10) , 英语水平(C,8) 编号专业专业年限职称英语水平 0001计算机应用20教授精通 0002生物工程15副教授一般阅读 0003财政金融22教授精通 0004建筑设计20高级工程师一般阅读 0005计算机应用16副教授精通8.在“特长” 表中求每种“职称”的平均专业年限,正确的语句是:SELECT职称,AVG(专业年限) FROM特长 group by 职称 。08:10. SQL语言中删除“特长”的语句是 drop table 特长 。 “工资”表工资(部门号(C,2),职工号(C,3),姓名(C,6),应发工资 (N,9,2),水电费(N,7,2),实发工资(N,9,2)部门号 职工号 姓 名 应发工资 水电费 实发工资 11 011 张立 2000.00 50.00 1950.00 22 002 王艳 3000.00 70.00 2930.00 11 003 刘星 1500.00 0.00 1500.00 31 004 林月明 1600.00 146.00 1454.00 21 015 刘良 2600.00 76.00 2524.00 22 106 孙民山 1100.00 91.00 1009.00 31 207 许慧芳 2200.00 52.00 2148.00 32 336 丁一 1100.00 0.00 1100.00“水电费”表水电费(年月(C,6),职工号(C,3),上月水费(N,7,2),本月水费 (N,7,2),上月电费(N,7,2),本月电费(N,7,2),本月小计(N,7,2)年月 职工号 上月水费 上月电费 200610 011 20.00 30.00 200610 002 20.00 50.00 200610 003 0.00 0.00 200610 004 16.00 130.00 200610 015 16.00 60.00 200610 106 11.00 80.00 200610 207 22.00 30.00 200610 336 0.00 0.00 06:10.按照职工的职工号升序检索出全部水电费信息的SQL语句是SELECT * FROM 水电费_ORDER BY_职工号。06: 2. 写出下述SQL语句的查询结果。 SELECT 职工号,上月水费,上月电费 FROM 水电费 WHERE 上月水费 = 02、003 0 0 336 0 006:6. SET TALK OFF SET HEADING OFFCLEARUPDATE 水电费 SET 本月水费 上月水费,本月电费 上月电费UPDATE 水电费 SET 本月小计 本月水费本月电费USE 水电费TO BOTTOMSKIP 1DISPLAY 职工号,本月小计 OFFUSERETURN6、207 52.0006:7. SET TALK OFF SET HEADING OFFCLEARSELECT 2USE 工资SELECT 1USE 水电费JOIN WITH B TO SDF FOR 职工号 B.职工号; FIELDS 职工号,B.姓名,B.实发工资,B.水电费,上月水费USE SDFDISPLAY 姓名,实发工资,上月水费 OFFUSE7、张立 2000.00 20.00第8章 查询与视图Visual FoxPro提供了两类查询和操作数据库的工具,就是查询和视图。查询和视图的用途不同,但有很多类似之处,都是用来从一个或多个相关联的数据表中提取有用的信息,创建步骤也非常相似。使用“查询设计器”,能方便地生成一个查询,从而获得用户所需要的数据。视图兼有表和查询的特点,能帮助用户从本地或远程数据源中获取相关数据,而且还可以对这些数据进行修改并更新。本章将介绍查询和视图的概念、建立和使用。8.1 基本概念8.1.1 查询本章所说的“查询”与用SELECT命令从数据库中查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年贵阳辅警招聘考试真题附答案详解(夺分金卷)
- 2025年铁岭辅警招聘考试真题含答案详解ab卷
- 2025年赣州辅警招聘考试真题附答案详解(夺分金卷)
- 2025年衢州辅警招聘考试真题含答案详解(综合题)
- 2025年贵阳辅警协警招聘考试真题附答案详解(a卷)
- 2025年淮安辅警协警招聘考试真题及一套完整答案详解
- 2025年阿坝州辅警招聘考试真题含答案详解(a卷)
- 2025年黑龙江辅警招聘考试真题及答案详解(夺冠系列)
- 2025年湖南辅警协警招聘考试真题含答案详解(完整版)
- 2025年璧山县辅警招聘考试真题带答案详解
- 国开2025年《行政领导学》形考作业1-4答案
- 实验室生物安全培训-(课件)
- 兰大岩石学考研
- 中小学实施《中小学德育工作指南》测评细则量化评分表
- NB-T 10560-2021 风力发电机组技术监督规程
- GB/T 3478.1-1995圆柱直齿渐开线花键模数基本齿廓公差
- GB/T 31838.3-2019固体绝缘材料介电和电阻特性第3部分:电阻特性(DC方法)表面电阻和表面电阻率
- (完整版)安全评价、预评价验收评价标书模板
- 专升本英语统考试翻译技巧课堂教学课件5
- 颈源性耳鸣的临床研究-中日友好医院针灸科李石良课件
- 英语特殊疑问词的用法
评论
0/150
提交评论