当前位置:文档之家› 第四章-SQL语言

第四章-SQL语言

行排序
以上短语是学习和理解SQL SELECT命令必须
掌握的,还有一些短语是VFP特有的。
4.2.1 简单查询
首先从几个简单的查询例子来说明
SELECT、FROM 和 WHERE短语的使用方法。
(以下例子均是基于档案表、选课表和课
程表)
档案表
学号
姓名
性别
专业
家庭住址
2004130101 李洪昆

财会
例4.4 检索出课程号为“1002”或“1004”, 并且成绩小于75分的学号和成绩。
SELECT 学号,成绩 FROM 选课表; WHERE 成绩<75 AND ; (课程号=’1002’ OR 课程号=’1004’)
结果是: 2004140101 50 2004150101 55
前面的几个例子在FROM之后只指定了一个关系,如 果有WHERE条件子句,系统首先根据指定的条件依次检 验关系中的每个记录,如果没有指定WHERE子句,则不 进行检验,然后选出满足条件的记录。
例4.13 求出来自“北京”的学生的总 成 绩。 SELECT SUM(成绩) FROM 选课表 ;
WHERE 学号 IN (SELECT 学号 ; FROM 档案表 WHERE ; 家庭住址=’北京’) 结果是:
295
上面的“WHERE 学号 IN”中的IN不能用 “=”代替,否则,屏幕上将出现“子查询 返
SQL已经成为关系数据库的标准语言
,所以关系数据库管理系统都支持SQL
,VFP也同样支持SQL。
4.1 SQL 概述 最早的SQL是1986年10月美国ANSI 公布的。随后ISO于1987年6月也正式 采纳它为国际标准,1989年又推出了 SQL98版,1992年又推出了SQL92新标 准版本。 SQL语言具有以下主要特点: (1)SQL是一种结构化的语言,它 包括数据定义、数据查询、数据操纵 和数据控制等方面的功能。 (2) SQL是一种非过程化的语言, 它不需要告诉计算机怎样做,只要用
例 4.10 按学分升序检索出选课表中的 所有信息。
SELECT * FROM 选课表 ORDER BY 成绩 结果是:
2004140101 1002 50
2004150101 1004 55 2004150101 1005 70 2004130101 1004 72 2004130101 1002 80 2004130102 1004 80 2004130102 1003 85 2004130101 1001 90 其中短语“ORDER BY 成绩”是按升序排列 ,默认情况下按升序排序,ASC可加也可不 加;如果按降序排序,ORDER BY子句后面 的字段名后必须加上DESC。
第五章
关系数据库标准语言SQL
SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能
SQL是结构化查询语言 STRUCTURED QUERY LANGUAGE 的缩 写,可以说查询是SQL的最主要的组成 部分,但并不是它的全部, SQL还包 含数据定义、数据操纵和数据控制功 能等部分。
2004150101 1005 70
这里是对两列排序的例子,对多列同样可
以进行排序操作。
4.2.6 简单的计算查询 SQL 不但有查询功能,而且还有计算方 式的查询。用于计算查询的函数有: (1)COUNT---计数 (2)SUM---求和 (3)AVG---计算平均值 (4)MAX---求最大值 (5)MIN---求最小值 例4.12 求出学生来自多少个城市。 SELECT COUNT (DISTINCT 家庭住址); FROM 档案表 结果是: 3
选课表
课程号 1001 1002 1003 1003 1004 1002 1004 1005
课程表
课程号
课程名
学时数
1001
高等数学
80
1002
计算机基础
50
1003
数据库应用
70
1004
会计学
100
1005
经济学
100
成绩 90 80 72 85 80 50 55 70
学分 3 2
2.5 4 4
开课学期 1 1 2 3 4
查询的结果出自一个关系,但相关的条件 却涉及多个关系。
例4.7检索出成绩大于75分的学生的姓名。 SELECT 姓名 FROM 档案表 WHERE ; 学号 IN (SELECT 学号 FROM ; 选课表 WHERE 成绩>80)
结果是: 李洪昆 王倩
可以看到,这个命令中有两个SELECT-FROM-WHERE 查询 语句,即内外层查询块。这里的IN相当于集合运算符 ∈(属于)。
例4.9命令还可以写成下面的语句:
SELECT * FROM 选课表 WHERE ; (成绩 >= 80)AND (成绩 <=100)
( LIKE例题)
从课程表中检索出课程名中带有“学”字

