SQL与关系运算

第九讲 SQL与关系运算

 

  • 回顾加深一下上次课的内容:

    1. 查询的本意:

      • 按照某种特定的条件在数据库(不仅局限于单个数据表)中查到所需要的信息(不仅限于原来表中已经有的记录)。

      • 通过进一步的扩展,增加了一些功能:

      • 查到相应的记录并删除。

      • 从另外的表里查到相应的记录并添加到指定的表中。

      • 建立新的数据表

      •  

    2. 查询提出(提交)的方式

      • 通过标准的查询语言(SQL —— structured quiry language)

      • 通过交互式界面帮助用户建立查询。

        单表查询

            选择窗体浏览特定的字段

            通过条件来控制选择的字段

        多表链结查询

            多表关联的建立

         

    3. 查询呈现的结果 —— 一个视图(View)

       

      • 3.1单表查询 —— 设置条件过滤出所需要的信息(记录)

        A)利用数据浏览窗口进行查询

        B) 通过设计界面建立一个单表查询

        group by,  order by

         

      • 3.2多表查询 —— 将原来分散在多个表中的数据综合起来

       

    4. 几种常用的查询的建立:

      1. 多表关联查询

        • SELECT 个人情况.*, 课程情况.所选课程, 课程情况.任课教师, 课程情况.学分
          FROM 课程情况 INNER JOIN (个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号) ON 课程情况.所选课程 = 学生选课.所选课程
          WHERE (((课程情况.所选课程) Like "*概论*"));

      2. 带运算的查询

        1. 通过分组实现计算

          • SELECT 个人情况.学号, First(个人情况.姓名) AS 姓名之First, Avg(学生选课.成绩) AS 成绩之Avg
            FROM 个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号
            GROUP BY 个人情况.学号
            ORDER BY Avg(学生选课.成绩) DESC;


        2. 在多个字段之间实现计算

          • SELECT First(个人情况.姓名) AS 姓名之First, Avg([学生选课]![成绩]/100*[课程情况]![学分]) AS 表达式1
            FROM 课程情况 INNER JOIN (个人情况 INNER JOIN 学生选课 ON 个人情况.学号 = 学生选课.学号) ON 课程情况.所选课程 = 学生选课.所选课程
            GROUP BY 个人情况.学号;



      3. 自联结查询

        • SELECT 个人情况.姓名, 个人情况_1.姓名, 个人情况_1.籍贯
          FROM 个人情况 INNER JOIN 个人情况 AS 个人情况_1 ON 个人情况.籍贯 = 个人情况_1.籍贯;

      4. SQL视图的用法

        • SELECT 个人情况.姓名, 个人情况_1.姓名, 个人情况_1.籍贯
          FROM 个人情况 INNER JOIN 个人情况 AS 个人情况_1 ON 个人情况.籍贯 = 个人情况_1.籍贯
          WHERE ((个人情况.姓名) <> (个人情况_1.姓名));


 

 

 

 

 

 

 

 

 

 

需要掌握的一些新的内容:

 

1、SQL语句的基本形式:

SELECT语句构成了SQL数据库语言的核心,它的语法包括5个主要子句,分别是FORMWHEREGROUP BYHAVINGORDER BY子句。

SELECT语句的结构是这样的:  

SELECT 〈字段列表〉 FROM 〈表列表〉 [ WHERE〈行选择说明〉][GROUP BY 〈分组说明〉][ HAVING 〈组选择说明〉][ORDER BY 〈排序说明〉];

select语句的结构

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 是这样定义的。

INNER JOINd的定义方式

 

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)    收藏  举报

导航