• sql中的并、交、差


    ⑸ 集合运算连接

    有时候,用户希望在SQL查询中利用关系代数中的集合运算(并、交、差)来组合关系,SQL为此提供了相应的运算符:UNION、INTERSECT、EXCEPT(oracle的minus?),分别对应于集合运算的∪、∩、-。它们用于两个查询之间,对每个查询都要用圆括号括起来。对于不同的DBMS,支持的集合运算有所不同,如ACCESS,SQLSERVER都不支持集合的交运算和差运算。

    【例3-40】 查询选修了180101号或180102号课程或二者都选修了的学生学号、课程号和成绩。

    (SELECT  学号, 课程号, 成绩

    FROM   学习

    WHERE   课程号='180101')

      UNION

    (SELECT 学号, 课程号, 成绩

    FROM 学习

    WHERE    课程号='180102')

    输出结果:

    学号

    课程号

    成绩

    090101

    180101

    59

    090101

    180102

    56

    090102

    180101

    70

    090102

    180102

    65

    与SELECT子句不同,UNION运算自动去除重复。因此,在本例中,若只输出学生的学号,则相同的学号只出现一次。如果想保留所有的重复,则必须用UNION ALL代替UNION,且查询结果中出现的重复元组数等于两个集合中出现的重复元组数的和。

    【例3-41】查询同时选修了180101和180102号课程的学生学号、课程号和成绩。

    (SELECT  学号, 课程号, 成绩

    FROM   学习

    WHERE 课程号='180101')

    INTERSECT

    (SELECT 学号, 课程号, 成绩

    FROM 学习

    WHERE 课程号='180102')

    INTERSECT运算自动去除重复,如果想保留所有的重复,必须用INTERSECT ALL代替INTERSECT,结果中出现的重复元组数等于两集合出现的重复元组数里较少的那个。

    或者多次的子查询

    补充:

    1、intersect运算
    返回查询结果中相同的部分既他们的交集

    SQL> select * from abc
      2  intersect
      3  select * from abc2 ;

    2、minus运算
    返回在第一个查询结果中与第二个查询结果不相同的那部分行记录,
    即两个结果的差集

    SQL> select * from abc2
      2  minus
      3  select * from abc ;

    3-42】查询选修了180101号课程的学生中没有选修180102号课程的学生学号、课程号和成绩。

    (SELECT  学号, 课程号, 成绩

    FROM   学习

    WHERE  课程号='180101')

    EXCEPT

    (SELECT 学号, 课程号, 成绩

    FROM 学习

    WHERE   课程号='180102')

    EXCEPT运算自动去除重复,如果想保留所有的重复,必须用EXCEPT ALL代替EXCEPT,结果中出现的重复元组数等于两集合出现的重复元组数之差(前提是差是正值)。

    在不支持INTERSECT和EXCEPT运算的DBMS中,必须使用其它方法实现,其中,嵌套查询是十分有效的一种方法。

  • 相关阅读:
    用JavaScript往DIV动态添加内容
    【转】javascript入门系列演示·三种弹出对话框的用法实例
    ASP.Net:Table类的使用
    vs2010设置 "行号显示"
    HTML相对路径 当前目录、上级目录、根目录、下级目录表示法
    【转】算法基础(二):栈的应用 --- 迷宫解题
    【转】CSS中怎么让DIV居中
    【转】如何让DIV水平和垂直居中
    SQL : 在SQL Server 2008(Or Express)中如何Open并编辑数据表【转】
    SQL2005中设置自动编号字段【转】
  • 原文地址:https://www.cnblogs.com/sumsen/p/2811757.html
Copyright © 2020-2023  润新知