PowerPoint Template

Download Report

Transcript PowerPoint Template

第四章
关系数据库标准语SQL
VFP课程建设组
目录
4.1
SQL语言概述
4.2
查询功能
4.3
操作功能
4.4
定义功能
4.5
本章小结
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.1
SQL语言概述
SQL全称是“结构化查询语言(Structured Query
Language)”,最早是IBM的圣约瑟研究实验室为其
关系数据库管理系统SYSTEM R开发的一种查询语
言,它的前身是SQUARE语言。SQL语言结构简洁,
功能强大,简单易学,所以自从IBM公司1981年推
出以来,SQL语言得到了广泛的应用。如今无论是
Oracle,Sybase, Informix, SQL server这些大型
的数据库管理系统,还是像Visual FoxPro,
PowerBuilder这些微机上常用的数据库开发系统,
都支持SQL语言作为查询语言。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.1.1
SQL语言的特点
1.综合统一
SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的
功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包
括定义关系模式、录入数据以建立数据库、查询、更新、维护、数据库重构、
数据库安全性控制等一系列操作要求,这就为数据库应用系统开发提供了良好
的环境。
2.非过程化语言
SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动
导航。
3.面向集合的操作方式
SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次
插入、删除、更新操作的对象也可以是元组的集合。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.1.1
SQL语言的特点
4.一种语法结构有两种使用方式
SQL语言既是自含式语言,又是嵌入式语言。且在两种不同的使用方式下,
SQL语言的语法结构基本上是一致的。
5.语言简捷
SQL语言功能极强,但又十分简洁,只用9个动词即可完成对数据的操纵、
数据的定义及数据的控制等功能。
(1)数据操纵:SELECT、INSERT、UPDATE、DELETE
(2)数据定义:CREATE、DROP、ALTER
(3)数据控制:GRANT,REVOKE
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.1.2
SQL语言的功能
查询是SQL语言的重要组成部分,同时SQL还包括数
据定义、数据操纵和数据控制功能等部分。SQL已
经成为关系数据库的标准查询语言。
1.数据查询功能
包括单表查询、多表查询、集合查询等。
2.数据定义功能
包括定义、删除、修改表等操作。
3.数据操纵功能
包括数据插入、数据更新、数据删除等操作。
4.数据控制功能
包括数据保护及事务管理等操作。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2
查询功能
数据查询是SQL语言的重要部分,通过Select语句
来实现,下面首先介绍Select语句的格式,然后通
过实例具体说明其使用方法。
Select语句的基本格式:
Select〈列名表〉;
From〈表名〉;
Where〈条件表达式〉;
Group by <分组表达式>;
Having <条件表达式>;
Order by〈排序项目〉[ASC/DESC][,
[ASC/DESC]]...;
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2
查询功能
说明:
(1)Select子句的〈列名表〉:指出要显示的列的字段名,可
选一个或多个字段,多个字段间用逗号分开,“*”可以用
来表示某一个数据表中的所有字段。
(2)From子句的〈表名〉:指出在查找过程中所涉及的表,
可以是单个表,也可以是多个表,多个表之间应用逗号分开。
(3)Where子句的〈条件表达式〉:指出所需数据应满足的
条件,条件表达式中必须用到比较运算符或逻辑运算符(如:
=、<、> !=等)。
(4)Group by 子句<分组表达式>:说明对数据如何进行分组,
其Having则表示分组满足的条件,与Group by一起使用。
(5)Order by〈排序项目〉:指出查询结构的输出顺序,其
中ASC为升序,DESC为降序。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.1 简单查询
简单的SQL查询只包括Select子句、FROM子句。
【例4-1】从“学生成绩数据库”中的student表查询
所有学生的情况。
在“命令”窗口中写下查询语句:
Select * From student
如图4-2所示
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.1 简单查询
【例4-2】从“学生成绩数据库”中的student表查询
所有学生的学号、姓名和系科的情况。
在“命令”窗口中写下查询语句:
Select 学号,姓名,系科 From student
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
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。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.2 条件查询
【例4-3】从“学生成绩数据库”中的student表查询
所有系科为计算机的学生的学号、姓名、性别及系
科的情况。
在“命令”窗口中写下查询语句:
Select 学号,姓名,性别,系科
From student
Where 系科=“计算机”
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.2 条件查询
【例4-4】从“学生成绩数据库”中的student表查询
总分在550至630之间的学生学号、姓名、系科、总
分的情况,并按总分的升序排列。
在“命令”窗口中写下查询语句:
Select 学号,姓名,系科,总分
From student
Where 总分Between 550 and 630
Order by 总分
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.3 连接查询
通过连接运算符可以实现多个表查询。连接是关系
数据库模型的主要特点,也是它区别于其它类型
数据库管理系统的一个标志。
1.简单连接查询
【例4-5】从“学生成绩数据库”中的student表和assign表查
询所有学生的姓名、性别、院系、课程号及成绩。
在“命令”窗口中写下查询语句:
Select 姓名,性别,系科,课程号,成绩
From student,assign Where student.学号= assign.学
号
如图4-6所示
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.3 连接查询
【例4-6】从“学生成绩数据库”中的student表、
assign表及course表查询所有学生的学号、姓名、
课程号、课程名和类别的情况。
在“命令”窗口中写下查询语句:
Select student.学号,姓名,assign.课程号,课程名,
类别 From student,assign,course Where
student.学号= assign.学号 and assign.课程号=
course.课程号
如图4-7所示
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.3 连接查询
 2.运用连接运算符进行连接查询
