120 likes | 360 Views
数据库原理与 SQL Server. 第 13 课 关系运算 ( 二 ). 第 12 课 关系运算 —— 关系代数表达式. 目标: 了解关系代数表达式 掌握用关系代数表达式表示查询 从关系运算的角度理解查询语句. 5.3 数据库原理 — 关系运算. RDBMS :采用关系模型的 DBMS 关系运算: RDBMS 的数学基础 内容: 5.3.1 关系模型 5.3.2 关系代数. 关系的数学定义 关系的性质. 传统的集合运算 专门的关系运算 关系代数表达式. 关系代数表达式. 关系代数表达式:关系运算有限次组成,表示查询 运算对象:关系
E N D
数据库原理与SQL Server 第13课 关系运算(二)
第12课 关系运算——关系代数表达式 目标: • 了解关系代数表达式 • 掌握用关系代数表达式表示查询 • 从关系运算的角度理解查询语句
5.3 数据库原理—关系运算 RDBMS:采用关系模型的DBMS 关系运算:RDBMS的数学基础 内容:5.3.1 关系模型 5.3.2 关系代数 关系的数学定义 关系的性质 传统的集合运算 专门的关系运算 关系代数表达式
关系代数表达式 关系代数表达式:关系运算有限次组成,表示查询 运算对象:关系 运算结果:关系 集合运算符: 关系运算符: 辅助运算符 行 行、列 (∪、∩、 –、) (σ、π、⋈ 、÷) 运算符 比较运算符: 逻辑运算符: >、≥、<、≤、=、≠ ㄱ、∧、∨
实例1 对关系:s(sno,sname,sex)、c(cno,cname)、sc(sno,cno,score), 用关系代数表达式表示查询,并写出相应的T-SQL语句 选修课程编号为c001的课程的学生的学号 关系代数表达式: πsno( ) σ (sc) cno='c001' T-SQL语句: SELECT sno FROM sc WHERE cno='c001'
实例2 未选修课程编号为c001的课程的学生的学号 关系代数表达式: SC SNO CNO S SNO 不能写成 πsno(σcno='c001' (sc)) 1001 c001 1001 c002 1002 c002 1001 1002 考虑: 未选修=所有–选修 – πsno(sc) πsno(σcno='c001' (sc)) T-SQL语句: SELECT sno FROM s (SELECT sno FROM sc WHERE cno='c001') WHERE sno NOT IN 单字段用not in 否则用not exists 或 SELECT sno FROM s WHERE NOT EXISTS (SELECT * FROM sc WHERE sc.sno=s.sno AND cno='c001')
实例3 选修“数据库应用”课程的学生的学号 关系代数表达式: πsno( ) (σcname='数据库应用'(sc ) ⋈ c T-SQL语句: SELECT sc.sno FROM sc,c WHERE sc.cno=c.cno AND cname='数据库应用' 或 SELECT sc.sno FROM sc INNER JOIN c ON WHERE sc.cno=c.cno WHERE cname='数据库应用'
实例4 选修“数据库应用”课程的学生的学号和姓名 关系代数表达式: πsno,sname( ) (σcname='数据库应用'(sc ⋈ c ) ⋈ s 注意 ●3个关系的联接顺序 T-SQL语句: SELECT sc.sno,sname FROM s,c,sc WHERE sc.sno=s.sno AND sc.cno=c.cno AND cname='数据库应用'
实例5 选修了所有课程的学生的学号 sc c sno cno R1 → R2 → X→ Y→ s sno c cno 关系代数表达式: 所有→除 1001 ⋮ c001 c002 ⋮ R1(X,Y)÷R2(Y,Z)=R3(X) πsno,cno(sc) ÷ πcno(c) T-SQL语句: 选修了所有课程的学生 → 学生没有一门课程没有选 SELECT sno FROM s cno FROM c WHERE NOT EXISTS SELECT * FROM c s WHERE NOT EXISTS ( ( )) SELECT * FROM sc WHERE sc.sno=s.sno AND sc.cno=c.cno 注意该类语句的格式 ,如所有学生都选的课程
实例6 至少选修两门课程的学生的学号 sc sno cno score 1001 c001 ⋯ 1001 c002 ⋯ 1003 c001 ⋯ 关系代数表达式: π1( ) σ (scsc) 1=4∧2≠5 或 π1(σ2≠5(sc ⋈ sc)) scsc 1 2 4 5 1=1 1001 c001 1001 c001 1001 c001 1001 c002 1001 c001 1003 c001 T-SQL语句: SELECT DISTINCT sc1.sno FROM sc AS sc1,sc AS sc2 WHERE sc1.sno=sc2.sno AND sc1.cno<>sc2.cno √ 1001 c002 1001 c001 1001 c002 1001 c002 1001 c002 1003 c001 √ 如果是同时选修3门课程 SELECT sno FROM sc GROUP BY SNO HAVING COUNT(*)>=3 1003 c001 1001 c001 1003 c001 1001 c002 1003 c001 1003 c001 考虑:用这种方法解决“选修所有课程”的学生
作业 第五章 习题 22
实训 实训名称:检索表中数据(三) 目的要求:掌握SQL Server 2000中检索表中记录的方法 操作步骤: ① 创建实例5-32中的表s、c、sc,并输入数据。 ② 完成实例5-32中的Transact-SQL语句部分。 ③ 创建习题22中的表s、c、sc,并输入数据。 ④ 完成习题22中的Transact-SQL语句部分。