zoukankan      html  css  js  c++  java
  • SQL复杂查询和视图(2)

    分组查询

    SQL可以将检索到的元组按某一条件进行分组,分组是属性值相同的为一组

    • 求每个学生的平均成绩

    SELECT sn,AVG(score)
    FROM sc
    GROUP BY sn

    image

    先按sn进行分组,即sn相同的为一组,然后求该组中score的平均值。最后输出是按组输出,一个组为一条记录

    分组过滤

    当我们对结果集进行分组后,如果需要对分组进行筛选,只留下我们需要的分组,那就要用到分组过滤。

    分组过滤的关键词是HAVING

    • 求不及格成绩超过两门课的同学学号

    SELECT sn
    FROM sc
    WHERE score < 60
    GROUP BY sn HAVING COUNT(*)>2

    将成绩小于60分的记录按学号进行分组,然后统计每个分组中记录的条数。如果条数大于2则将学号输出。

    • 求有两门以上课程不及格的学生学号和他的平均成绩

    SELECT sn,AVG(score)
    FROM sc
    WHERE sn IN(
        SELECT sn
        FROM sc
        WHERE score<60
        GROUP BY sn HAVING COUNT(*)>2
        )
    GROUP BY sn;

    SQL语言中的并交差


    在关系代数中有集合的并,交,差运算,SQL语言也能实现相应的运算。

    SQL语言;并运算(UNION),交运算(INTERSECTS),差运算(EXCEPT)

    基本语法: 子查询 {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL]} 子查询

    注意:MySQL中只有UNION操作

    当没有ALL时结果集中会删除重复元组,而有ALL则会保留

    image

    • 求学过002号课的同学或者学过003号同学的学号

    SELECT sn FROM sc WHERE cn="003"
    UNION
    SELECT sn FROM sc WHERE cn="002"

    image

    • 求即学过002又学过003课程的同学学号

    SELECT sn FROM sc WHERE cn="002"
    INTERSECTS
    SELECT sn FROM sc WHERE cn="003"

    查询小结

    SELECT语句完整定义(::==表示定义)

    image

    在面向对象/对象关系数据库中SQL将转化为OQL,这个可以作为了解。

  • 相关阅读:
    C#类中的字段、属性和方法
    Linux下制作Windows启动U盘的工具
    将samba共享目录映射为本地文件夹(百度网盘直接下载到samba共享目录下)
    《怎样编写研究报告》读书笔记0-0
    mcnp的重复探测器单元计数-fmesh卡的介绍
    单能X射线产生方法
    matlab学习之降噪平滑算法
    matlab学习之求解函数的根和极小值
    matlab学习之绘制参数曲线,添加辅助线以及颜色设置
    MC资源整理
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5994955.html
Copyright © 2011-2022 走看看