连接查询分为:内连接、外连接和交叉连接。
(1)内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操
作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方
式不同,内连接又分为等值连接、自然连接和不等连接三种。
(2)外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接
(RIGHT OUTER JOIN或RIGHT JOIN) 和全外连接(FULL OUTER JOIN或
FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全
外连接时)中所有符合搜索条件的数据行。
(3)交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行
的笛卡尔积,其结果集合中的 数据行数等于第一个表中符合查询条件
的数据行数乘以第二个表中符合查询条件的数据行数。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.3 连接查询
【例4-7】从“学生成绩数据库”中的student表和
assign表查询所有学生的姓名、性别、系科、课程
号及成绩。我们使用连接运算符来实现。
在“命令”窗口中写下查询语句:
Select 姓名,性别,系科,课程号,成绩 From
student inner join assign on student.学号=
assign.学号,其效果与如图4-6所示一样。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.4 嵌套查询
在一个Select语句中包含多个Select语句为嵌套查
询。下面举例说明:
【例4-8】从“学生成绩数据库”查询课程号A001成
绩大于85分的学生学号,姓名及系科的情况。
在“命令”窗口中写下查询语句:
Select学号,姓名,院系 From student Where 学号
In(Select 学号 From assign Where 课程号
=“A001” and 成绩>85)
如图4-8所示
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.5 计算与分组查询
1.计算查询
常用计算查询的函数有Count(计数);Sum(求
和);Avg(平均值);Max(最大值);Min(最小值)等。
它们可以使用在Select语句中。
【例4-9】从“学生成绩数据库”查询数据表Student
中“系科”的个数。
在“命令”窗口中写下查询语句:
Select Count(Distinct 系科) From Student
如图4-9所示
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.5 计算与分组查询
【例4-10】从“学生成绩数据库”查询数据表Student学生总
分的平均值,最大值和最小值。
在“命令”窗口中写下查询语句:
Select Avg(总分) AS 平均值, Max(总分) AS 最大值,
Min(总分) AS 最小值 From Student,如图4-10所示。
 2.分组查询
