数据库原理与设计:第三章:关系数据模型(完)

第三章:关系数据模型

一、关系模型的数据结构(用关系来表达数据结构)

  • 关系:用于描述数据本身、数据之间联系,俗称‘’表’‘。
  • 表构成:由“列”和“行”。各列构成“关系模式”,各行构成“关系实例”。
  • 列:有时也称“字段”、“属性”、“成员”,表示为 Ai
  • 域:列或属性的取值范围。
  • 关系模式:由关系名、各个列构成。表示为:R(A1, A2,…, An),R 为关系名,Ai为关系 R 的属性
  • 行:有时也称“元组”、“记录”。表示为:t=<a1, a2,…, an>, 其中 ai为对应属性 A < sub>i的值
  • 关系实例:记录集或元组集,简称关系;行序不重要,而列序重要(关系代数中有时用列号来代表列名);每个元组的字段必须对应关系模式中的字段。
  • 关系模式的术语:图片

  • 关系实例表示:{<a1, a2,…, an>},ai为属性 Ai的值。
  • 候选健:能唯一识别关系实例元组的最小字段集。
  • 主键:一个唯一识别关系实例的最小字段集合。一个关系最多有一个主键。
  • 单一的数据结构:关系(二维表)

1无论是实体还是实体间的联系都用关系表示;
2记录:实体->关系都元组
3字段:属性值->元组的分量
4关键字(码):唯一标识一个元组的属性组

  • 关系模式:关系的描述,包括关系名、属性名、属性向域的映象、属性间的依赖。 其中关系的型:关系名;属性的类型、长度等:属性向域的映象。
  • 关系数据库:所有实体及实体间联系的关系的集合,是某时刻所有关系模式对应的关系的集合。*其中:某时刻所有关系模式对应的关系的集合是关系的实例(值)*
  • 关系模式的特性:

关系是一个集合。集合中的元素是元组,每个元组的属性数目应该相同。
关系是一种规范化了的二维表格,不是一般的二维表。 它的性质是:

1关系汇总的每一个属性值都是不可分解的;
2 关系中不允许出现重复的元组;
3关系是元组的集合,因此无行序;
4关系的列是有序的。

  • 小题:
    图片
    解:
    关系模式:职工(职工号,姓名,性别,入职时间,职称,基本工资,资金,补贴,月份);
    候选健:(职工号,月份);
    主键:(职工号,月份)

二、关系模型的完整性约束

  • 数据完整性是指:数据库中存储的数据是有意义的或正确的,也就是和现实世界相符。关系模型中的数据完整性规则是对关系的某种约束条件。
  • RDBMS 必须帮助组织非法数据的输入。要求存入 DB 的数据应满足的条件。当表中数据发生变化(或称更新,包括 Insert、Delete、Update)时,DBMS 即检查更新的数据是否满足 IC 指定的条件。域约束、主键限制、唯一限制、外键限制、一般性限制等用 SQL 的** DDL **子语言可指定这些限制,如果某限制被违背,系统将返回限制名,并用来识别错误。
2.1: 完整性约束三大类
  • 完整性约束三大类:实体完整性、参照完整性、用户定义完整性
2.1.1:实体完整性
  1. 实体完整性:指关系数据库中所有的表都有主键,而且表中不允许存在无主键值或主键值相同的记录。
  • 主键限制:概念:针对主键而言,保证主键的完整性。要求主键值必须唯一,且不能为空值
  • 唯一限制:概念:针对候选健而言,保证候选健的完整性。要求值唯一,允许有一个且仅有一个空值
2.1.2:参考完整性
  1. 参考完整性:也称引用完整性。在关系模型中,实体与实体之间的联系是用关系表示的,这样就自然存在着关系与关系间的引用。
  • 外键:一张表中的某个(组)字段是另一张表中的候选健/主键。
  • 从表:含有外键的表。
  • 主表:指外键在另一张表中作主/候选健的表。
    图片 ***
  • 两个通过外键联系的表的三种操作对完整性的影响:

