dbsc 第三章 SQL

3.1 SQL查询语言概览

  • DDL,用来定义关系模式,删除关系以及修改关系模式的命令
  • DML,用来从数据库中查询信息,插入,删除,修改元组等
  • 完整性,在DDL中定义了完整性越苏的命令。保持在数据库中的数据必须满足DDL中定义的完整性约束
  • 视图定义,DDL包括定义视图的命令
  • 事务控制,SQL包括定义事务的开始和事务的结束
  • 嵌入式SQL和动态SQL,嵌入式和动态SQL定义SQL语句如何嵌入到通用编程语言
  • 授权,DDL包括定义对关系(table)和视图访问权限的命令

3.2 SQL数据定义

  • DDL可以定义每个关系中的信息:
    • 每个关系的模式
    • 每个属性的取值类型
    • 完整性约束
    • 每个关系维护的索引集合
    • 每个关系的安全性和权限信息
    • 每个关系在磁盘上的物理存储结构

3.2.1 基本类型

  • char,固定长度的字符串
  • varchar,可变长度的字符串
  • int,整数类型(和机器相关的整数有限子集)
  • smallint,小整数类型(和机器相关的整数类型的子集)
  • numeric(p, d), 定点数,精度由用户指定。表示这个数由p位数字(加上一个符号位),其中d位在小数点右边。比如,numeric(3, 1)可以精确存储44.5,但是不能够精确存储444.5,0.32
  • real,double percision,浮点数与双精度浮点数
  • float(n),精度至少位n位的浮点数

3.2.2 基本模式定义

  • create_table的基本用法
  • create_table的一个例子
  • 实体完整性是指,主码不能够为空值
  • 参照的完整性是指,外码在“外表”上不能够不存在
  • 用户定义的完整性是指,如果用户定义了某些属性not null,或者某些属性域的范围,那么关系中的tuple就必须满足
  • alter命令修改table的属性

3.3 SQL查询的基本结构

3.3.1 单关系查询

  • select,from,where

3.3.2 多关系查询

  • select, from, where的执行顺序是先是from,之后是where,最后是select
  • from子句是从多个关系中获取tuple,形参笛卡尔积,得到新的关系
  • from子句得到的笛卡尔积过于庞大,可以通过where中的谓词来缩小笛卡尔积的tuple数目
  • 最后使用select子句来输出其指定的属性(或者表达式的结果)

3.3.3 自然连接

  • 自然连接natural join是指,对于两个关系中连接tuple,只考虑在两个关系模式中都出现的属性上取值相同的元组对。
  • join using运算是一种自然连接的构造形式

3.4 附加的基本运算

3.4.1 更名运算

  • as是更名子句

3.4.2 字符串运算

  • 字符串中存在模式匹配,用like预算符来实现模式匹配

3.4.3 select子句中的属性说明

3.4.4 排列元组的显示次序

3.4.5 where 子句谓词

3.5 集合运算

3.5.1 并运算(union)

3.5.2 交运算(intersect)

3.5.3 差运算(except)

3.6 空值

  • SQL将涉及空值的任何比较运算的结果视为unknown,它不是is null也不是is not null
  • 在谓词中对待空值的方式,与select distinct不同。前者将对于null = null返回unknown,而不是true;而后者认为{('A', null), ('A', null)}两者是相等的

3.7 聚集函数

3.7.1 基本聚集

  • all和distinct不是相反的意思吗?

3.7.2 分组聚集(group by)

3.7.3 having 子句

  • from, select,group by,having, where子句执行顺序:
    • 先是from
    • where,where子句中的谓词将应用到from子句中
    • group by,满足where子句谓词的元组通过group by子句形成分组。如果没有group by子句,那么where谓词的整个元组集被当作一个分组
    • 如果出现了having,having子句是应用在每个分组之上,不满足having谓词的分组将被丢弃

3.7.4 对空值和布尔值聚集

3.8 嵌套子查询

3.8.1 集合成员资格

  • innot in连接词
  • 集合是由select子句产生的一组值构成

3.8.2 集合的比较

  • not in是完全不相等,它等价与<>all<>some是指只要不和其中任意一个相等即可
  • <>all等价于not in,但=all并不等价于in,=all表示与子查询集合中的每一个tuple都相等

3.8.3 空关系测试

  • exist结构,在作为参数的子查询非空时返回true值。来自外层查询的一个相关名称可以用在where子句的子查询中,使用了来自外层查询相关的子查询被称为相关子查询
  • 可以使用not exists结构模拟集合包含(即超集)的操作: 我们可以将"关系A包含关系B"写成not exists (B except A)

3.8.4 重复元组存在性测试

  • unique结构
  • 两个tuple中只要某个域为空时,判断t1 = t2为假

3.8.5 from子句中的子查询

3.8.6 with子句

  • with子句用于建立临时的关系
  • 之后再转换?

3.8.7 标量子查询

  • 这里的结果的执行流程是什么?

3.9 数据库的修改

3.9.1 删除

3.9.2 插入

3.9.3 更新

  • update中的case结构

3.10

posted @   抿了抿嘴丶  阅读(175)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示