当前位置:   article > 正文

第三章 SQL语句(数据库系统概论 王珊著)_数据库系统概论第三章sql语句

数据库系统概论第三章sql语句

SQL

下面操作的表在课本P79页

动词

  • 数据查询:select 选择
  • 数据定义:create、drop、alter 对结构的创建,删除,修改
  • 数据操纵:insert、update、delete 对内容的修改,更新,删除
  • 数据控制:grant、revoke 权限控制

几个概念

  • 基本表
    • 我们经常看到的二维表
  • 存储文件
  • 视图:是一个虚表,是从一个表或者多个表中导入进来的,表视图不是一个真正的表,他的数据都在基本表中
    • 可以在视图的基础上再定义视图
    • 在视图上的操作其实是在修改表
  • 三级模式两级映像

  • SQL包括
    • 数据定义
    • 数据查询
    • 数据更新 修改和删除
    • 视图

数据定义

  • 什么是模式

    • 一个关系数据库管理系统(DBMS)的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象

    • 这里的模式,包括了外模式、模式、内模式

  • 什么是索引

    • 是为了加快我们的查询速度,数据结构B+树、hash表等

模式的定义和删除

  • 定义模式

    • 用户就像是账号
  • 删除模式

    • cascade和restrict必须二选一

基本表的定义、修改和删除

1 定义基本表

create table <表名> (<列名><数据类型>[列级完整性约束条件]

[,<列名><数据类型>[列级完整性约束条件]]

[,<表级完整性约束条件>]);

  • 建立表的同时还可以定义与该表有关的完整性约束条件

  • 如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在表级或者是列级

    • 外码
    • 主码由两个属性构成,必须为表级(课本P83)

2 数据类型

  • 关系模型中域的概念,每个属性来自于一个域,它的取值必须是域中的值。

  • 在SQL中域的概念由数据类型来实现。定义表的各种属性时需要指明其数据类型及长度。

  • 通过取值范围、要做哪些运算两方面来考虑属性的数据类型

3 修改基本表

书本P85

  • alter table <表名>

    • add 增加新列、新的列级/表级完整性约束

    • drop column 删除表中的列

    • drop constraint 删除指定的完整性约束

    • alter column 修改原有的列定义(列名、数据类型)

4 删除基本表

索引的建立和删除

  • 索引是为了加快查询的速度

  • 索引的建立、修改、删除

数据字典

  • 数据字典是DBMS内部的系统表,他记录了数据库中所有的定义信息

数据查询

简单查询

条件查询

1 模糊匹配

2 涉及空值问题

is不能用=替代

3 多重条件查询

查询结果排序 order by

聚合函数

  • 使用聚合函数 ,注意distinct

  • 注意:where子句是不能用聚合函数作为条件表达式的,聚合函数只能用于select子句和group by中的having子句

group by

  • 聚合函数常伴随 group by聚合函数,进行分类汇总
  • 分组后聚类函数将作用于每一个分组,即每一组都有一个函数值

  • 还按要求对这些组进行筛选,用having

  • where子句和having短语区别在于作用对象不同
    • where子句用作于基本表/视图,从中选出元组
    • having短语作用于组,从中选出满足条件的组

连接查询

其他操作

  • 自身连接:连接的时候给表改名
  • 外连接

嵌套查询

  • 相关子查询
  • 不相关子查询

存在EXISTS

  • 关系代数中用除法

  • 关键词:所有

  • 课本P109

  • 例子:查找选修了所有课程的学生姓名

  • 步骤(这里student为表A,sc为表B,course为表C,表在表P79)

STEP1:先取 Student 表中的第一个元组,得到其 Sno 列的值。
STEP2:再取 Course 表中的第一个元组,得到其 Cno 列的值。
STEP3:根据 Sno 与 Cno 的值,遍历 SC 表中的所有记录(也就是选课记录)。若对于某个 Sno 和 Cno 的值来说,在 SC 表中找不到相应的记录,则说明该 Sno 对应的学生没有选修该 Cno 对应的课程。
STEP4:对于某个学生来说,若在遍历 Course 表中所有记录(也就是所有课程)后,仍找不到任何一门他/她没有选修的课程,就说明此学生选修了全部的课程。
STEP5:将此学生放入结果元组集合中。
STEP6:回到 STEP1,取 Student 中的下一个元组。
STEP7:将所有结果元组集合显示。

这题比书本上的例题要难一点,多了一个exist嵌套,结合课本上P109例题更好理解

集合查询

数据更新

插入数据

insert

Into <表名>[属性列,属性列…]

values(<常量>…)

可插入子查询结果

insert

Into <表名>[属性列,属性列…]

子查询

修改语句

update <表名>

set <列名> = <表达式>

[where子句]

  • 修改一个元组
  • 修改多个元组
  • 带子查询的修改语句

删除语句

视图

数据库中的视图有什么用,我们为什么要用视图?

建立视图

视图是一种虚表,它真正的数据存在基本表上

删除视图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/485817
推荐阅读
相关标签
  

闽ICP备14008679号