1.对主表中的主键做操作

  • 插入:要求插入值满足主键限制即可,不影响其他表。
  • 修改:可能会影响与该主键相关的从表的外键值。当外键值存在时,有两个策略可用:一是改变从表的所有外键值,使之与主键一致;二是不允许修改主表中的主键值。
  • 删除:可能会影响与该主键相关的从表的外键值。若相应的外键值存在时,策略有二:一是不允许删除主表的主键值;二是级联删除从表中相应外键值所在的行。
    图片
  1. 对从表中的外键操作
  • 插入:要求插入的外键值应“参照”主表中的主键值。
  • 修改:要求修改的外键值“参照”主表中的主键值。
  • 删除:不需要参照主表中的主键值。
    图片
  • 表间数据的完整性:维护表间完整性实际是从两个方向上完成,即:
  • 对于外键约束,需要从两个方向进行约束
  1. 主表->从表:表示“主表”中的主键值在修改删除时,“从表”中与该主键值相同的外键可“级联”(CASCADE)修改和删除,或“禁止”(NO ACTION)“主表”主键值的修改和删除。
  2. 从表->主表:表示“从表”中的外键值在插入修改时,其中值应“参照”(Reference)“主表”中的主键值。
    图片 * 表间数据参照完整性维护的实现
  3. 利用外键约束定义–对从表定义外键限制(或称参照完整性)完成主表和从表两个方向的数据完整性;
  4. 利用触发器–主表的触发器维护主表到从表的数据完整性,而从表的触发器维护从表到主表方向的参照完整性。
  5. 断言限制:检查表中个别列、整个表或表之间是否满足指定的条件。与多个表有关,是关系间的约束。
//利用外键约束定义
CREATE TABLE ctake
(
  CID char(10) Foreign key references Course(CID),
  SID char(10) Foreign key references stu(SID) on delete cascade on update cascade
)
//利用触发器
CREATE TRIGGER pub_del(
  ON publishers
  FOR DELETE
  AS
      if @@rowcount=0 RETURN
      DELETE titles
      FROM titles t,delete d
      WHERE t.pub_id=d.pub_id
)
  • csdn
2.1.3:用户定义完整性
  1. 用户定义的完整性任何 RDBMS 都应该支持实体完整性和参照完整性,除此之外,不同的数据库应用系统根据其应用环境的不同,往往还需要一些特殊的约束条件,如
  • 某个非主属性不能取空值
  • 某个属性的取值必须在某个范围内
  • 某些属性值之间应满足一定的函数关系等
  • 在用户定义完整性中最常见的限定属性的取值范围,即对值域约束。

  • 完整性约束的实施

    • 关系创建并指定 ICS 后,当关系“更新”时(指插入、删除、修改)应实施检查
    • 对域限制、主键限制和唯一限制对实施

    –由于影响直接,故只要插入/删除/修改/命令违背列限制,即被拒绝。而其它 ICS(如一般性限制)对违背检查通常是在每一个 SQL 语句之后。

    • 对参照完整性(外键)限制对实施

    –外键限制的影响较负载,要从两个方向分别进行,但不是同时进行。

  • 补:关系模型的数据操纵

三、SQL Server 完整性验证

3.1: 定义数据结构
3.1.1–T-SQL 语言
  • 数据库方言:不同的数据库管理厂商开发不同类型的 SQL。
  • T-SQL:即事务 SQL,是对标准 SQL 对拓展。
  • T-SQL: 由 SQL 语句、函数、存储过程三部分组成。
  • T-SQL 除了具有标准的子语言:DDL、DML、DCL、之外,还具有过程控制能力和事务控制能力。
  • T-SQL 的两类变量:
  • 局部变量:@name,@price
  • 全局变量:由系统定义,用户只能引用,不能修改、定义。如@@error,@@rowcount
3.1.2:SQL Server 中表定义及操作基础
  • 例如:图片
CREATE TABLE SUDENT
(
  SNo char(10) primary key,
  SName varchar(20) NOT NULL,
  Major varchar(50) NOT NULL,
  SIDC char(18) Unique, -- 唯一约束
  SAge as datepart(yyyy,GetData())-datepart(yyyy,convert(DateTime,substring(SIDC,7,8)))
)