课程号和课程名。
SELECT 课程号,课程名 FROM 课程表;
WHERE 课程名 LIKE “%学”
结果是:
北京
2004130102 王倩

财会
昆明
2004140101 李义

金融
昆明
2004140102 吴文英

金融
.null.
2004150101 刘留

营销
北京
2004150102 赵西

营销
西安
学号 2004130101 2004130101 2004130101 2004130102 2004130102 2004140101 2004150101 2004150101
1001
高等数学
1004 会计学
1005 经济学
LIKE 是字符串匹配运算符,通配符“%” 表示0个或多个字符,另外通配符“_”(下
4.2.5 排序 使用SQL SELECT 可以将查询结果排序 ,排序子句是 ORDER BY 。具体格式是: ORDER BY 字段名 [ASC|DESC][,字段名 [ASC|DESC]....] 其中: ASC表示升序,DESC表示降序
4.2.2 简单的联接查询
联接是关系的基本操作之一,联接查询
是一种基于多个关系的查询 。
例4.5 检索出成绩大于80分的学生的姓
名和专业。
SELECT 姓名,专业 FROM ;
档案表,选课表 WHERE (成绩>80) ;
AND (档案表.学号=选课表.学号)
结果是:
李洪昆 财会
王倩
财会
这里所要求检索的内容分别来自于选课表和档案表两个表,其 中的“档案表.学号=选课表.学号”是联接条件。
例4.14 检索学时数最多的课程名和学分。
SELECT 课程名,MAX(学时数) FROM ;
课程表ห้องสมุดไป่ตู้
结果是:
经济学
100
课程表中有两条满足条件的记录,但只显示满足条件
的第一条。
例4.15 检索出除北京之外的其他学生的平
均分。
SELECT AVG(成绩) FROM 选课表 ;
WHERE 学号 NOT IN;
(SELECT 学号 FROM 档案表 WHERE ;
家庭住址=’北京’)
结果是:
71.75
4.2.7 分组与计算查询
分组与计算查询的 GROUP BY 短语格
式如下:
GROUP BY 字段名1 [, 字段名2,....]
[HAVING <条件表达式>]
例4.16 求出每门课程的平均分。
SELECT 课程号,AVG(成绩) FROM ;
SELECT * FROM 选课表 结果是:
2004130101 1001 90 2004130101 1002 80 2004130101 1003 72 2004130102 1003 85 2004130102 1004 80 2004140101 1002 65 2004150101 1004 55
命令中的“*”是多字节通配符,表示
所有字段,这个命令相当于: SELECT 学号,课程号,成绩 FROM 选课表 在数据库中 * 代表多字节通配符,?代
表单字节通配符。 例4.3 检索出成绩大于80分的学号和成绩。 SELECT 学号,成绩 FROM 选课表;
WHERE 成绩>80 结果是:
2004130101 90 2004130102 85 这里的WHERE短语是查询条件,查询条 件条件可以是任意复杂的逻辑表达式。
例 4.8 检索出成绩小于60分的学生的所有 信息 SELECT * FROM 档案表 WHERE 学号 ;
NOT IN (SELECT 学号 FROM 选课表 ; WHERE 成绩>60) 结果是: 2004140101 李义 男 金融 昆明 2004140102 吴文英 女 金融 2004150102 赵西 男 营销 西安
例4.1 从档案表中查出专业名称。
SELECT 专业 FROM 档案表
结果是:
财会
可以看到查询结果中
财会
有重复值,如果要去
金融
掉重复值,需要指定
金融
DISTINCT 短语:
营销
营销
SELECT DISTINCT 专业 FROM 档案表 结果是:
财会 金融 营销 例 4.2 从选课表中查出所有记录。
例4.11先按课程号升序排列,再按学分
降序排列检索出选课表中的所有信息。
SELECT * FROM 选课表 ORDER BY ;
课程号,成绩 DESC
结果是:
2004130101 1001 90
2004130101 1002 80
相关主题