SQL与关系运算
第九讲 SQL与关系运算
-
回顾加深一下上次课的内容:
-
查询的本意:
-
按照某种特定的条件在数据库(不仅局限于单个数据表)中查到所需要的信息(不仅限于原来表中已经有的记录)。
-
通过进一步的扩展,增加了一些功能:
-
查到相应的记录并删除。
-
从另外的表里查到相应的记录并添加到指定的表中。
-
建立新的数据表
-
-
-
查询提出(提交)的方式
-
通过标准的查询语言(SQL —— structured quiry language)
-
通过交互式界面帮助用户建立查询。
单表查询
选择窗体浏览特定的字段
通过条件来控制选择的字段
多表链结查询
多表关联的建立
-
- 查询呈现的结果 —— 一个视图(View)
-
3.1单表查询 —— 设置条件过滤出所需要的信息(记录)
A)利用数据浏览窗口进行查询
B) 通过设计界面建立一个单表查询
group by, order by
-
3.2多表查询 —— 将原来分散在多个表中的数据综合起来
-
-
几种常用的查询的建立:
-
多表关联查询
-
-
SELECT 个人情况.*, 课程情况.所选课程, 课程情况.任课教师, 课程情况.学分
FROM 课程情况 INNER JOIN (个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号) ON 课程情况.所选课程 = 学生选课.所选课程
WHERE (((课程情况.所选课程) Like "*概论*"));
-
-
带运算的查询
-
通过分组实现计算
-
-
SELECT 个人情况.学号, First(个人情况.姓名) AS 姓名之First, Avg(学生选课.成绩) AS 成绩之Avg
FROM 个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号
GROUP BY 个人情况.学号
ORDER BY Avg(学生选课.成绩) DESC; -
-
-
在多个字段之间实现计算
-
-
-
SELECT First(个人情况.姓名) AS 姓名之First, Avg([学生选课]![成绩]/100*[课程情况]![学分]) AS 表达式1
FROM 课程情况 INNER JOIN (个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号) ON 课程情况.所选课程 = 学生选课.所选课程
GROUP BY 个人情况.学号; -
-
-
-
自联结查询
-
-
-
SELECT 个人情况.姓名, 个人情况_1.姓名, 个人情况_1.籍贯
FROM 个人情况 INNER JOIN 个人情况 AS 个人情况_1 ON 个人情况.籍贯 = 个人情况_1.籍贯;
-
-
SQL视图的用法
-
SELECT 个人情况.姓名, 个人情况_1.姓名, 个人情况_1.籍贯
FROM 个人情况 INNER JOIN 个人情况 AS 个人情况_1 ON 个人情况.籍贯 = 个人情况_1.籍贯
WHERE ((个人情况.姓名) <> (个人情况_1.姓名)); -
-
-
-
-
需要掌握的一些新的内容:
1、SQL语句的基本形式:
SELECT语句构成了SQL数据库语言的核心,它的语法包括5个主要子句,分别是FORM、WHERE、GROUP BY、HAVING、ORDER BY子句。
SELECT语句的结构是这样的:
SELECT 〈字段列表〉 FROM 〈表列表〉 [ WHERE〈行选择说明〉][GROUP BY 〈分组说明〉][ HAVING 〈组选择说明〉][ORDER BY 〈排序说明〉];
SELECT 个人情况.学号, Avg(学生选课.成绩) AS 成绩之Avg
FROM 个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号
WHERE (((个人情况.姓名)="丁一" Or (个人情况.姓名)="胡玉梅"))
GROUP BY 个人情况.学号
HAVING (((Avg(学生选课.成绩))>85))
ORDER BY Avg(学生选课.成绩) DESC;
2、多表关联查询
在SQL中,很多威力都来自于将几个表或查询中的信息联接起来,并将结果显示为单个逻辑记录集的能力。在这种联接中包括INNER、LEFT、RIGHT这三种JOIN操作。
首先我们来讲讲INNER JOIN 的用法:INNER JOIN 语句可以用来组合两个表中的记录,只要在公共字段之中有相符的值即可,在语法上,INNER JOIN 是这样定义的。
SELECT 选计算概论.姓名, 选计算概论.所选课程, 选高等数学.所选课程
FROM 选计算概论 INNER JOIN 选高等数学 ON 选计算概论.姓名 = 选高等数学.姓名;
3、关系运算与 JOIN:(LEFT JION, RIGHT JION)
SELECT 选计算概论.姓名, 选计算概论.所选课程, 选高等数学.所选课程
FROM 选计算概论 LEFT JOIN 选高等数学 ON 选计算概论.姓名 = 选高等数学.姓名
WHERE (((选高等数学.所选课程) Is Null));
4、JOIN 的 本意就是在两个表之间的两个类型项同的字段之间进行关系运算
4.1 关系的全联结 —— FULL JOIN
4.2 联结字段之间关系运算的类型 =, >, <, <>,<=,>=
SELECT 绩点平均.姓名之First, Count(绩点平均_1.姓名之First) AS 姓名之First之Count
FROM 绩点平均 INNER JOIN 绩点平均 AS 绩点平均_1 ON 绩点平均.表达式1 <= 绩点平均_1.表达式1
GROUP BY 绩点平均.姓名之First
ORDER BY Count(绩点平均_1.姓名之First);
5、TOP、 DISTINCT
SELECT TOP 10 First(个人情况.姓名) AS 姓名之First, Avg([学生选课]![成绩]/100*[课程情况]![学分]) AS 表达式1
FROM 课程情况 INNER JOIN (个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号) ON 课程情况.所选课程 = 学生选课.所选课程
GROUP BY 个人情况.学号;
SELECT DISTINCT 选课资料.课程编号
FROM 选课资料;
6、查询的应用
6.1 作为表项的来源
通过一个查询来控制表项的输入选择。
6.2 作为虚拟的表
将整合后的结果形成视图,可以加入关系、加入新的查询
6.3 作为窗体的数据源
总结一下数据库部分的主要内容:
1、数据库系统是对特定组织形式的数据提供管理的软件系统。
一般提供数据的存储、按名访问、数据的安全性等方面的服务。
2、关系数据库提供对数据间的关系进行描述与运算的支持。其基本接口方式是SQL语言。
3、SQL本质上是关系代数的一个映射。是数据通过关系进行自我衍生的阶梯。
4、数据库不能产生其原本没有的信息。
posted on 2005-04-14 16:24 基于.NET·在线英语考试系统开发 阅读(1882) 评论(0) 收藏 举报