-- 插入
insert STUDENT value(1001,’李白’,’计算机科学与技术’,510101199901010011)
  1. 表定义
  2. 整型数据类型:四种整型数据类型:BIGINT,INT,SMALLINT,TINYINT。
  • int:默认使用的整型数据类型,默认长度为 4 个字节,32 位,二进制换算最大长度为-2^31~ 2^31-1 。
  • bigint:二进制换算最大长度:-2^63~ 2^63-1 。
  • smallint: 二进制换算最大长度:-2^15~ 2^15-1 。
  • tinyint:二进制换算最大长度:-2^8~ 2^8-1 只有当存储的数据不超过 255 且都是正数时使用。
  1. 浮点数据类型:包括 decimal,float,real。三种
  • decimal:语法:decimal(p,s),p:是数字的精度范围 1~38,s:表示数字的小数位数在 0~p 之间。
  • real:可精确到第 7 位小数,范围为:-3.40E-38~ 3.40E38
  • float:可精确到第 15 位小数,占用 8 个字节其范围为:-1.79E-308~ 1.79E308
  1. 字符数据类型:可以用来存储各种字母、数字、符号组成的字符串。数据必须要用单引号,否则错误。有 char,varchar,text,nchar,nvarchar,ntext。前三种是非 Unicode 字符数据,后三种是 Unicode 字符数据。
  • char:是固定长度的字符串,不足时用空格补足,长度 0-255;比如 char(10),如果实际数据“321”,会自动补 17 个空格。
  • varchar:是可变长度字符串,不足时不补空格,超过时会自动阶段性,长度 0-255 。
  • text:存放最大长度为 65535 个字符的字符串。
  1. 日期和时间数据类型:用于存储日期和时间数据。
  • datetime:用于存储日期和时间的结合体。格式:YYYY-MM-DD hh:mm:ss:[.nnn], 范围 1753-01-01 到 9999-12-31,精度:0.00333 秒,存储 8 个字节;
  • samlldatetime:格式:YYYY-MM-DD hh:mm:ss,范围:1900-01-01 到 2079-06-06,精度:1 分钟,存储 4 个字节;
  • date:格式 YYYY-MM-DD,0001-01-01 到 9999-12-31,精度:1 天,存储占 3 个字节
  • time:格式:hh:mm:ss[.nnnnnnn], 范围:00:00:00.0000000 到 23:59:59.9999999, 精度:100 纳秒,存储占 3-5 个字节。
  1. 货币数据类型:用于存储货币或现金值,包括 money 型和 smallmoney 型。应加上货币符号来分辨哪国货币,默认¥。
  • smallmoney:货币数据值介于-231~231-1,其精度为 10,小数位数为 4,长度为 4 字节。
  • money:数据类型的数范围为-263~263-1,其精度为 19,小数位数为 4,长度为 8 字节。
  1. 位数据类型:bit 称为位数据类型,自取 0 或 1 为值,长度 1 字节。bit 值常用来作 true 或 false,输入非 0 值时系统会将其替换为 1 。
create tabble stu
(
  SID char(10) primary key,
  SName varchar(20) NOT NULL,
  SGender char(1) check(SGender in (‘F’,’M’)),
  SAge tiny int NOT NULL
)

create table Course
(
  CID char(10) primary key,
  CName varchar(20) 
)

  1. 操作基础
  • 向表中插入数据

insert stu value(‘202020120’,’赛高’,‘F’,20)

  • 查询表中的数据

select* from stu

  • 补充 1:图片
/*用身份证号导出年龄*/
Age as Datepart(yyyy,GetDate())-Datepart(yyyy,Convert(Datetime,SubString(EIDCard,7,8)))

  • 补充 2: 常用的字符串处理函数:图片

3.2:完整性验证
3.2.1:默认值(default)
  • 默认值:用于为列或用户自定义数据类型指定缺省值,每一列或自定义类型只能有一个缺省值。
  • 当用户没有给指点有默认值当列输入数据时,RDBMS自动用该默认值代替。
create table publishers
(
  pubid char(4) not null,
  pubname varchar(40) null,
  city varchar(20) default ‘pasadena’,
  state char(2) default’CA’
)
  • 默认值的验证

利用两条SQL语句来验证默认的作用与效果
select * from publishers
insert pubilshers(pubid,pubname) values(‘0003’,’EST’)
生成的:图片

  • 用独立的命令来创建default
  • 当多个表中的列,他们的缺省值相同时,很好用
  1. 首先, create default 缺省名 as 缺省值
  2. 然后sp_bindefault ‘默认名’,‘表名.列明’,将该默认名绑定到表中某个列上
  • 默认值的约束的删除----取消某列的缺省
  1. 首先取消绑定:sp_unbindefault ‘表名.列名’
  2. 然后删除缺省:drop default 缺省名
3.2.2:规则(rule)
  • 概念:针对表中的某一列,指明该列的取值范围。在更新该列值时,RDBMS首先要检查是否在该规则规定的范围内。
  • 设定规则
  1. create rule 规则名 as 规则
  2. sp_bindrule 规则名 , ‘表名.列名’
  create rule mark_rule as @mark between 0and 100
  sp_bindrule mark_rule,’Ctake.mark’
  • 规则可用in(…),between …,and…;关系式<,>,<=,>=,<>,=和like操作符描述。
  • 创建规则时,应注意as后有一个以@开头的临时变量。
  • 规则的验证

