第四章-SQL语言

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京
2004130102 王倩

财会
昆明
2004140101 李义

金融
昆明
2004140102 吴文英

金融
.null.
2004150101 刘留

营销
北京
2004150102 赵西

营销
西安
学号 2004130101 2004130101 2004130101 2004130102 2004130102 2004140101 2004150101 2004150101
4.2.2 简单的联接查询
联接是关系的基本操作之一,联接查询
是一种基于多个关系的查询 。
例4.5 检索出成绩大于80分的学生的姓
名和专业。
SELECT 姓名,专业 FROM ;
档案表,选课表 WHERE (成绩>80) ;
AND (档案表.学号=选课表.学号)
结果是:
李洪昆 财会
王倩
财会
这里所要求检索的内容分别来自于选课表和档案表两个表,其 中的“档案表.学号=选课表.学号”是联接条件。
SELECT语句中主要短语的含义: SELECT---查询说明语句 FROM---说明查询的数据来自哪些表,
可以是单个或多个表 WHERE---说明查询的条件 GROUP BY---该短语用于对查询结果
进行分组,可以利用它进行分组汇总 HAVING短语必须跟随GROUP BY使用
,用它来限定分组必须满足的条件 ORDER BY---短语用来对查询结果进
这里的 NOT IN 是不属于运算。
4.2.4 几个特殊的运算符 SQL SELECT 中的特殊运算符有
BETWEEN....AND.... 和LIKE
例4.9 检索出成绩在80到100分之间的选课 信息。(BETWEEN....AND.…例题) SELECT * FROM 选课表 WHERE 成绩 ;
BETWEEN 80 AND 100 结果是:
2004130101 1001 90 2004130101 1002 80 2004130102 1003 85 2004130102 1004 80
BETWEEN … AND … 是 “在 … 和 … 之间”,该查询条件等价于: (成绩 >= 80)AND (成绩 <=100)
(SELECT 学号 FROM 档案表 WHERE ;
家庭住址=’北京’)
结果是:
71.75
4.2.7 分组与计算查询
分组与计算查询的 GROUP BY 短语格
式如下:
GROUP BY 字段名1 [, 字段名2,....]
[HAVING <条件表达式>]
例4.16 求出每门课程的平均分。
SELECT 课程号,AVG(成绩) FROM ;
选课表 GROUP BY 课程号
1001 1002 1003 1004
90.00 65.00 78.50 67.50
该查询首先按课程号进行分组,然 后再计算每个课程的平均分。
GROUP BY子句一般放在WHERE 子句后面,如果没有WHERE子句时, 跟在FROM子句之后。
“.”是关系联接符。
例 4.6 检索出成绩等于80分的学生选修
的课程名和学分。
SELECT 课程名,学分 FROM ;
课程表,选课表 WHERE 成绩=80 ;
AND 选课表.课程号=课程表.课程号
结果是:
计算机基础 2
会计学
4
从上面的例题可以看出,连接条件的两 边带不带括号都是可行的。
4.2.3 嵌套查询 嵌套查询是基于多个关系的查询,这类
例4.14 检索学时数最多的课程名和学分。
SELECT 课程名,MAX(学时数) FROM ;
课程表
结果是:
经济学
100
课程表中有两条满足条件的记录,但只显示满足条件
的第一条。
例4.15 检索出除北京之外的其他学生的平
均分。
SELECT AVG(成绩) FROM 选课表 ;
WHERE 学号 NOT IN;
例 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
,VFP也同样支持SQL。
4.1 SQL 概述 最早的SQL是1986年10月美国ANSI 公布的。随后ISO于1987年6月也正式 采纳它为国际标准,1989年又推出了 SQL98版,1992年又推出了SQL92新标 准版本。 SQL语言具有以下主要特点: (1)SQL是一种结构化的语言,它 包括数据定义、数据查询、数据操纵 和数据控制等方面的功能。 (2) SQL是一种非过程化的语言, 它不需要告诉计算机怎样做,只要用
SELECT [ALL|DISTINCT] [TOP nexpr........] [alias.] select-item[AS column-name] [.............] FROM [FORCE][databasename!] table...........
[[INNER|LEFT[OUTER]|RIGHT[OUTER].... databasename!]table......... ................ [WHERE jioncondition[AND jioncondition.......
例 4.8 检索出成绩小于60分的学生的所有 信息 SELECT * FROM 档案表 WHERE 学号 ;
NOT IN (SELECT 学号 FROM 选课表 ; WHERE 成绩>60) 结果是: 2004140101 李义 男 金融 昆明 2004140102 吴文英 女 金融 2004150102 赵西 男 营销 西安
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
高等数学
1004 会计学
1005 经济学
LIKE 是字符串匹配运算符,通配符“%” 表示0个或多个字符,另外通配符“_”(下
4.2.5 排序 使用SQL SELECT 可以将查询结果排序 ,排序子句是 ORDER BY 。具体格式是: ORDER BY 字段名 [ASC|DESC][,字段名 [ASC|DESC]....] 其中: ASC表示升序,DESC表示降序
行排序
以上短语是学习和理解SQL SELECT命令必须
掌握的,还有一些短语是VFP特有的。
4.2.1 简单查询
首先从几个简单的查询例子来说明
SELECT、FROM 和 WHERE短语的使用方法。
(以下例子均是基于档案表、选课表和课
程表)
档案表
学号
姓名
性别
专业
家庭住址
2004130101 李洪昆

财会
命令中的“*”是多字节通配符,表示
所有字段,这个命令相当于: SELECT 学号,课程号,成绩 FROM 选课表 在数据库中 * 代表多字节通配符,?代
表单字节通配符。 例4.3 检索出成绩大于80分的学号和成绩。 SELECT 学号,成绩 FROM 选课表;
WHERE 成绩>80 结果是:
2004130101 90 2004130102 85 这里的WHERE短语是查询条件,查询条 件条件可以是任意复杂的逻辑表达式。
第五章
关系数据库标准语言SQL
SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能
SQL是结构化查询语言 STRUCTURED QUERY LANGUAGE 的缩 写,可以说查询是SQL的最主要的组成 部分,但并不是它的全部, SQL还包 含数据定义、数据操纵和数据控制功 能等部分。
查询的结果出自一个关系,但相关的条件 却涉及多个关系。
例4.7检索出成绩大于75分的学生的姓名。 SELECT 姓名 FROM 档案表 WHERE ; 学号 IN (SELECT 学号 FROM ; 选课表 WHERE 成绩>80)
结果是: 李洪昆 王倩
可以看到,这个命令中有两个SELECT-FROM-WHERE 查询 语句,即内外层查询块。这里的IN相当于集合运算符 ∈(属于)。
例4.11先按课程号升序排列,再按学分
降序排列检索出选课ห้องสมุดไป่ตู้中的所有信息。
SELECT * FROM 选课表 ORDER BY ;
课程号,成绩 DESC
结果是:
2004130101 1001 90
2004130101 1002 80
‫׃‬
‫׃‬
‫׃‬
2004130102 1004 80
2004150101 1004 55
选课表
课程号 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.4 检索出课程号为“1002”或“1004”, 并且成绩小于75分的学号和成绩。
SELECT 学号,成绩 FROM 选课表; WHERE 成绩<75 AND ; (课程号=’1002’ OR 课程号=’1004’)
结果是: 2004140101 50 2004150101 55
前面的几个例子在FROM之后只指定了一个关系,如 果有WHERE条件子句,系统首先根据指定的条件依次检 验关系中的每个记录,如果没有指定WHERE子句,则不 进行检验,然后选出满足条件的记录。
例4.1 从档案表中查出专业名称。
SELECT 专业 FROM 档案表
结果是:
财会
可以看到查询结果中
财会
有重复值,如果要去
金融
掉重复值,需要指定
金融
DISTINCT 短语:
营销
营销
SELECT DISTINCT 专业 FROM 档案表 结果是:
财会 金融 营销 例 4.2 从选课表中查出所有记录。
例4.13 求出来自“北京”的学生的总 成 绩。 SELECT SUM(成绩) FROM 选课表 ;
WHERE 学号 IN (SELECT 学号 ; FROM 档案表 WHERE ; 家庭住址=’北京’) 结果是:
295
上面的“WHERE 学号 IN”中的IN不能用 “=”代替,否则,屏幕上将出现“子查询 返
例4.9命令还可以写成下面的语句:
SELECT * FROM 选课表 WHERE ; (成绩 >= 80)AND (成绩 <=100)
( LIKE例题)
从课程表中检索出课程名中带有“学”字

课程号和课程名。
SELECT 课程号,课程名 FROM 课程表;
WHERE 课程名 LIKE “%学”
结果是:
SELECT * FROM 选课表 结果是:
2004130101 1001 90 2004130101 1002 80 2004130101 1003 72 2004130102 1003 85 2004130102 1004 80 2004140101 1002 65 2004150101 1004 55
户描述清楚“做什么”就可以了。 (3)SQL语法比较简单,但语言功能
很强,它很接近英语自然语言,因此 容易学习和掌握。
(4)SQL语言可以直接用命令方式交 换使用,也可以嵌入到程序设计语言中 使用,VFP就是这种方式。
SQL的命令动词 参见表4.1
4.2 查 询 功 能 SQL的核心是查询。SQL的查询命令 也称作SELECT命令,它的基本形式由 SELECT FROM WHERE查询模块组成, 多个查询块可以嵌套执行,VFP的 SELECT的语法格式如下:
相关文档
最新文档