SQLServer中的除运算实例学习
程序员文章站
2022-08-10 20:26:18
sql server中的运算有并,交,差,笛卡尔积,除运算,其中笛卡尔积是最费时间的。除运算个人感觉是最难理解的,所以,花了点时间整理以下除运算方便以后查。
例如,有以下r表,s表,t表
当我们计...
sql server中的运算有并,交,差,笛卡尔积,除运算,其中笛卡尔积是最费时间的。除运算个人感觉是最难理解的,所以,花了点时间整理以下除运算方便以后查。
例如,有以下r表,s表,t表
当我们计算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.课程号 ) )
下一篇: 毛呢大衣什么牌子好?毛呢大衣十大品牌推荐