insert Ctake value(‘bk1001’,’asd’,1000)
insert Ctake value(‘bk1001’,’asd’,10)

  • 解除规则绑定:sp_unbindrule ‘表名.列名’:sp_bindrule’Ctake.mark’
  • 解除规则:drop rule 规则名:drop rule mark_rule
  • 规则和默认值的扩展用法:图片
3.2.3:检查约束(check constraint)
  • 概念:类似于规则,要求用户插入到列或表中的数据满足限制条件
  • 分为列级检查(针对表中一列)和表级检查(针对同一表中多列)。列级检查限制用in,between,and,like表达
  • 例如
  create table publishers/*列级检查*/
  (
    pubid char(4) not null 
    constraint pubid_constraint 
    check (pubid in(234,3333,444) or pubid like43[0-9][0-9]),
    city varchar(20) null,
    state char(2) null
  )
  • 图片

  • 表级检查限制
  create table stu
  (
    lowqty smallint null,
    highqty smallint null,
    discount float not null,
    CONSTRAINT low_high_check
    CHECK (lowqty<=highly)
  )
  • 列级检查限制可用表级方式写

表级限制也能用列级方式写,但要求在第一列定义后。
缺省值须满足检查限制要求

  • 检查约束和规则都可以对一个表中的列的值进行约束

例如:创建一个雇员关系。要求部门编号的值必须在10-100之间内,雇员的职务之能为:‘sales‘,’mgr‘,’clerk‘。下面用检查约束和规则进行创建表

  /*下面时通过两种方法完成同一功能*/
  /*检查约束*/
  create table emp
  (
    id smallint not null,
    name varchar(9),
    dept smallint 
    CONSTRAINT dept_constraint
    CHECK(dept between 10 and 100),
    job char(5)
    CONSTRAINT job_cons
    CHECK(job IN(‘Sales’,’Mgr’,’Clerk’))
  )
  
  /* 规则*/
  create table emp/*检查约束*/
  (
    id smallint not null,
    name varchar(9),
    dept smallint, 
    job char(5)
  )
  create rule dept_rule as@dept between 10 and 100 
  sp_bindrule dept_rule,’emp.dept’
  
  create rule job_rule as@job in(‘Sales’,’Mgr’,’Clerk’)
  sp_bindrule job_rule,’emp.job’
3.2.4:主键约束(primary key)
  • 主键不能出现空值,且所有的值都是唯一的。在定义了主键限制后,系统自动为该表生成一个聚簇(Clustered)索引
  • 定义方式:列级检查和表级检查
  • 表级主键约束:primary key(id)定义在表中后面
  • 列级主键约束:id smalint primary key 定义在数据类型后
3.2.5:唯一约束(Unique)
  • unique:主要是针对候选健的限制。在定义了唯一限制后,系统自动为该表生成一个非聚簇索引。用户在定义是也可改成聚簇索引。
  • unique与primary key的区别:所有值唯一,最多只能有一个空值。默认索引为非聚簇(NonClustered)索引。
  • 分为列级检查和表级检查。
3.2.6:外键约束(Foreign Key)
  • 维护表间完整性从下面两个方向上完成的。
    图片

  • 外键约束定义的条件:
  • 在从表上定义。
  • 定义外键限制的列必须是从另一个表中的主键或候选健。
  • 外键限制分类:列级(针对表中一列)和表级(针对表中多列)
  • 外键约束定义中的行动,表示当对主表的主键值做某种操作(删除或修改时),可采取下面两张策略:
  • cascade(针对从表的策略)
  • no action (针对主表的策略)
  • 若不定义行动,缺省处理为no action
3.2.7:触发器(Trigger)
  • 利用主表和从表的触发器,也可以保持主从表数据完整一致性。
  • 比如:在publishers表中的主键是pubid,它出现在了titles表中,那么在titles表中的pubid是外键。也就是说,publishers为主表,而titles为从表。想要维护两表间的完整性,可对titles用外键限制或参照限制来维护他们间的完整性,或用触发器来维护
  • 触发器的创建:
  create trigger 触发器名 on 表名
  /*for update,insert最多只能列三个*/
  for {insert|update|delete}[,{insert|update|delete}]...
  /*用户编写一段SQL语句,要求该触发器被触发后应做的事情*/
  as SQL语句组 return
  • 触发器不带参数,不被用户和程序调用,只能由用户对DB中的表进行操作时触发(操作激发)
  • 一个表中最多有三个触发器,即插入、修改、删除,分别对应各自的操作,例如:插入操作出发“插入”触发器。
  • 主表和从表应该分别建立各自的触发器,主表的触发器维护主表->到从表方向的数据完整性;从表的触发器维护从表->主表方向的参照完整性。这里,主表和从表不需要定义外键,但必须有共同的列。
  • 系统为触发器提供两张表:即inserted和deleted。当操作为插入时,则新数据也会写入inserted表中;当操作为删除时,删除数据会先保存到deleted表中;而当操作为修改时,会同时用到这两张表,先删后写。
