数据库引论-第三章 关系数据库语言SQL

主要内容笔记

1. SQL数据库的体系结构,SQL的组成

2. SQL的数据定义

SQL模式、基本表和索引的创建和撤销

3. SQL的数据查询

SELECT语句的句法
SELECT语句的三种形式及各种限定
基本表的联结操作
SQL3中的递归查询

4. SQL的数据更新

插入、删除和修改语句

5. 视图

视图的创建和撤销
对视图更新操作的限制

6. 嵌入式SQL

预处理方式
使用规定
实用技术
卷游标
动态SQL语句

值得注意的例题

1. 检索至少选修课程号为C2和C4的学生的学号*

SELECT X.S#
FROM SC X, SC Y
WHERE X,S# = Y.S# AND X.C# = 'C2' AND Y.C# = 'C4';

i.e. 要用定义两个一样的表来检索

2. 检索学习全部课程的学生姓名*

SELECT SNAME FROM S
WHERE NOT EXISTS (
	/ / SELECT * FROM C
	/ / WHERE NOT EXISTS(
		/ / / / SELECT  *  FROM SC
		/ / / / WHERE SC.S# = S.S# AND SC.C# = C.C#) );

i.e.必须用双重否定:有一位学生 {SNAME FROM S}
/ / [找不到]{NOT EXISTS}一门课程 { * FROM C}
/ / [不在] {NOT EXISTS}学生的课表中 (* FROM SC WHERE SC.S#=S.S# AND SC.C#=C.C#;}

3. 与2.类似:

检索所学课程包含学生S3所学课程的学号
SELECT DISTINCT S# FROM SC X
WHERE NOT EXISTS (
/ / SELECT * FROM SC Y
/ / WHERE Y.S# = ‘S3’ AND NOT EXISTS(
/ / / / SELECT * FROM SC Z
/ / / / WHERE Z.S# = X.S# AND Z.C# = Y.C#) );

i.e.与2.结构一样,不同之处在于把“找不到一门课程”变成了“找不到S3的一门课程”
/ / 即{SELECT * FROM SC WHERE S#=S3}

4. 图示形式

a. 检索所学课程号为C2 或 C4 的学生学号在这里插入图片描述
b. 检索所学课程号为C2 和 C4 的学生学号在这里插入图片描述
c. 检索所学课程包含S3所学课程的学号
检索所学课程包含S3所学课程的学号

5. 集合成员的算术比较

a. IN 等价于 =SOME
b. NOT IN 等价于 <>ALL

6. 基本表的连接操作

  • 连接类型、连接条件在这里插入图片描述

  • i.e.内连接:等值/条件连接,不等/不满足条件删去 ; 外连接:不等/不满足条件保留

  • 举例

在这里插入图片描述
i.e.NATURAL\ON\USING 的区别:

  • NATURAL 所有的公共属性连接,只出现一次
  • ON 选择属性可是公共/非公共,作等值连接,不会删去等值属性,均会保留
  • USING 部分公共属性,cue到的公共属性只出现一次(没被cue到的均会保留)

7. 递归查询

在这里插入图片描述
在这里插入图片描述

8. 数据插入

在这里插入图片描述
在这里插入图片描述

9. 数据修改

在这里插入图片描述

在这里插入图片描述

10. 嵌入式SQL C语言*

  • 例1:在基本表SC中检索某学生(学号由共享变量givesno给出)的学习成绩信息(S#, C#, SCORE), 如下查询的一个C函数:
    在这里插入图片描述
  • 例2
    在这里插入图片描述
    i.e.
  • WHERE CURRENT OF scx 等价于 游标scx所指的元组;SET SCORE=70之后,还要g=70,是因为二者不是同步的;
  • C语言:while(1){…}; if(g<70)… [不用{}!!!] else{…}; %s 输出char;%d 输出int整数;\n表示换行

11. 动态SQL语句的使用技术

  • 动态SQL预备/执行语句
    在这里插入图片描述
  • 举例在这里插入图片描述

Q1:’?‘可以这么用吗?
Q2:que什么玩意?dynprog又是什么玩意? A:为动态语句命的名儿。
Q3:SQL语句可以用char*query来定义???nb。
我终于可以去吃饭了。T^T

重要内容分析

  1. SELECT语句的来历
    针对下列在关系代数中最常用的式子,SQL设计SELECT-FROM-WHERE 句型
    在这里插入图片描述
    SELECT A1…,AN
    FROM R1,…,RN
    WHERE F

  2. SELECT语句中出现的基本表名=基本表中的元组变量;列名=元组分量

  3. SELECT语句的语义

  • 无分组的子句(GROUP BY…),无聚合操作(SUM(…),COUNT(),AVE()…):那么是执行投影操作;
  • 无分组子句,使用了聚合操作:那么语义是对查询结果执行聚合操作
  • 使用了分组子句和聚合操作(有前者必有后者):语义是对查询结果的每一组做聚合操作
  1. SELECT语句中使用分组子句先决条件是有聚合操作;但执行聚合操作不一定要用分组子句(当聚合值FROM之后一个);当聚合值FROM有多个必须使用分组子句
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值