第六章数据库标准语言SQL.docx
《第六章数据库标准语言SQL.docx》由会员分享,可在线阅读,更多相关《第六章数据库标准语言SQL.docx(21页珍藏版)》请在冰点文库上搜索。
第六章数据库标准语言SQL
第六章关系数据库标准语言SQL
大纲要求
关系数据库标准语言SQL
1、SQL的数据定义功能:
(1)CREATETABLE–SQL
(2)ALTERTABLE–SQL
2、SQL的数据修改功能:
(1)DELETE–SQL
(2)INSERT–SQL
(3)UPDATE–SQL
3、SQL的数据查询功能:
(1)简单查询。
(2)嵌套查询。
(3)连接查询。
内连接
外连接:
左连接、右连接、完全连接
(4)分组与计算查询。
(5)集合的并运算。
知识要点
一、SQL语言的特点
1.综合统一
SQL语言集数据定义(DDL)、数据操纵(DML)、数据管理(DCL)的功能于一体,语言风格统一,可以独立完成数据库的全部操作,包括定义关系模式、录入数据及建立数据库、查询、更新、维护数据、数据库的重新构造、数据库安全性等一系列操作的要求,为数据库应用系统开发者提供了良好的环境。
2.高度非过程化
3.语言简洁,易学易用
4.以同一种语法结构提供两种使用方式
既可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。
二、SQL语言的基本概念
SQL语言支持关系型数据库的三级模式结构。
其中外模式对应于视图(View)和部分基本表(BaseTable),模式对应于基本表,内模式对应于存储文件。
基本表是本身独立存在的表,在SQL语言中一个关系对应一个表。
一些基本表对应一个存储文件,一个表可以带若干索引,索引存放在存储文件中。
存储文件的逻辑结构组成了关系型数据库的内模式。
而存储文件的物理文件结构是任意的。
视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库只存放在视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。
三.数据定义
数据定义语言DDL用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象。
由CREATE、DROP、ALTER命令组成,完成数据库对象的建立(CREATE)、删除(DROP)和修改(ALTER)。
1.定义(创建)表【格式】:
CREATETABLE<表名>(<字段名1><数据类型>;
[(<宽度>[,<小数位数>])][完整性约束];
[NULL|NOTNULL][,<字段名2>…])
【功能】定义(也称创建)一个表。
【例1】创建一个表SC(课程成绩表),它由以下字段组成:
学号(C,10);课程号(C,2)。
CREATETABLESC(学号C(10),课程号C
(2))
LISTSTRUCTURE
【例2】创建一个表STUD(学生信息表),它由以下字段组成:
学号(C,10);姓名(C,8);性别(C,2);班级名(C,10);系别代号(C,2);地址(C,50);出生日期(D);是否团员(L);备注(M);照片(G)。
CREATETABLESTUD(学号C(10),姓名C(10),性别C
(2),班级名C(10),系别代号C
(2),地址C(50),出生日期D,是否团员L,备注M,照片G)
LISTSTRUCTURE
2.修改表【格式】
ALTERTABLE<表名>[ADD<新字段名><数据类型>[(<宽度>[,<小数位数>])][完整性约束][NULL|NOTNULL]][DROP[完整性约束]][MODIFY<字段名><数据类型>]
【功能】修改表结构。
【说明】ADD子句用于增加指定表的字段变量名、数据类型、宽度和完整性约束条件;DROP子句用于删除指定的的完整性约束条件;MODIFY子句用于修改原有的字段变量的值。
【例】在课程成绩表SC中,增加一个成绩字段变量(N,3)。
ALTERTABLESCADD成绩N(3)
LISTSTRUCTURE
3.删除数据库
【格式】DROPDATABASE<数据库名>
【功能】删除指定数据库的结构和数据。
【说明】谨慎使用。
4.删除表
【格式】DROPTALBE<表名>
【功能】删除指定表的结构和内容(包括在此表上建立的索引)。
【说明】如果只是想删除一个表中的所有记录,则应使用DELETE语句。
例题:
(1)SQL是______语言。
A.结构化查询
B.数据定义
C.数据操作
D.数据控制
【解析】本题考查的知识点是SQL语言的基础知识。
在VisualFoxPro中,SQL是结构化查询语言。
选项B,C,D说法错误,在VisualFoxPro中有数据定义语言、数据操作语言、数据控制语言。
【答案】A
(2)SQL除了具有数据查询的功能外,还有_____。
A.数据定义 B.数据操纵 C.数据控制 D.以上答案均正确
【解析】本题考查的知识点是SQL语言的作用。
在VisualFoxPro中,SQL的功能有四个:
数据查询、数据定义、数据操纵、数据控制。
因此正确答案为D。
【答案】D
(3)下列选项中,不属于数据定义功能的SQL语句是__________。
A.CREATE B.ALTER C.SELECT D.DROP
【解析】本题考查的知识点是SQL命令动词的作用。
选项A用来创建表;选项B用来修改表结构;选项C用来查询;选项D用来删除表文件。
在VisualFoxPro中,选项A,B,D都具有数据定义功能,只有选项C具有数据查询的功能。
【答案】C
(4)SQL的核心是__________。
A.数据查询 B.数据定义 C.数据操纵 D.数据控制
【解析】本题考查的知识点是SQL的核心。
SQL作为结构化查询语言,其核心是查询。
因此正确答案为A。
【答案】A
(5)SQL同其他数据操作语言不同,其关键在于_____。
A.SQL是一种过程性语言 B.SQL是一种非过程性语言
C.SQL语言简练 D.SQL的词汇有限
【解析】本题考查的知识点是SQL不同于其他语言的关键。
SQL同其他数据操作语言不同的关键是SQL是一种非过程性语言。
通过这一功能用户只需说明做什么,而不用说明怎么做,不用了解数据存储的格式及SQL命令的内部执行过程,就可以方便地对数据库进行操作。
选项A的说法错误,选项C和D是SQL语言的特点,但不是SQL语言同其他数据操作语言不同的关键。
【答案】B
(6)建立表结构的SQL命令是____。
A.ALTERTABLE B.DROPTABLE
C.CREATTABLE D.CREATINDEX
【解析】本题考查的知识点是建立表结构的SQL命令。
建立表结构的SQL命令是CREATTABLE。
ALTERTABLE命令的作用是修改表结构;DROPTABLE命令的作用是删除表;CREATINDEX命令的作用是建立索引。
【答案】C
(7)SQL可以_____使用,也可以_____使用。
【解析】本题考查的知识点是SQL语言的使用方式。
SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。
【答案】直接以命令方式交互,嵌入到程序设计语言中以程序方式
(8)在ALTERTABLE中,_____用来添加新字段;_____修改已有字段。
【解析】本题考查的知识点是ALTERTABLE命令及各子项的作用。
在ALTERTABLE命令中,ADD用来添加新字段;ALTER用来修改已有字段。
【答案】ADDALTER
四、数据操纵
数据操纵语言是完成数据操作的命令,一般分为两种类型的数据操纵,它们统称为DML:
●数据查询:
寻找所需的具体数据。
●数据修改:
添加、删除和改变数据。
数据操纵语言一般由INSERT(插入)、DELETE(删除)、UPDATE(更新),SELECT(查询)等组成,由于SELECT比较特殊,所以一般又将它以查询语言单独出现。
1.插入记录
【格式1】
INSERTINTO<表名>[<字段名表>]VALUES(<表达式表>)
【格式2】
INSERTINTO<表名>FROMARRAY<数组名>|FROMMEMVAR
【功能】在指定的表文件尾部追加一条记录。
格式1用表达式表中的各表达式值赋值给<字段名表>中的相应的各字段。
格式2用数组或内存变量的值赋值给表文件中各字段。
【说明】如果某些字段名在INTO子句中没有出现,则新记录在这些字段名上将取空值(或默认值)。
<字段名表>:
指定表文件中的字段,缺省时,按表文件字段的顺序依次赋值。
<表达式表>:
指定要追加的记录各个字段的值。
【例1】在表文件STUD的末尾追加三条记录。
***用表达式方式追加第一条记录***
INSERTINTOSTUD(学号,姓名,性别,班级名,系别代号,地址,出生日期,是否团员);
VALUES("011110","李中国","男","计0121","01","湖北武汉",{^2005/01/06},.T.)
***用数组方式追加第二条记录***
DIMENSIONTA[8]
TA
(1)="011103"
TA
(2)="李宁"
TA(3)="女"
TA(4)="电0134"
TA(5)="02"
TA(6)="长沙希赛教育"
TA(7)={^2005/01/15}
TA(8)=.T.
INSERTINTOSTUDFROMARRAYTA
***用内存变量方式追加第三条记录***
学号="011202"
姓名="赵娜"
性别="女"
班级名="英0112"
系别代号="03"
地址="广西南宁"
出生日期={^2002/12/14}
是否团员=.F.
INSERTINTOSTUDFROMMEMVAR
LIST
2.更新记录命令
【格式】
UPDATE<表文件名>SET<字段名1>=<表达式>
[,<字段名2>=<表达式>…][WHERE<条件>]
【功能】更新指定表文件中满足WHERE条件子句的数据。
其中SET子句用于指定列和修改的值,WHERE用于指定更新的行,如果省略WHERE子句,则表示表中所有行。
【说明】更新操作又称为修改操作。
【例】将成绩表(SC)中,所有课程号为02的成绩各加5分。
UPDATESCSET成绩=成绩+5WHERE课程号="k321"
3.删除记录
【格式】DELETEFROM<表名>WHERE<表达式>
【功能】从指定的表中删除满足WHERE子句条件的所有记录。
如果在DELETE语句中没有WHERE子句,则该表中的所有记录都将被删除。
【说明】这里的删除是逻辑删除,即在删除的记录前加上一个删除标记“*”。
【例】删除STUD表中所有性别为男的记录。
DELETEFROMSTUDWHERE性别=“男”
4.数据管理
数据管理(也称数据控制)语言是用来管理(或控制)用户的访问权限的。
而VisualFoxPro6.0没有这种权限管理。
例题
(1)下列关于INSERT-SQL的叙述正确的是____。
A.在表尾插入一条记录 B.在表头插入一条记录
C.在表中任何位置插入一条记录D.可以向表中插入若干记录
【解析】本题考查的知识点是INSERT命令的作用。
INSERT-SQL命令的作用是在表尾插入一条记录。
选项B,C,D的说法都错误,INSERT-SQL命令不能完成B,C,D指定的要求。
【答案】A
(2)DELETEFROM考生成绩WHERE成绩<90语句的功能是____。
A.物理删除成绩在90分以下的记录
B.彻底删除成绩在90分以下的记录
C.删除考生成绩表
D.为表中成绩小于90分的记录添加删除标记
【解析】本题考查的知识点是SQL语句中DELETE命令的使用。
SQL中的DELETE命令用于逻辑删除记录,如果要物理删除记录,需要用PACK命令。
选项A中的物理删除错误。
选项B的彻底删除实际就是物理删除,所以错误。
选项C的说法有错误。
选项D的说法正确,因为SQL中的DELETE命令用于逻辑删除记录,FROM用于指定从哪个表中删除记录,本题即从“考生成绩”表中删除;WHERE用于指定被删除的记录所满足的条件,本题的条件是成绩在90分以下的记录。
【答案】D
(3)SQL语句中,UPDATE命令的功能是____。
A.数据更新
B.删除数据
C.建立表
D.修改表
【解析】本题考查的知识点是SQL语句中UPDATE命令的功能。
在SQL语句中,UPDATE命令的功能是数据更新。
删除数据的命令是DELETE。
建立表的命令是CREATETABLE。
修改表结构的命令ALTERTABLE。
【答案】A
(4)SQL语言中,删除表命令是____。
A.DELETE
B.DELETETABLE
C.DROP
D.DROPTABLE
【解析】本题考查的知识点是删除表的命令。
SQL中删除表的命令是DROPTABLE。
DELETE命令用于删除数据。
DELETETABLE的格式错误。
DROP命令的语法错误。
因此正确答案为D。
【答案】D
(5)在SQL语句中,修改表中数据的命令是____。
A.ALTER B.UPDATE C.DELETE D.DISTINCT
【解析】本题考查的知识点是SQL中修改表中数据的命令。
SQL语句中修改表中数据的命令UPDATE。
ALTER命令用于修改表结构。
DELETE命令用于删除数据。
DISTINCT命令用于SELECT语句中消除重复出现的记录行。
【答案】B
(6)在VisualFoxPro中,向表中输入记录的命令是____。
【解析】本题考查的知识点是向表中输入记录的命令。
在SQL语句中,向表中输入记录的命令是INSERT。
【答案】INSERT
(7)在VisualFoxPro中SQLDELETE命令是____删除记录,如果要物理删除记录应使用____命令。
【解析】本题考查的知识点是SQL中的DELETE删除命令。
在VisualFoxPro的SQL中DELETE命令是逻辑删除记录,如果要物理删除记录应使用PACK命令。
【答案】逻辑,PACK
五、SQL中的数据查询语句
数据库中的数据很多时侯是为了查询,因此,数据查询是数据库的核心操作。
而在SQL语言中,查询语言中有一条查询命令,即SELECT语句。
1.基本查询语句
【格式】
SELECT[ALL|DISTINCT]<字段列表>FROM<表>
【功能】无条件查询。
【说明】ALL:
表示显示全部查询记录,包括重复记录。
DISTINCT:
表示显示无重复结果的记录。
【例1】显示STUD(学生信息数据表)中的所有记录。
SELECT*FROMSTUD
命令中的*表示输出显示所有的字段,数据来源是STUD表,表中的内容以浏览方式显示。
【例2】显示STUD(学生信息数据表)中的所有的学号及与之对应的姓名,同时能去除重名。
SELECTDISTINCT学号,姓名FROMSTUD
【例3】显示SC(课程成绩表)中的所有记录,并将成绩一项乘以0.7。
SELECT学号,课程号,成绩*0.7AS成绩FROMSC
2.带条件(WHERE)的查询语句
【格式】
SELECT[ALL|DISTINCT]<字段列表>
FROM<表>
[WHERE<条件表达式>]
【功能】从一个表中查询满足条件的数据。
【说明】<条件表达式>由一系列用AND或OR连接的条件表达式组成,SQL支持的关系运算符如下:
=、<>、!
=、#、==、>、>=、<、<=。
【例1】显示STUD表中所有男生记录的学号,姓名和性别字段值。
SELECT学号,姓名,性别FROMSTUDWHERE性别="男"
【例2】显示STUD表中出生日期在85-86年之间的学生的学号,姓名,出生日期。
SELECT学号,姓名,出生日期FROM学生;
WHERE出生日期BETWEEN{^1985/01/01}AND{^1986/12/31}
【例3】显示STUD表中姓李的学生的学号,姓名,出生日期。
SELECT学号,姓名,出生日期FROM学生;
WHERE姓名LIKE"l%"
(注:
LIKE是字符匹配运算符,可使用通配符%(表示0-多个字符)、-(表示一个字府))
3.SQL的复杂查询
(1)连接查询
【说明】在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到
两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。
在多表之间查询必须处
理表与表之间的连接关系。
SELECT[ALL|DISTINCT]<字段列表>
FROM<表1>[,表2…..]
WHERE<条件表达式>
【例1】查询并显示各个学生的学号,姓名,各科成绩及课程名。
SELECTa.学号,a.姓名,b.课程号,c.成绩;
FROMSTUDa,SC1b,SCc;
WHEREa.学号=c.学号ANDb.课程号=c.课程号
【例2】查询并显示各个学生所学课程的情况。
SELECTSTUD.学号,STUD.姓名,SC1.课程号;
FROMSTUD,SC,SC1;
WHERESTUD.学号=SC.学号ANDSC.课程号=SC1.课程号
(2)连接问题
在SQL语句中,在FROM子句中提供了一种称之为连接的子句,连接分为内部联接和外部联接,外部联接又可分为左联接、右联接和全联接。
1)内部联接
内部联接是指包括符合条件的每个表的记录,也称之为全记录操作。
而上面两个例子就是内连接。
【例】查询并显示各个学生的学号,所学课程及课程成绩。
SELECTSC.学号,SC1.课程名,SC.成绩;
FROMSC,SC1;
WHERESC.课程号=SC1.课程号
如果采用内部联接方式,则命令如下:
SELECTa.学号,b.课程名,成绩;
FROMSCaINNERJOINSC1bONa.课程号=b.课程号
将会得到完全相同的结果。
2)外部联接
外部联接是指把两个表分为左右两个表。
右联接是指连接满足条件右侧表的全部记录。
左联接是指连接满足条件左侧表的全部记录。
全联接是指连接满足条件表的全部记录。
(3)嵌套查询
在SQL语句中,一个SELECT-FROM-WHERE语句称为一个查询块。
将一个查询块嵌套在另一个查询块的WHERE子句中的查询称为嵌套查询。
【例1】显示“李宁”所在班级的学生名单。
SELECT学号,姓名,班级名;
FROMSTUD;
WHERE班级名=(SELECT班级名FROMSTUDWHERE姓名="李中国")
【例2】显示计算机系男生的名单。
SELECT学号,姓名,系别代号,性别;
FROMSTUD;
WHERE系别代号="01"AND性别="男"
【例3】显示计算机系非男生的名单。
SELECT学号,姓名,系别代号,性别;
FROMSTUD;
WHERE系别代号="03"AND性别="女"
【例4】显示既选修了01课程又选修了02课程学生的名单。
SELECT学号;
FROMSC;
WHERE课程号=“01”AND学号IN;
(SELECT学号FROMSCWHERE课程号=“02”)
【例5】显示选修了01课程而没有选修02课程学生的名单。
SELECT学号;
FROMSC;
WHERE课程号="01"AND学号NOTIN;
(SELECT学号FROMSCWHERE课程号="02")
(4)排序
在SQLSELECT中使用ORDERBY短语对查询结果排序,并可以用ASC按升序排序(默认),用DESC按降序排序,可以按一列或多列排序。
【例1】先按课程号排序、再按成绩排序检索出全部SC表中的学生信息。
SELECT*FROMSCORDERBY课程号ASC,成绩DESC
例题:
1)下列命令中,属于数据查询功能的SQL语句是_____。
A.CREATE B.SELECT
C.INSERT D.GRANT
【解析】本题考查的知识点是SQL中的数据查询命令。
在VisualFoxPro中,数据查询的命令动词是SELECT。
CREATE是数据定义命令之一;INSERT是数据操纵命令之一;GRANT是数据控制命令之一。
本题选项A用于数据定义。
选项B用于数据查询。
选项C用于数据操纵。
选项D用于数据控制。
【答案】B
2)在VisualFoxPro中,简单查询基于________。
A.单个表 B.两个表
C.两个有关联的表 D.多个表
【解析】本题考查的知识点是SQL语句中的简单查询。
简单查询基于单个表,可以有简单的查询条件。
【答案】A
3)从“学生资料”表中查询所有的姓名,应输入______命令。
A.SELECT学生资料FROM姓名
B.SELECT姓名FROM学生资料
C.SELECT姓名
D.SELECT学生资料WHERE姓名
【解析】本题考查的知识点是简单查询的使用。
简单查询由SELECT和FROM短语构成无条件查询,或由SELECT、FROM和WHERE短语构成条件查询。
选项A中的“学生资料”和“姓名”顺序颠倒;选项B格式及命令都正确;选项C格式错误;选项D命令错误。
【答案】B
4)从“学生资料”表中查询所有年龄大于22岁的学生并显示其姓名,应输入_______命令。
A.SELECT年龄FROM学生资料WHERE姓名>22
B.SELECT年龄FROM学生资料
C.SELECT姓名FROM学生资料WHERE年龄>22
D.SELECT姓名FROM学生资料
【解析】本题考查的知识点是简单查询命令的使用。
本题由SELECT、FROMTWHERE短语构成条件查询,其中WHERE指定了查询条件。
所以本题先排除B、D。
选项A中“姓名”和“年龄”顺序颠倒,输入该命令,系统会提示操作符与操作命令不匹配的