/*由删除操作激发的主表触发器*/
  create trigger pub_del
    on publishers
    for delete
    as
      if @@rowcount=0 return
      delete titles
      form titles t,deleted d
      where t.pubid=d.pubid
    return
/*由修改操作激发的主表触发器*/
  create trigger pub_updete
    on publishers
    after update
    as
      if @@rowcount=0 return
      if update(pub_id)
      begin
        update titles set pubid = i.pubid from titles t,
        deleted d,inserted l where t.pubid=d.pubid
      end
    return
/*由修改和插入操作激发的从表触发器*/
  create trigger tittle_iu
    on titles
    for insert,update
    as
      if @@rowcount=0 return
      if (select count(*)form publishers p,insert i where p.pubid = i.pubid )=0
    begin
      raiserror 53334 ‘试图插入或修改非法的pubid值’
      rollback transaction
    return
    end
  return       
  • 查看触发器的创建过程:
  • sp_helptext 触发器名
  • 查看表依赖的触发器或触发器涉及的表
  • sp_sepends 表名或触发器名
  • 删除触发器:
  • drop trigger 触发器名
  • 注意
  • 不能对视图和临时表创建触发器
  • 如果建立触发器的表被删除,其上的触发器将被自动删除
  • 小结:图片
题目
    1. 选课表ctake(SID,CID,Grade),Grade定义check检查0-100,定义主键和外键约束
  create table ctake
  (
    SID char(10) foreign key references Student(SID),
    CID char(10) foreign key references Course(CID),
    Grade tinyint check(grade between 1 and 100),
    primary key(SID,CID)
  )
  
    1. 员工表employee(ENo,EName,Entry,EGender,DNo),
  create table employee
  (
    ENo char(10) primary key,
    EName varchar(20) not null,
    EntryDate datetime,
    EGender char(2) check(EGender in (‘男’,’女’)),
    DNo char(10) foreign key reference Depart(DNo)
  )

四、实体联系模型向关系模型的转换

4.1:实体转换方法
  • 一个实体型转换为一个关系模式
  • 关系名:实体名
  • 关系的属性:实体型的属性
  • 关系的主键:实体型的标识符
    图片
  • 复合属性的转化规则

图片

  • 多值属性的转换:多值属性转换成带有外键的单独表

图片

4.2:二元联系的转换方法
  • 一个m:n联系转换为一个关系模式
  • 关系的属性:与该联系相连的各实体的标识符以及联系本身的属性
  • 关系的主键:各实体标识符的组合
    图片
  • 转换实例:图片
  create table student
  (
    Sno char(10) primary key,
    Sname varchar(20) not null,
    Ssex char(2) check(Ssex in(‘男’,’女’)) 
  )
  create table course
  (
    Con char(10) primary key,
    Cname varchar(20) not null,
    Ccredit smallint not null
  )
  create table ctake
  ( 
    Sno char(10) foreign key references student(Sno),
    Cno char(10) foreign key references course(Cno),
    mark smallint not null,
    primary key(Sno,Cno)
  )

  • 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
  1. 转换为一个独立的关系模式
  • 关系的属性:与该联系相连的各实体的标识符以及联系本身的属性
  • 关系的主键:n端实体的标识符
    图片
  1. 与n端对应的关系模式合并
  • 合并后关系的属性:在n端关系中加入1端关系的主键和联系本身的属性
  • 合并后关系的主键:不变
    图片
  • 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并
  1. 转换为一个独立的关系模式
    关系的属性:与该联系相连的各实体的标识符以及联系本身的属性
    关系的候选健:每个实体的标识符均是该关系的候选健
  2. 与某一端对应的关系模式合并
    合并后关系的属性:加入对应关系的主键和联系本身的属性
    合并后关系的主键:不变
    图片
