笛卡尔积运算和更名运算上述两个运算是什么,请用例子说明 更名运算是用在哪里的?请不要复制粘贴、、、、

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 01:12:48
笛卡尔积运算和更名运算上述两个运算是什么,请用例子说明   更名运算是用在哪里的?请不要复制粘贴、、、、

笛卡尔积运算和更名运算上述两个运算是什么,请用例子说明 更名运算是用在哪里的?请不要复制粘贴、、、、
笛卡尔积运算和更名运算
上述两个运算是什么,请用例子说明   更名运算是用在哪里的?请不要复制粘贴、、、、

笛卡尔积运算和更名运算上述两个运算是什么,请用例子说明 更名运算是用在哪里的?请不要复制粘贴、、、、
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}.
给定一组域D1,D2,…,Dn,这些域中可以有相同的.D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn={(d1,d2,…,dn)|diDi,i=1,2,…,n}
所有域的所有取值的一个组合不能重复
例 给出三个域:
D1=SUPERVISOR ={ 张清玫,刘逸 }
D2=SPECIALITY={计算机专业,信息专业}
D3=POSTGRADUATE={李勇,刘晨,王敏}
则D1,D2,D3的笛卡尔积为D:
D=D1×D2×D3 =
{(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }
这样就把D1,D2,D3这三个集合中的每个元素加以对应组合,形成庞大的集合群.
更名运算
AD:
3.4 附加的基本运算
SQL中还支持几种附加的基本运算.
3.4.1 更名运算
重新考察我们此前使用过的查询:
select name,course_id
from instructor,teaches
where instructor.ID = teaches.ID;
此查询的结果是一个具有下列属性的关系:
name,course_id
结果中的属性名来自from子句中关系的属性名.
但我们不能总是用这个方法派生名字,其原因有几点:首先,from子句的两个关系中可能存在同名属性,在这种情况下,结果中就会出现重复的属性名;其次,如果我们在select子句中使用算术表达式,那么结果属性就没有名字;再次,尽管如上例所示,属性名可以从基关系导出,但我们也许想要改变结果中的属性名字.因此,SQL提供了一个重命名结果关系中属性的方法.即使用如下形式的as子句:
oldname as newname
as子句既可出现在select子句中,也可出现在from子句中.SQL的早期版本不包括关键字as.其结果是在一些SQL实现中,特别是Oracle中,不允许在from子句中出现关键字as.在Oracle的from子句中,“oldname as newname”被写作“oldname newname”.在select子句中允许使用关键字as来重命名属性,但它是可选项,在Oracle中可以省略.
例如,如果我们想用名字instructor_name来代替属性名name,我们可以重写上述查询如下:
select name as instructor_name,course_id
from instructor,teaches
where instructor.ID= teaches.ID;
as子句在重命名关系时特别有用.重命名关系的一个原因是把一个长的关系名替换成短的,这样在查询的其他地方使用起来就更为方便.为了说明这一点,我们重写查询“对于大学中所有讲授课程的教师,找出他们的姓名以及所讲述的所有课程标识”:
select T.name,S.course_id
from instructor as T,teaches as S
where T.ID = S.ID;
重命名关系的另一个原因是为了适用于需要比较同一个关系中的元组的情况.为此我们需要把一个关系嘴它自身进行笛卡儿积运算,如果不重命名的话,就不可能把一个元组与其他元组区分开来.假设我们希望写出查询:“找出满足下面条件的所有教师的姓名,他们的工资至少比Biology系某一个教师的工资要高”,我们可以写出这样的SQL表达式:
select distinct T.name
from instructor as T,instructor as S
where T.salary> S.salary and S.dept_name = ’Biology’;
注意我们不能使用instructor.salary这样的写法,因为这样并不清楚到底是希望引用哪一个instructor.
在上述查询中,T和S可以被认为是instructor关系的两个拷贝,但更准确地说是被声明为instructor关系的别名,也就是另外的名字.像T和S那样被用来重命名关系的标识符在SQL标准中被称作相关名称(correlation name),但通常也被称作表别名(table alias),或者相关变量(correlation variable),或者元组变量(tuple variable).
注意用文字表达上述查询更好的方式是:“找出满足下面条件的所有教师的姓名,他们比Biology系教师的最低工资要高”.我们早先的表述更符合我们所写的SQL,但后面的表述更直观,事实上它可以直接用SQL来表达.

不告诉你,O(∩_∩)O哈哈哈~