(1)关系的性质
每个属性都必须是不可再分的数据项。
每个属性都具有相同的数据类型。
关系中不允许出现相同的属性名。
关系中不允许有完全相同的元组。
关系中元组的次序无关紧要。
关系中属性的次序无关紧要。
(2)关系运算
传统的关系运算:并、交、差、笛卡尔积
专门的关系运算:选择、投影、连接。
选择:从行的角度去选
投影:从列的角度去选
连接:
交叉连接(CROSS JOIN)
:也叫笛卡尔积
语句1:隐式的交叉连接,没有CROSS JOIN。
SELECT O.ID,C.ID
FROM O,C
WHERE O.ID=1;
语句2:显式的交叉连接,使用CROSS JOlN。
SELECT O.ID,C.ID
FROM O CROSS JOIN C
WHERE O.ID=1;
(显式就是有CROSS JOlN,隐式就没有)
外连接(OUTER JOIN)
左外连接(LEFT OUTER JOIN):左外连接还返回左表中不符合连接条件单符合查询条件的数据行。
右外连接(RIGHT OUTER JOIN):右外连接还返回右表中不符合连接条件单符合查询条件的数据行。
全外连接(FULL OUTER JOIN):全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。
内连接
第一种写法:(只使用where)
select t.teacher_name, s.student_name
from teacher t,student s
where t.id = s.teacher_id;
第二种写法:(join … on… )
select t.teacher_name, s.student_name
from teacher t join student s
on t.id = s.teacher_id;
第三种写法:(inner join … on… )
select t.teacher_name, s.student_name
from teacher t inner join student s
on t.id = s.teacher_id;
自连接
自连接,连接的两个表都是同一个表
SELECT a., b. FROM table_1 a,table_1 b WHERE a.[name] = b.[name]
等值连接(相等连接)
关系R、S,取两者笛卡尔积中属性值相等的元组
SELECT XSB.* , CJB.*
FROM XSB , CJB
WHERE XSB.学号 = CJB.学号
使用”=”关系将表连接起来的查询,相等就行,其查询结果中列出被连接表中的所有列,包括其中的重复列。
自然连接
SELECT XSB.* , CJB.课程号, CJB.成绩
FROM XSB natural join CJB
WHERE XSB.学号= CJB.学号
条件:
1、两个表有共同属性(列),还会把重复属性去掉
2、等值连接后去掉重复值
等值连接和自然连接的区别:
等值连接不要求相等属性值的属性名相同**(a.id=b.cid),可以有重复值
自然连接要求相等属性值的属性名必须相同(a.id=b.id)**,不可以有重复值
(3)关系完整性
实体完整性(Entity Integrity)
参照完整性(Referential Integrity)
自定义完整性(User defined Integrity)
实体完整性规则:指关系的主属性不能取空值(NULL),并且不允许两个元组的关键字值相同。(主键不能为空,两个数组的数值不能相同)
参照完整性规则:定义两个关系之间的引用规则。(主键和外键)
用户自定义完整性规则:用户对数据必须满足的语义要求作出规定。(自己定义check约束,年龄必须在多少多少以内)