结构化查询语言(SQL)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构化查询语言(SQL)
SQL概述
SQL的内容在笔试和上机考试中均占到大约30%的比例,此外它还是查询和视图的基础,因此是学习的重点也是难点。
SQL是结构化查询语言Structure Query Language的缩写。
SQL包含了查询功能、数据定义、数据操纵和数据控制功能,在VFP中没有提供数据控制功能。
SQL主要特点
1.SQL是一种一体化语言。
2.SQL是一种高度非过程化的语言。
3.SQL语言非常简洁。
4.SQL语言可直接以命令方式交互使用,也可嵌入到程序设计语言中以程序方式使用。
查询功能
SELECT命令的特点:
1.可以自动打开数据库、表文件加以查询,而不需要事先用OPEN DATABASE或USE命令打开。
2.可以直接选取数据表中的数据,而不需要事先用SET RELATION命令建立关联。
3.当需要的索引文件不存在时,会自动建立暂存索引文件,以支持快速搜索技术(Rushmore)来查询。
4.其查询结果可输出到文件、表、屏幕或报表上,还可以转换成统计图表。
命令格式:SELECT ——FROM ——WHERE
可与LIST FIELDS——FOR ——对照学习。
关系操作:投影,选择,联接。
说明:功能强大,语法灵活;要处理的数据表无须事先打开,通过FROM子句指明并打开。
1.SELECT 短语:说明要查询的数据;对应的关系操作为投影,类似于FIELDS子句。
2.FROM 短语:说明要查询的数据来自哪个或哪些表,可对单个表或多个表进行查询;
3.WHERE 短语:说明查询条件;对应的关系操作为选择,类似
于FOR子句。如是多表查询还可能过该子句指明联接条件,进行联接。
4.GROUP BY 短语:用于对查询结果进行分组,可利用它进行分组汇总;类似于TOTAL命令。
5.HA VING 短语:跟随GROUP BY 使用,它用来限定分组必须满足的条件;
6.ORDER BY 短语:用于对查询的结果进行排序;类似于SORT 命令。
示例数据库:
学生管理,包括三个表:学生,课程,选课(通过该表反映“学生”与“课程”之间“多对多”的联系。
问题:请同学们分别指出三个表的主关键字。
一、简单查询
简单查询基于单个表。
例:
1.查询学生信息
SELE * FROM 学生&&“*”号代表所有列。
类似于:
USE 学生
LIST
2.查询男生学生的学号、姓名及生日
SELE 学号,姓名,生日FROM 学生WHERE 性别=”男”
类似于
USE 学生
LIST学号,姓名,生日FOR性别=”男”
3.查询学分大于5的课程的信息
SELE * FROM 课程WHERE 学分>5
类似于
USE 学生
LIST FOR 学分>5
4、查询学分不在6到9之间的
Sele * from 课程where 学分not between 6 and 9
二、简单联接查询
联接是关系的基本操作之一,联接查询基于多个关系的查询。
例:查询男生学生的选课信息,包括姓名,学号及成绩。
分析:本例的查询结果包括两个表“学生”与“选课”的属性,适用于联接查询。
SELE 姓名,选课.学号,成绩;
FROM 学生,选课;
WHERE 学生.学号=选课.学号AND 性别=”男”
说明:如果命令太长一行写不下可在行末加分号“:”表续行选课.学号:因为两个表中均有“学号”字段,所以必须指明所属表。
学生.学号=选课.学号:连接条件。
还可使用如下SQL语句:
SELE 姓名,选课.学号,成绩;
FROM 学生JOIN选课ON学生.学号=选课.学号;
WHERE 性别=”男”
说明:
JOIN ……ON :建立表与表之间的联接。
自连接:sele S.雇员姓名,"领导",E.雇员姓名from 雇员S,雇员
E where S.雇员号=E.经理
三、嵌套查询
嵌套查询是另一类基于多个关系的查询,此类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。
1、例:查询女生学生选课信息,包括学号,课程号,成绩。
SELE *;
FROM 选课;
WHERE 学号IN(SELE 学号FROM 学生WHERE 性别=”
女”)
说明:
IN:相当于集合运算符∈。
还可使用如下SQL语句:简单联接查询
SELE 选课.学号,课程号,成绩;
FROM 选课JOIN 学生ON 选课.学号=学生.学号;
WHERE 性别=”女”
2、查询有“硬盘”订购需求的订购单明细记录:这个例子要求查询订购单明细表中的记录,而查询条件是产品标的名称,
Sele * from 订购单明细where 产品号IN;
(sele 产品号from 产品where 名称=“硬盘”)
3、排除法查询的例子:
查询所有订购数量(即订购单中每个订购项目的数量)都在50以上的订购单的信息
Sele * from 订购单where 订单号not in;
(sele 订单号from 订购单明细where 数量〈=50)
Sele * from 订购单where 订单号not in;
(sele 订单号from 订购单明细where 数量〈=50)and 订单号in (sele 订单号from 订购单明细)
4、找出和某某产品同等价位的所有产品信息:内外层查询的同一个表,内层查询查处单价,外层查询根据这个单价查询产品信息
Sele * from 产品where 单价=;