4.3:多元联系的转换方法
  • 三个或三个以上实体间的一个多元联系转换为一个关系模式
  • 关系的属性:与该联系相连的各实体的标识符以及联系本身的属性
  • 关系的主键:各实体标识符的组合
    图片
4.4:一元联系的转换方法
  • 同一实体集的实体间的联系,即自联系,也可按二元联系中的情况分别处理
  • 例如:如果教师实体集内部存在领导与被领导的1:n自联系,我们可以将该联系与教师实体合并,这时主码职工号将多次出现,但作用不同,可用不同的属性名加以区分:
    图片
4.5:ERM向关系模式转换小结

图片


五、关系代数

5.1:基本操作符
5.1.1:选择(Selection)
  • 选择:从关系实例中选择出满足条件的行,相当于关系做横向剪切
  • 操作符:$ \sigma_c® $
    图片
    图片

5.1.2:投影(Projection)
  • 投影:从关系实例中选择出满足条件的一列或多列,相当于对关系纵向剪切。
  • 操作符:πattribute list®
  • 注意:对关系代数和关系运算,结果中有重复的元组,将去掉重复元组当在DBMS中去掉重复元组开销大,所以不会去掉

语句:select distinct grade from S2


  • 选择与投影结合
    图片

  • 练习:检索物联网-1班的男生
  • 关系代数的标识:
    图片
  • 对应的SQL语句:
    图片
5.1.3:集合并与交
  • 并:前提是关系模式要兼容

select * from S1 union
select * from S2

  • 交:前提是关系模式要兼容

select * from S1 intersect
select * S2

5.1.4:集合差
  • R-S:从R中把与S相同的元组减去, 前提是关系模式要兼容

select * from S1 except
select * from S2

5.1.5:笛卡尔积
  • Cross-Product:RxS:二元关系操作符
  • 笛卡尔积的结果:包含R和S的所有列。如果R中有M个属性p个元组,S中有N个属性q个元组,则RxS的结果关系有M+N个属性(列),pxq个元组
  • 相应的SQL语句:
    select S.sid,name,age,grade,R.sid,cid,score FROM S,E
    注意**S和R中都有sid,所以要采用“表名.列名”**的方式
  • 图示
    图片
  • 例如:学生表S1和选课表E的笛卡尔积
    图片

5.1.6:select-from-where与关系代数
  • 例如:关于表如图所示
    图片
  1. 读取from子句中表的数据,做笛卡尔积
  2. 选择满足where子句中条件的纪录
  3. 按select子句中指定的属性输出
  • 逻辑式:图片
  • SQL语句:
    select S1.sid,sname,E.cid,score
    from S1,E,
    where S1.sid=E.sid
5.2:扩展操作符
5.2.1:改名
  • 为了避免RxS产生的名字冲突,引入改名操作
  • 图片
  • F的形式:旧名->新名,或位置->新名
  • 可以利用改名操作,将中间结果放在一个新关系中,此时,S中没有属性名冲突,则F可省略,只写成p(R,S)
  • 例如:图片
    图片

5.2.2:除操作
  • 直接上图示:图片

  • 例如1:查询在TU Darm工作的所有教师信息
    图片

  • 例如2:图片

5.2.3:联结(join)
  • 由于笛卡尔积开销大,引入联结
  • 种类:条件联结,等联结,自然联结,外联结。
  1. 条件联结(Condition Joins)

    • 定义:对两个关系进行有条件的联结
    • 图片
    • 组合条件式C:<条件1>AND<条件2>AND<条件3>AND…
    • 看不懂?直接上图
      图片

    相应的SQL查询描述:
    select S1.sid,sname,age,grade,E.sid,cid,score
    from S1 cross join E
    where S1.sid > E.sid
    或者
    select S1.sid,sname,age,grade,E.sid,cid,score
    from S1,E
    where S1.sid > E.sid

  2. 等联结
    图片

  3. 自然联结

    • 自然联结式等联结的特例,即:当等式中所涉及的字段名也相同时,可省略联结条件,即为:图片
    • SQL语句:

    select S1.sid,sname,age,grade,cid,score
    from S1 natural join E

  4. 外联结

    • 外联结是自然联结的特例,设计有空值的自然联结
    • 分为左外联结,右外联结,全外联结
    • 图片

    左外联结:
    图片

    右外联结:
    图片

    全外联结
    图片

5.3:关系代数式的写法
  • 书写关系代数式的三部曲
  1. 确定最后结果中所要的属性
  2. 确定该查询涉及几个关系
  3. 制定查询思路
  • 题目自己练

本章小结

图片

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

it小白666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值