VF第五章查询 - Gczjzx.net

Download Report

Transcript VF第五章查询 - Gczjzx.net

电子工业出版社出版
《数据库应用技术Visual Foxpro》
第五章
结构化查询语言SQL
故城县职业高级中学 王晓霞
本章要点
5.1
SQL的数据定义功能
5.2
SQL的数据查询功能
5.3
SQL的数据更新功能
5.4
用查询设计器建立查询
5.3 SQL中的数据查询功能
数据库中的数据很多时侯是为了查询的,
因此,数据查询是数据库的核心操作。而在
SQL语言中,查询语言中有一条查询命令,
即SELECT语句。
5.3.1 SELECT命令格式
SELECT语句的一般格式为:
【命令】SELECT [ALL/DISTINCT]
无重复记录
所有记录
FROM[<数据库名!>]<表名>[,[<数据库名!>]<表名>…]
数据源
[[INTO <新表名>]/[TO FILE<文件名>]/TO PRINT/TO
SCREEN]]
输出
5.3.1 SELECT命令格式
SELECT语句的一般格式为:
【命令】SELECT [ALL/DISTINCT]
[TOP<表达式>[PRECENT]][<别名>.]<列表达式>
[AS<栏名>][,…]
FROM[<数据库名!>]<表名>[,[<数据库名!>]<表名>…]
指定查询结果包括特定
投影所生成的
数目的行数,或者包括
列的名称
[[INTO <新表名>]/[TO FILE<文件名>]/TO
PRINT/TO
全部行数的百分比。使
SCREEN]]
用TOP子句必须与
ORDER子句同时使用
。
5.3.1 SELECT命令格式
SELECT语句的一般格式为:
【命令】SELECT [ALL/DISTINCT]
[TOP<表达式>[PRECENT]][<别名>]<列表达式>
[AS<栏名>][,…]
FROM[<数据库名!>]<表名>[,[<数据库名!>]<表名>…]
[INNER/LEFT/RIGHT/FULL JOIN][<数据库名!>]<表名>
[ON<连接条件>…]]
[[INTO <新表名>]/[TO FILE<文件名>]/TO PRINT/TO
SCREEN]]
5.3.1 SELECT命令格式
SELECT语句的一般格式为:
【命令】SELECT [ALL/DISTINCT]
[TOP<表达式>[PRECENT]][<别名>]<列表达式>
[AS<栏名>][,[<别名>]<列表达式>[AS<栏名>]…]
FROM[<数据库名!>]<表名>[,[<数据库名!>]<表名>…]
[INNER/LEFT/RIGHT/FULL JOIN][<数据库名!>]<表名>
[ON<连接条件>…]]
数据表之间联结
查询结果记录必
[[INTO <新表名>]/[TO FILE<文件名>]/TO PRINT/TO
的条件
须满足的条件
SCREEN]]
[WHERE<连接条件>[AND<连接条件>…]
[AND/OR<筛选条件>[AND/OR<筛选条件>…]]]
[GROUP BY<列名>[,<列名>…]][HAVING<筛选条件>]
[ORDER BY<列名>]ASC/SESC][,<列名>[]…]]
把查询结果中的行按一个或多个
列的值分组;可以指定在查询结
果中的各组应满足的条件
【功能】
实现数据查询。其执行过程为:根据
WHERE子句的连接和检索条件,从FROM子句
指定的基本表或视图中选取满足条件的元组,
再按照SELECT 子句中指定的列表达式,选出
元组中的属性值形成结果表。如果有GROUP字
子句,则将查询结果按照指定<列名>相同的值
进行分组;如果GROUP子句后还有HAVING短
语,则只输出满足HAVING条件的元组;如果
有ORDER子句,查询结果还要按照指定<列名>
的值进行排序。
【例5-1】显示STUD(学生信息数据表)中的所有记录。
SELECT
* FROM
STUD
命令中的*表示输出显示所有的字段,数据来源是STUD表,
表中的内容以浏览方式显示。
【例5-2】显示STUD(学生信息数据表)中的所有的学号
及与之对应的姓名,同时能去除重名。
SELECT
DISTINCT
学号,姓名 FROM
STUD
【例5-3】显示SC(课程成绩表)中的所有记录,并将成
绩一项乘以0.7。
SELECT 学号,课程号,成绩*0.7 AS 成绩 FROM SC
5.3.2 条件查询
【格式】SELECT [ALL | DISTINCT] <字段列表>
FROM <表>
[WHERE <条件表达式> ]
【功能】从一个表中查询满足条件的数据。
【说明】<条件表达式>由一系列用AND 或 OR 连接的
条件表达式组成,条件表达式的格式可以是以下几种:
(1)<字段名1><关系运算符><字段名2>。
(2)<字段名><关系运算符><表达式>。
(3)<字段名>[NOT] BETWEEN <起始值> AND <终止值>
(4)<字段名>
[NOT]
IN
<值表>
(5)<字段名>
[NOT]
IN
(<子查询>)
(6)<字段名>
[NOT]
LINK
<字符表达式>
SQL支持的关系运算符如下:
=、<>、!=、#、==、>、>=、<、<=。
1.比较查询
【例5-4】显示STUD表中所有男生记录的学号,姓名和
性别字段值。
SELECT 学号,姓名,性别 ;
FROM STUD WHERE 性别="男"
2.多重条件查询 (AND、OR)
【例5-5】查询选修课程号为“C120”或“C140”且分数大
于等于80分学生的学号、课程号和成绩。
SELECT 学号,课程号,成绩 FROM 选课 WHERE;
(课程号=‘C120’ OR 课程号=‘C140’)AND 成绩>=80
3.确定范围(BETWEEN…… AND)
【例5-6】显示STUD表中出生日期在85年之间的学生的
学号,姓名,出生日期。
SELECT 学号,姓名,出生日期 FROM STUD ;
WHERE 出生日期 BETWEEN {01/01/85} AND ;
{12/31/86}
4.确定集合(IN)
【例5-7】查询没有选修“C140”,也没有选修“C160”课
程并且成绩在85和90之间的学生的学号、课程号和成绩
SELECT 学号,课程号,成绩 FROM 选课;
WHERE 课程号 NOT IN (‘c140’,’c160’) and 成绩;
BETWEEN 85 AND 90
5.部分匹配查询(‘%’、‘_’、‘LIKE’)
【例5-8】显示STUD表中姓李的学生的学号,姓名,出
生日期。
SELECT 学号,姓名,出生日期 FROM STUD ;
WHERE 姓名 LIKE “李%”
5.3.3 统计查询
函数名称
功能
AVG
列平均值
SUM
列求和
COUNT
列计数
MAX
列中最大值
MIN
列中最小值
【例5-10】求选修课程号为“C140”学生的最高分、最
低分及之间相差的分数(显示课程号)。
SELECT 课程号,MAX(成绩) AS 最高分,;
MIN(成绩) AS 最低分,MAX(成绩)-MIN(成绩) AS,;
相差分数 FROM 选课 WHERE (课程号=‘C140’)
5.3.4 分组查询
【格式】
SELECT [ALL | DISTINCT] <字段列表>
FROM <表> [WHERE <条件>;
[GROUP BY <分类字段列表>…];
[HAVING <过滤条件>] ;
【例5-11】显示各班总人数。
SELECT 班级名,COUNT(班级名)
AS;
总人数 FROM STUD GROUP BY 班
级名
5.3.5 排序查询
【格式】
SELECT [ALL | DISTINCT] <字段列表> ;
FROM <表> [WHERE <条件> [GROUP
BY ;
<分类字段列表>…] [HAVING <过滤条件>] ;
ORDER BY <分类字段列表>
【例5-12】按出生日期降序显示STUD表中的
学号,姓名,出生日期。
SELECT 学号,姓名,出生日期 FROM
STUD ;
ORDER BY 出生日期 DESC
5.3.6 连接查询
【说明】在一个数据库中的多个表之间一般都存在
着某些联系,在一个查询语句中同时涉及到两个或
两个以上的表时,这种查询称之为连接查询(也称
为多表查询)。在多表之间查询必须处理表与表之
间的连接关系。
SELECT [ALL | DISTINCT] <字段列表>
FROM <表1>[,表2…..]
WHERE <条件表达式>
在SQL语句中,在FROM子句中提供了一种称之为
连接的子句,连接分为内连接和外连接,外连接又可分
为左外连接、右外连接和全外连接。
内连接(等值连接与非等值连接)
内连接是指包括符合条件的每个表的记录,也称之为
全记录操作。而上面两个例子就是内连接。
【例5-13】查询并显示各个学生的学号,所学课程及课
程成绩。
SELECT
FROM
WHERE
SC.学号,COURSE.课程名,SC.成绩 ;
SC,COURSE ;
SC.课程号=COURSE.课程号
如果采用内连接方式,则命令如下:
SELECT
a.学号,b.课程名,成绩
FROM SC
=b.课程号
a
INNER
将会得到完全相同的结果。
JOIN b
;
ON
a.课程号
5.3.7嵌套查询
在 SQL 语 句 中 , 一 个 SELECT - FROM -
WHERE语句称为一个查询块。将一个查询块嵌
套在另一个查询块的WHERE子句或HAVING短
语的条件中的查询称为嵌套查询或子查询。
【例5-14】显示“李宁”所在班级的学生名单。
SELECT
FROM
学号,姓名,班级名 ;
STUD ;
WHERE 班 级 名 = ( SELECT 班 级 名 FROM
STUD WHERE 姓名="李宁")
【说明】
嵌套查询中,子查询所返回的结果作为了父
查询的判断条件,或者作为父查询的条件范围。
5.3.7 查询去向
默认情况下,查询输出到一个浏览窗口,用户在
“SELECT”语句中可使用[INTO<目标>|TO FILE<文件名
>|TO SCREEN| TO PRINTER]子句选择查询去向:
INTO ARRAY 数组名:将查询结果保存到一个数组中。
CURSOR< 临时表名>:将查询结果保存到一个临时表中。
DBF | TABLE <表名>:将查询结果保存到一个永久表中。
TO FILE<文件名>[ADDITIVE]:将查询结果保存到文本文
件中。如果带“ADDITIVE”关键字,查询结果以追加方式
添加到<文件名>指定的文件,否则,以新建或覆盖方式添加
到<文件名>指定的文件。
TO SCREEN:将查询结果保在屏幕上显示。
TO PRINTER:将查询结果送打印机打印。
思考题
1.SQL语言有什么特点?
2. SQL语言可以在什么环境下使用?
3. SQL的查询包括哪些功能?
4.在SQL查询中,可以带哪些条件?
5.在连接查询中,表连接的方式有哪几种?
6.请用三种查询方法实现查询选修课程“c140”的学生姓名.
7.在查询设计器中,怎样查看查询操作所产生的SQL命令?