欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLServer中的除运算实例学习

程序员文章站 2022-08-10 20:26:18
sql server中的运算有并,交,差,笛卡尔积,除运算,其中笛卡尔积是最费时间的。除运算个人感觉是最难理解的,所以,花了点时间整理以下除运算方便以后查。 例如,有以下r表,s表,t表 当我们计...

sql server中的运算有并,交,差,笛卡尔积,除运算,其中笛卡尔积是最费时间的。除运算个人感觉是最难理解的,所以,花了点时间整理以下除运算方便以后查。

例如,有以下r表,s表,t表

SQLServer中的除运算实例学习

当我们计算r除以t时:(不区分大小写)

先找出r表中和t表相同的属性,这里是b和c。

也就是说r表中的其他属性a可以取值为{a,b,c}

其中, a的象集为{(b,c),(d,e)},b的象集为{(b,c),(d,e)},c的象集为{(a,b)}

而t在b和c上的投影为s{(b,c),(d,e)},这时候,我们在步骤三中找一个象集是包含s集合的,即a,b的象集包含了t在b,c

属性组上的投影,所以r&pide;t={a,b}。

即结果为:

a
a
b

通过分析结果,我们不难发现其实,除运算就是要我们找到这样的一个集合s,使得s中所有属性及其值:

1)是包含所有在r中但不能包含在t中的属性和值。

2)s中所有元组和t的笛卡尔积,形成的所有组合都要在r中。

在我们实际中,大多数情况是用在出现这种字眼的查询:都,全部,至少等等。

例如:

1)查询选修了所有课程的学生的学号:∏学号,课程号(成绩表)&pide; ∏课程号(课程表 )

2)查询至少用了供应商s1所供应的全部零件的工程号jno:

  ∏jno,零件号 ( 零件供应商表)&pide;∏零件号(σ供应商号=’s1’ (零件供应商表) )

sql语句的表示通常是用not exists表示,且not exist还嵌套另一not exists语句。

如:1)查询选修了所有课程的学生的学号:∏学号,课程号(成绩表)&pide; ∏课程号(课程表 )

select 学号 from 成绩表 a where not exists(
  select 课程号 from 课程表 c where not exists(
    select *from 成绩表 b where a.学号=b.学号 and c.课程号=b.课程号
  )
)