根据关键字的值对数值属性的值进行汇总,使用Group By 字
句实现。
【例4-11】从“学生成绩数据库”查询数据表Student中男学
生和女学生总分平均值的情况。
在“命令”窗口中写下查询语句:
Select 性别,Avg(总分) AS 平均值From Student Group By
性别,如图4-11所示。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.5 计算与分组查询
【例4-12】从“学生成绩数据库”中查询每位学生课程的平均
成绩。
在“命令”窗口中写下查询语句:
Select 姓名,Avg(成绩) AS 课程平均值From student,
assign Where student.学号= assign.学号 Group By 姓名,
如图4-12所示。
【例4-13】从“学生成绩数据库”中查询每位学生课程的平均
成绩且大于80分的情况。
在“命令”窗口中写下查询语句:
Select 姓名,Avg(成绩) AS 课程平均值From student,
assign Where student.学号= assign.学号,Group By 姓
名 Having Avg(成绩)>80,如图4-13所示。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.2.6 空值查询
空值不是空格或0,而是表示数据值不可用,用
NULL值表示。SQL可以使用空值,利用它进行相应
查询。
【例4-14】从“学生成绩数据库”查询数据表
Student中系科为空的学生情况。
在“命令”窗口中写下查询语句:
Select * From Student Where 系科 is null
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.3
操作功能
SQL的操作功能是对数据进行修改,包
括数据的插入、数据的更新及数据的删
除等操作。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.3.1 数据插入
SQL语言中用INSERT语句向表或视图中插入新的数据
行。
INSERT语句的语法格式为:
INSERT [INTO] table_source
{[column_list]
VALUES ({DEFAULT | constant_expression} [,…n])
其中,column_list参数为新插入数据行中一列或多
列列名列表,它说明INSERT 语句只为指定列插入
数据。在给表或视图中部分列插入数据时,必须使
用列名列表方式指出这部分列名。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.3.1 数据插入
【例4-15】在数据表Student中插入一个学生的记录:
学号2008021,姓名 郭襄,性别 女,系科 计算机,
出生日期 1988年5月1日。
在“命令”窗口中可用如下语句:
Insert Into student(学号,姓名,性别,出生日期,
系科);
Values(“2008021”,” 郭襄:, “女”,{05/01/88},”
计算机”)
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.3.2 数据更新
UPDATE语句用于修改表中数据,该语句的语法格式为:
UPDATE table_name
SET
column_name1=variable1,column_name2=variable
2
WHERE search_conditions
其中SET子句指出表中被修改的列或变量,以及它们
的新值。column_name为被修改的列名。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.3.2 数据更新
【例4-16】在数据表Student中为所有学生的总分增
加10分。
在“命令”窗口中可用如下语句:
Update student Set 总分=总分+10
【例4-17】在数据表Student中为计算机系的学生其
总分增加10分。
在“命令”窗口中可用如下语句:
Update student Set 总分=总分+10 Where 系科=”计
算机”
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.3.3 数据删除
DELETE语句可以删除表中的数据。其DELETE语句的语
法格式为:
DELETE
FROM {table_name | view_name}
[WHERE conditions]
DELETE语句的结构与UPDATE语句有些类似,其中也包
含FROM子句和WHERE子句。WHERE子句为数据删除指
定条件。不使用WHERE子句时,DELETE语句将把有
或视图中所有的数据删除。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.3.3 数据删除
【例4-18】永久删除数据表Student学号为2008015的
记录。
在“命令”窗口中可用如下语句:
Delete From student Where 学号=”2008015”
Pack
Pack对当前表中具有删除标记的所有记录做永久
的删除。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.4
定义功能
SQL的定义功能是对表进行修改,包括对表结
构进行创建、修改表结构以及删除表等操作。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.4.1 表的定义
一般格式如下:
Create Table <表名>(<列名> <数据类型> [列级完整性约束
条件]
[,<列名> <数据类型> [列级完整性约束条件]...]
[,<表级完整性约束条件>]);
其中:
<表名>是所要定义的基本表的名字,最好能表达表的应用语
义
<列名>是由一个或多个属性(列)组成。
建表的同时通常还可以定义与该表有关的完整性约束条件,这
些完整性约束条件被存入系统的数据字典中,当用户操作表
中数据时由DBMS自动检查该操作是否违背这些完整性约束条
件。如果完整性约束条件涉及到该表的多个属性列,则必须
定义在表级上,否则既可以定义在列级也可以定义在表级。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.4.1 表的定义
【例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)
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.4.2 表结构的修改
一般格式为:
Alter Table <表名>
[Alter <列名> <新数据类型> ]
[Add <新列名> <数据类型> [完整性约束]]
[Drop <完整性约束名> <完整性约束名>]
[Modify <列名> <数据类型> <数据类型>]
[Add Primary Key(列名)]
[Add Preign Key(列名) Referneces 表名(列名)];
其中<表名>指定需要修改的基本表,Add子句用于增加新列和
新的完整性约束条件,Drop子句用于删除指定的完整性约束
条件,Modify子句用于修改原有的列定义。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.4.2 表结构的修改
【例4-21】为Student表增加一个党员否字段。
在“命令”窗口中可用如下语句:
Alter Table student Add 党员否 L
【例4-22】修改Student表的姓名字段,其宽度改为10。
在“命令”窗口中可用如下语句:
Alter Table student Alter 姓名 C(10)
【例4-23】删除Student表的党员否字段。
在“命令”窗口中可用如下语句:
Alter Table student Drop党员否
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.4.3 表的删除
删除表时会将与表有关的所有对象一起删掉。基本
表定义一旦删除,表中的数据、在此表上建立的索
引都将自动被删除掉,而建立在此表上的视图虽仍
然保留,但已无法引用。因此执行删除操作一定要
格外小心。
一般格式为:Drop Table <表名>
【例4-24】删除Student表。
在“命令”窗口中可用如下语句:
Open DataBase 学生成绩数据库
Drop Table student
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
4.5 本章小结
SQL结构化查询语言(Structured Query Language)
功能十分强大,其数据查询是SQL的核心。本章主
要讲述了Select查询语句的基本使用方法,包括单
表查询、多表查询、条件查询、分组查询等操作。
另外,本章还讲述了SQL语言的操作功能和定义功
能。多种方法的结合灵活操作数据库中的数据表。
http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
VFP课程建设组