第7讲 -SQL语言关系代数实现

(1)SQL语言集合运算,并UNION,交INTERSECT,差EXCEPT

基本语法:     子查询1{Union [ALL]|Intersect [ALL]|Except [ALL] 子查询2}

通常下,删除重复元组不带ALL,若要保留重复元素就要带ALL

子查询1的一个元组出现m次,子查询2的一个元组出现n次在,在结果中:

     1)子查询1 Union ALL 子查询2 出现m+n次

     2)子查询1 Intersect ALL 子查询2 出现min(m,n)次

     3)子查询1 Except 子查询2 结果出现了max(0,m-n)次

例:查询既学过002号课程同学又学过003号课程的同学的学号

select S# From SC where C#='002'
Union
select S# From SC where C#='003';

上卖弄查询等价于:

select S# From SC where C#='002' or C#='003';

 例:求既学过002号课程,又学过003号课程的同学学号

select S# From SC where C#='002'
Intersect
select S# From SC where C#='003';

上面等价于:

select S# From SC where C#='002'
where S# in (
         select S# From SC where C#='003');

例:假设所有同学都有选课,求没学过002号课程的同学的学号

select S# From SC
Except
select S# From SC where C#='002';

(2)SQL语言对空值的处理

         空值检测:  is [not] null

 例:找出年龄值为空的同学的姓名

select Sname From student 
where Sage is null;

 DBMS对空值的处理:

    1)除了 is [not] null 外,空值不满足任何查找条件

    2) 如果null 参与了聚集函数的运算。除了count(*)之外,其他的聚集函数将会忽略 null.

(3)SQL语言的连接操作

     语法: select 列名[...]

               From 表1 [NATURAL]

               [INNER]|{LEFT|RIGHT|FULL}[outer] JOIN {ON 连接条件|Using (clo1,clo2,...) }

4种连接类型:

    inner join  内连接

    Left outer jion 左外连接

    Right outer jion 右外连接

    FULL outer join  外连接

3中连接条件:

      natual 自然连接

      on 连接条件

      using <clo1,clo2,..>

1) inner join :关系代数中的Theta连接运算

2)表1 Left outer join 表2 :则表1的任何元组t都会出现在结果中。如果表2有满足连接条件的元组s,则t与s连接,否则t与空值连接

3)表1 Rightouter join 表2 :则表2的任何元组t都会出现在结果中。如果表1有满足连接条件的元组s,则t与s连接,否则t与空值连接

4)表1 Full outer join 表2 :表示左外右外连接的并

natual连接条件:出现在结果关系的两个连接关系的元组在公共的属性上值相等,且公共属性在结果中只出现一次。

on 连接:出现在结果关系的两个连接关系的元组取值满足连接条件,且公共属性在结果中出现2次

using 连接:两个表的元组在属性<clo1,clo2,..>上取值相等,这些公共属性在结果中只出现一次。

例:找出所有教师的教师号以及授课情况,并按照教师号从小到大排序

select Teacher.T#,Cname
From Teacher inner join Course
on Teacher.T#=Course.T#
order by Teacher.T# ASC;

  


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值