第4 章 结构化查询语言 sql¼ˆ1)数据操纵:select、insert、update、delete...

16
4 结构化查询语言 SQL 学习目标 在本章中将学习: l SQL 语言的特点及功能 l SQL 的数据查询功能 l SQL 的数据操作功能 l SQL 的数据定义功能 4.1 SQL 语言概述 SQL 全称是“结构化查询语言(Structured Query Language)”,最早是 IBM 的圣约瑟研究实验 室为其关系数据库管理系统 SYSTEM R 开发的一种查询语言,它的前身是 SQUARE 语言。SQL 语言结构 简洁,功能强大,简单易学,所以自从 IBM 公司 1981 年推出以来,SQL 语言得到了广泛的应用。如 今无论是 Oracle,Sybase,Informix,SQL server 这些大型的数据库管理系统,还是像 Visual FoxProPowerBuilder 这些微机上常用的数据库开发系统,都支持 SQL 语言作为查询语言。 4.1.1 SQL 语言的特点 1.综合统一 SQL 语言数据定义语言 DDL数据操语言 DML数据控制语言 DCL 的功能,语言风格 统一,独立完成数据库生命周期中的全部活动包括定义关系模式、录入数据以建立数据库、更新、维护、数据库数据库性控制等一系操作要求,这为数据库应用系统开发良好环境。在关系型中实体和体间用关系表示,这种数据结构的单一性带来了数 据操作的统一。 2.非过程化语言 SQL 是一个非过程化的语言,为它一次处理一个记录数据提供动导航。所SQL 句接 受集合作为输入返回集合作为出。SQL 集合性允许SQL 的结作为SQL 输入SQL 不要求户指数据的存放方法。这种特性使户更精力于要得到的结SQL 句使用查询,它是 RDBMS 的一部分对指定数据的最快速度手段3面向集合的操作方式 SQL 语言集合操作方式果可以是元组集合而且入、删除、更新操作 象也以是元组集合4一种语结构使方式 SQL 语言是自语言,入式语言。使方式SQL 语言的语结构 本上是一的。 其中: 1语言:它能独立于联交互使方式,用户可以在终端键盘SQL 数据库进行操作。 2入式语言:SQL 够嵌高级语言(例如:VCVBDelphiJava\FORTRAN中,供程序员设计序时使用。 5语言简SQL 语言功能强,但又十简洁,9 个动词即可完成对数据的操纵、数据的定义及数据的 控制等功能。

Upload: lamphuc

Post on 30-Sep-2018

266 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

第 4章 结构化查询语言 SQL

学习目标

在本章中将学习: l SQL语言的特点及功能 l SQL的数据查询功能 l SQL的数据操作功能 l SQL的数据定义功能

4.1 SQL语言概述

SQL 全称是“结构化查询语言(Structured Query Language)”,最早是 IBM 的圣约瑟研究实验

室为其关系数据库管理系统 SYSTEM R开发的一种查询语言,它的前身是 SQUARE语言。SQL语言结构

简洁,功能强大,简单易学,所以自从 IBM 公司 1981 年推出以来,SQL 语言得到了广泛的应用。如

今无论是 Oracle,Sybase,Informix,SQL server这些大型的数据库管理系统,还是像 Visual FoxPro,

PowerBuilder这些微机上常用的数据库开发系统,都支持 SQL语言作为查询语言。

4.1.1 SQL语言的特点

1.综合统一

SQL 语言集数据定义语言 DDL、数据操纵语言 DML、数据控制语言 DCL 的功能于一体,语言风格

统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据以建立数据库、查

询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,这就为数据库应用系统开发提

供了良好的环境。在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数

据操作符的统一。

2.非过程化语言

SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。所有 SQL语句接

受集合作为输入,返回集合作为输出。SQL的集合特性允许一条 SQL语句的结果作为另一条 SQL语句

的输入。 SQL 不要求用户指定对数据的存放方法。这种特性使用户更易集中精力于要得到的结果。

所有 SQL语句使用查询优化器,它是 RDBMS的一部分,由它决定对指定数据存取的最快速度的手段。

3.面向集合的操作方式

SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作

的对象也可以是元组的集合。

4.一种语法结构有两种使用方式

SQL 语言既是自含式语言,又是嵌入式语言。且在两种不同的使用方式下,SQL 语言的语法结构

基本上是一致的。

其中:

(1)自含式语言:它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入 SQL

命令对数据库进行操作。

(2) 嵌入式语言:SQL语句能够嵌入到高级语言(例如:VC、VB、Delphi、Java\FORTRAN)程

序中,供程序员设计程序时使用。

5.语言简捷

SQL语言功能极强,但又十分简洁,只用 9个动词即可完成对数据的操纵、数据的定义及数据的

控制等功能。

Page 2: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

(1)数据操纵:SELECT、INSERT、UPDATE、DELETE

(2)数据定义:CREATE、DROP、ALTER

(3)数据控制:GRANT,REVOKE

4.1.2 SQL语言的功能

查询是 SQL语言的重要组成部分,同时 SQL还包括数据定义、数据操纵和数据控制功能等部分。

SQL已经成为关系数据库的标准查询语言。

1.数据查询功能

包括单表查询、多表查询、集合查询等。

2.数据定义功能

包括定义、删除、修改表等操作。

3.数据操纵功能

包括数据插入、数据更新、数据删除等操作。

4.数据控制功能

包括数据保护及事务管理等操作。

知识链接

SQL的发展历史:

(1)在 70年代初,E.E.Codd首先提出了关系模型。70年代中期,IBM公司在研制 SYSTEM R关

系数据库管理系统中研制了 SQL语言,最早的 SQL语言(叫 SEQUEL2)是在 1976年 11月的 IBM Journal

of R&D上公布的。

(2)1979年 ORACLE公司首先提供商用的 SQL,IBM公司在 DB2和 SQL/DS数据库系统中也实现

了 SQL。

(3)1986 年 10 月,美国 ANSI 采用 SQL 作为关系数据库管理系统的标准语言 (ANSI X3.

135-1986),后为国际标准化组织(ISO)采纳为国际标准。

(4)1989年,美国 ANSI采纳在 ANSI X3.135-1989报告中定义的关系数据库管理系统的 SQL标

准语言,称为 ANSI SQL 89。

目前,所有主要的关系数据库管理系统支持某些形式的 SQL 语言,大部分数据库打算遵守 ANSI

SQL89标准。

4.2 查询功能

数据查询是 SQL语言的重要部分,通过 Select语句来实现,下面首先介绍 Select语句的格式,然

后通过实例具体说明其使用方法。

Select语句的基本格式:

Select〈列名表〉;

From〈表名〉;

Where〈条件表达式〉;

Group by <分组表达式>;

Having <条件表达式>;

Order by〈排序项目〉[ASC/DESC][,[ASC/DESC]]...;

说明:

(1)Select 子句的〈列名表〉:指出要显示的列的字段名,可选一个或多个字段,多个字段间用

逗号分开,“*”可以用来表示某一个数据表中的所有字段。

(2)From 子句的〈表名〉:指出在查找过程中所涉及的表,可以是单个表,也可以是多个表,多

Page 3: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

个表之间应用逗号分开。

(3)Where子句的〈条件表达式〉:指出所需数据应满足的条件,条件表达式中必须用到比较运算

符或逻辑运算符(如:=、<、> !=等)。

(4)Group by 子句<分组表达式>:说明对数据如何进行分组,其 Having则表示分组满足的条件,

与 Group by一起使用。

(5)Order by〈排序项目〉:指出查询结构的输出顺序,其中 ASC为升序,DESC为降序。

4.2.1简单查询

简单的 SQL查询只包括 Select子句、FROM子句。

【例 4-1】从“学生成绩数据库”中的 student表查询所有学生的情况。 操作步骤:

1.在 Visual Foxpro系统主菜单下,选择“文件”,进入“打开”窗口。

2.在“打开”窗口,选择文件类型为“数据库”选项,再选择学生成绩数据库,点击“确定”按

钮如图 4-1所示。

图 4-1 “打开”窗口

3.在“命令”窗口中写下查询语句:Select * From student,如图 4-2所示。其中“*”是通配

符号,表示要查询的所有字段。

Page 4: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

图 4-2 查询语句和结果

注意

若没有打开数据库“学生成绩数据库”文件,可使用 Select * From学生成绩数据库!student。数据库和数据表之间用“!”分隔。

【例 4-2】从“学生成绩数据库”中的 student表查询所有学生的学号、姓名和系科的情况。

在“命令”窗口中写下查询语句:Select 学号,姓名,系科 From student,如图 4-3所示。

图 4-3 查询命令和结果

注意

查询语句中,字段之间用“,”分隔,请不要用中文全角方式输入“,”,这样会出现错误!

4.2.2条件查询

WHERE子句设置查询条件,过滤掉不需要的数据行。

WHERE子句可包括各种条件运算符:

1.比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< 。

2.范围运算符(表达式值是否在指定的范围):BETWEEN…AND… NOT BETWEEN…AND… 。如 age

BETWEEN 10 AND 30相当于 age>=10 AND age<=30

3.列表运算符(判断表达式是否为列表中的指定项):IN (项 1,项 2……) NOT IN (项 1,项 2……) 。

如 country IN ('Germany','China')

4.模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 。

5.空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL。

6.逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR。

【例 4-3】从“学生成绩数据库”中的 student 表查询所有系科为计算机的学生的学号、姓名、性别及系科的情况。

Page 5: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

在“命令”窗口中写下查询语句:Select 学号,姓名,性别,系科 From student Where 系科=“计算机”,如图 4-4所示。

图 4-4 查询命令和结果

【例 4-4】从“学生成绩数据库”中的 student表查询总分在 550至 630之间的学生学号、姓名、系科、总分的情况,并按总分的升序排列。

在“命令”窗口中写下查询语句:Select 学号,姓名,系科,总分 From student Where 总分 Between 550 and 630 Order by 总分,如图 4-5所示。

图 4-5 查询结果

注意

使用 ORDER BY子句对查询返回的结果按一列或多列排序。

ORDER BY子句的语法格式为: ORDER BY {column_name [ASC|DESC]} [,…n] 其中 ASC表示升序,为默认值,DESC为降序。

Page 6: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

4.2.3连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型

数据库管理系统的一个标志。

1.简单连接查询

【例 4-5】从“学生成绩数据库”中的 student表和 assign表查询所有学生的姓名、性别、院系、课程号及成绩。

在“命令”窗口中写下查询语句:Select 姓名,性别,系科,课程号,成绩 From student,assign Where student.学号= assign.学号,如图 4-6所示。

图 4-6 查询结果

注意

数据表之间的连接应该存在一定的联系,否则就无法在 where子句中设定连接条件。若多个数据表

之间有相同的字段名,应该在字段名前加上数据表的名称,如 student.学号和 assign.学号

【例 4-6】从“学生成绩数据库”中的 student表、assign表及 course表查询所有学生的学号、姓名、课程号、课程名和类别的情况。

在“命令”窗口中写下查询语句:Select student.学号,姓名,assign.课程号,课程名,类别 From student,assign,course Where student.学号= assign.学号 and assign.课程号= course.课程号,如图 4-7所示。

Page 7: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

图 4-7 查询结果

2.运用连接运算符进行连接查询

连接查询分为:内连接、外连接和交叉连接。

(1)内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中

与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等

连接三种。

(2)外连接分为左外连接(LEFT OUTER JOIN或 LEFT JOIN)、右外连接(RIGHT OUTER JOIN或 RIGHT

JOIN) 和全外连接(FULL OUTER JOIN 或 FULL JOIN)三种。与内连接不同的是,外连接不只列出与连

接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符

合搜索条件的数据行。

(3)交叉连接(CROSS JOIN)没有 WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果

集合中的 数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行

数。

【例 4-7】从“学生成绩数据库”中的 student表和 assign表查询所有学生的姓名、性别、系科、课程号及成绩。我们使用连接运算符来实现。

在“命令”窗口中写下查询语句:Select 姓名,性别,系科,课程号,成绩 From student inner join assign on student.学号= assign.学号,其效果与如图 4-6所示一样。

注意

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

Page 8: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这

些运算符包括>、>=、<=、<、!>、!<和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

4.2.4嵌套查询

在一个 Select语句中包含多个 Select语句为嵌套查询。下面举例说明:

【例 4-8】从“学生成绩数据库”查询课程号 A001 成绩大于 85 分的学生学号,姓名及系科的情况。

在“命令”窗口中写下查询语句:Select学号,姓名,院系 From student Where 学号 In (Select 学号 From assign Where 课程号=“A001” and 成绩>85),如图 4-8所示。

图 4-8 查询结果

注意

查询中有内层和外层查询,首先进行内层查询,然后根据内层查询的结果作为外层查询的条件进

行最后查询。

4.2.5计算与分组查询

1.计算查询

常用计算查询的函数有 Count(计数);Sum(求和);Avg(平均值);Max(最大值);Min(最小值)等。它们

可以使用在 Select语句中。

【例 4-9】从“学生成绩数据库”查询数据表 Student中“系科”的个数。

在“命令”窗口中写下查询语句:Select Count(Distinct 系科) From Student,如图 4-9所示。

Page 9: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

图 4-9 查询结果

注意

Distinct可排除重复的记录,所以查询结果为 8,若没有 Distinct,则查询结果为 20。

【例 4-10】从“学生成绩数据库”查询数据表 Student学生总分的平均值,最大值和最小值。

在“命令”窗口中写下查询语句:Select Avg(总分) AS 平均值, Max(总分) AS 最大值, Min(总分) AS 最小值 From Student,如图 4-10所示。

图 4-10 查询结果

注意

AS可为查询结果显示其别名,方便用户查看。

2.分组查询

根据关键字的值对数值属性的值进行汇总,使用 Group By 字句实现。

【例 4-11】从“学生成绩数据库”查询数据表 Student中男学生和女学生总分平均值的情况。

在“命令”窗口中写下查询语句:Select 性别,Avg(总分) AS 平均值 From Student Group By 性别,如图 4-11所示。

Page 10: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

图 4-11 查询结果

【例 4-12】从“学生成绩数据库”中查询每位学生课程的平均成绩。

在“命令”窗口中写下查询语句:Select 姓名,Avg(成绩) AS 课程平均值 From student,assign Where student.学号= assign.学号 Group By 姓名,如图 4-12所示。

图 4-12 查询结果

【例 4-13】从“学生成绩数据库”中查询每位学生课程的平均成绩且大于 80分的情况。

在“命令”窗口中写下查询语句:Select 姓名,Avg(成绩) AS 课程平均值 From student,assign Where student.学号= assign.学号,Group By 姓名 Having Avg(成绩)>80,如图 4-13所示。

Page 11: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

图 4-13 查询结果

注意

Having是对分组条件进行设置,一定要紧跟在 Group By 字句之后。

4.2.6空值查询

空值不是空格或 0,而是表示数据值不可用,用 NULL值表示。SQL可以使用空值,利用它进行相应

查询。

【例 4-14】从“学生成绩数据库”查询数据表 Student中系科为空的学生情况。

在“命令”窗口中写下查询语句:Select * From Student Where 系科 is null。

注意

Null前面一定是 Is,不能用“=”这样的运算符表示。

4.3 操作功能

SQL的操作功能是对数据进行修改,包括数据的插入、数据的更新及数据的删除等操作。

4.3.1数据插入

SQL语言中用 INSERT语句向表或视图中插入新的数据行。

INSERT语句的语法格式为:

INSERT [INTO] table_source

{[column_list]

VALUES ({DEFAULT | constant_expression} [,…n])

其中,column_list参数为新插入数据行中一列或多列列名列表,它说明 INSERT 语句只为指定列

插入数据。在给表或视图中部分列插入数据时,必须使用列名列表方式指出这部分列名。

Page 12: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

【例 4-15】在数据表 Student中插入一个学生的记录:学号 2008021,姓名 郭襄,性别 女,系科 计算机,出生日期 1988年 5月 1日。

在“命令”窗口中可用如下语句:

Insert Into student(学号,姓名,性别,出生日期,系科); Values(“2008021”,” 郭襄:, “女”,{05/01/88},” 计算机”)

4.3.2数据更新

UPDATE语句用于修改表中数据,该语句的语法格式为:

UPDATE table_name

SET column_name1=variable1,column_name2=variable2

WHERE search_conditions

其中 SET子句指出表中被修改的列或变量,以及它们的新值。column_name为被修改的列名。

【例 4-16】在数据表 Student中为所有学生的总分增加 10分。

在“命令”窗口中可用如下语句:

Update student Set 总分=总分+10

【例 4-17】在数据表 Student中为计算机系的学生其总分增加 10分。

在“命令”窗口中可用如下语句:

Update student Set 总分=总分+10 Where 系科=”计算机”

4.3.3数据删除

DELETE语句可以删除表中的数据。其 DELETE语句的语法格式为:

DELETE

FROM {table_name | view_name}

[WHERE conditions]

DELETE语句的结构与 UPDATE语句有些类似,其中也包含 FROM子句和 WHERE子句。WHERE子句为数

据删除指定条件。不使用 WHERE子句时,DELETE语句将把有或视图中所有的数据删除。

【例 4-18】永久删除数据表 Student学号为 2008015的记录。

在“命令”窗口中可用如下语句:

Delete From student Where 学号=”2008015” Pack

注意

Pack对当前表中具有删除标记的所有记录做永久的删除。

4.4 定义功能

SQL的定义功能是对表进行修改,包括对表结构进行创建、修改表结构以及删除表等操作。

Page 13: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

4.4.1表的定义

一般格式如下:

Create Table <表名>(<列名> <数据类型> [列级完整性约束条件]

[,<列名> <数据类型> [列级完整性约束条件]...]

[,<表级完整性约束条件>]);

其中:

<表名>是所要定义的基本表的名字,最好能表达表的应用语义

<列名>是由一个或多个属性(列)组成。

建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据

字典中,当用户操作表中数据时由 DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约

束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

下面通过实例来说明:

【例 4-19】建立一个自由表“学生”,包括:学号、姓名、性别、出生日期、是否党员、籍贯和简历。

在“命令”窗口中可用如下语句:

Create Table 学生(学号 C(8), 姓名 C(8), 性别 C(2), 出生日期 D, 是否党员 L, 籍贯 C(8), 简历 M)

【例 4-20】用 SQL命令建立 Student表。

在“命令”窗口中可用如下语句:

Open DataBase 学生成绩数据库 Create Table student(学号 C(8), 姓名 C(8), 性别 C(2), 出生日期 D, 系科 C(20), 统招否 L,

总分 N(6,1), 备注 M, 照片 G)

4.4.2表结构的修改

一般格式为:

Alter Table <表名>

[Alter <列名> <新数据类型> ]

[Add <新列名> <数据类型> [完整性约束]]

[Drop <完整性约束名> <完整性约束名>]

[Modify <列名> <数据类型> <数据类型>]

[Add Primary Key(列名)]

[Add Preign Key(列名) Referneces 表名(列名)];

其中<表名>指定需要修改的基本表,Add子句用于增加新列和新的完整性约束条件,Drop子句用于

删除指定的完整性约束条件,Modify子句用于修改原有的列定义。

下面通过实例来说明:

【例 4-21】为 Student表增加一个党员否字段。

在“命令”窗口中可用如下语句:

Alter Table student Add 党员否 L

【例 4-22】修改 Student表的姓名字段,其宽度改为 10。

在“命令”窗口中可用如下语句:

Page 14: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

Alter Table student Alter 姓名 C(10)

【例 4-23】删除 Student表的党员否字段。

在“命令”窗口中可用如下语句:

Alter Table student Drop党员否

4.4.3表的删除

删除表时会将与表有关的所有对象一起删掉。基本表定义一旦删除,表中的数据、在此表上建立的

索引都将自动被删除掉,而建立在此表上的视图虽仍然保留,但已无法引用。因此执行删除操作一定要

格外小心。

一般格式为:Drop Table <表名>

下面通过实例来说明:

【例 4-24】删除 Student表。

在“命令”窗口中可用如下语句:

Open DataBase 学生成绩数据库 Drop Table student

注意

若要删除数据库中的表,先应是数据库是当前打开的数据库,在数据库中进行操作。这样才能保

证表能被彻底删除。

本章小结

SQL 结构化查询语言(Structured Query Language)功能十分强大,其数据查询是 SQL 的核心。本

章主要讲述了 Select查询语句的基本使用方法,包括单表查询、多表查询、条件查询、分组查询等操

作。

另外,本章还讲述了 SQL语言的操作功能和定义功能。多种方法的结合灵活操作数据库中的数据表。

习题四

一、思考题

1.什么是 SQL语言?它的主要特点是什么? 2.本书介绍的 SQL语言的功能主要有哪些?分别用什么命令来实现

二、选择题

1.SQL的主要操作功能不包括( )。 (A)数据插入 (B)数据查询 (C)数据更新 (D)数据删除

2.SQL查询语句中 ORDER BY子句的功能是( )。 (A)对查询结果进行排序 (B)分组统计查询结果 (C)限定分组检索结果 (D)限定查询条件 3.SQL语句中修改表结构的命令是( )。

(A) MODIFY TABLE (B) MODIFY STRUCTUR (C) ALTER TABLE (D) ALTER STRUCTUR

Page 15: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

4.SELECT-SQL语句中的条件短语的关键字是( )。 (A) WHERE (B) WHILE (C) FOR (D) CONDITION 5. INSERT-SQL命令的功能是( )。 (A) 在表头插入一条记录 (B) 在表尾插入一条记录 (C) 在表中任何位置插入一条记录 (D) 可以向表中插入若干条记录 6.在 Visual FoxPro中,使用 SQL命令将学生表 student中的学生年龄 age字段的值增加 1,应该使用的命令是( )。 (A)REPLACE AGE WITH AGE+1 (B)UPDATE STUDENT SET AGE=AGE+1 (C)UPDATE SET AGE=AGE+1 (D)UPDATE STUDENT SET AGE WITH AGE+1

7.在 SQL中,从数据库中删除表可以用( )。 (A)DROP SCHEMA命令 (B)DROP TABLE命令 (C)DROP VIEW命令 (D)DROP INDEX命令 8.SQL建立表时要将属性定义为主关键字,应使用短语( )。 (A)CHECK (B)PREMARY KEY (C)UNIQUE (D)FREE

三、上机操作题

1.用 SQL语言创建表 4-1所示数据库表 student.dbf。 表 4-1 student.dbf的结构

字段名称 字段类型 字段宽度 小数位数

学号 字符型 7

姓名 字符型 10

性别 字符型 2

出生日期 日期型 8

少数民族否 逻辑型 1

籍贯 字符型 10

入学成绩 数值型 5 1

简历 备注型 4

照片 通用型 4

表 4-2 student.dbf的内容

Page 16: 第4 章 结构化查询语言 SQL¼ˆ1)数据操纵:SELECT、INSERT、UPDATE、DELETE (2)数据定义:CREATE、DROP、ALTER (3)数据控制:GRANT,REVOKE 4.1.2 SQL语言的功能

2. 使用 SQL语言的命令将所有姓王的学生的籍贯修改为“新疆”。 3. 使用 SQL语言命令,对 student.dbf完成: (1) 显示所有男生并且籍贯为湖南或湖北的记录数据。 (2) 显示姓“刘”学生的姓名、性别、出生日期、籍贯、入学成绩等数据。 (3) 统计女生人数。 (4) 根据实验 5中建立的学生.dbf、选课.dbf、课程.dbf三个表,查询所有同学的全 部学习成绩,显示学生姓名、课程编号、课程名、成绩等字段。 4. 查询课程.dbf表中所有被学生选修的课程号、课程名称。 5. 对学生.dbf按性别顺序列出学生的学号、姓名、性别、课程名及成绩,性别相同的再先按课程名后按成绩(由高到低)排序,并将查询结果存入_xscj.dbf表中。 6. 分别统计男女生中入学成绩大于 590分的少数民族学生人数。 7. 列出少数民族学生的学号、姓名、课程号及成绩。