数据库系统概念学习笔记——第三章SQL

本文是《数据库系统概念》学习笔记的第三章,主要介绍SQL查询语言,包括数据定义语言(DDL)、数据操纵语言(DML)、完整性、视图定义、事务控制等。详细讲解了SQL的基本类型、模式定义、查询结构、额外运算、集合运算、空值处理、函数聚集等内容,并通过实例解析了SQL查询中的各种操作,如单关系查询、多关系查询、嵌套子查询、数据的插入、删除和更新等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《数据库系统概念》学习笔记

第三章 SQL

3.1 SQL查询语言概览

SQL语言有以下几个部分:

  • 数据定义语言(Data-Definition Language, DDL):SQL DDL提供定义关系模式、删除关系以及修改关系模式的命令。
  • 数据操纵语言(Data-Manipulation Language, DML):SQL DML提供从数据库中查询信息,以及在数据库插入元组、删除元组、修改元组的能力。
  • 完整性(integrity):SQL DDL包括定义完整性约束的命令,保存在数据库中的数据必须满足所定义的完整性约束。破坏完整性约束的更新是不允许的。
  • 视图定义(view definition):SQL DDL 包括定义视图的命令。
  • 事务控制(transaction control):SQL 包括定义事务的开始和结束的命令。
  • 嵌入式SQL和动态SQL(embedded SQL and dynamic SQL):嵌入式和动态SQL定义SQL语句如何嵌入到通用语言,如C、C++和Java中。
  • 授权(authorization):SQL DDL包括定义对关系和视图的访问权限的命令。

3.2 SQL数据定义

3.2.1基本类型

SQL标准支持多种固有类型,包括:

  • char(n):固定长度的字符串,用户指定长度为n。也可以用全称character。如果为该属性存入的字符串的长度小于n,该字符串后面会追加空格使其达到规定的长度。
  • varchar(n):可变长度的字符串,用户指定最大长度n,等价于全称character varying
  • int:整数类型(和机器相关的整数的有限子集),等价于全称integer
  • smallint:小整数类型(和机器相关的整数类型的子集)。
  • numeric(p,d):定点数,精度有用户指定。这个数有p位数字,其中d位数字在小数点右边。
  • real, double precision:浮点数与双精度浮点数,精度与机器相关。
  • float(n):精度至少为n为的浮点数。

值得注意的是:char类型和varchar类型即使存储相同的字符串它们之间相互比较的结果也不确定,建议始终使用varchar类型来避免此类问题。

3.2.2 基本模式定义

命令create table用来定义SQL关系,create table 命令的通用形式是:

create table r
    (A1 D1,
     A2 D2,
     ...
     An Dn,
     <完整性约束1>,
     ...
     <完整性约束k>);

其中r是关系名,每个Ai是关系模式中的一个属性名,Di是属性Ai的域。

SQL支持许多不同的完整性约束,包括:

  • primary key(A1, A2…):primary key声明表示属性(A1, A2…)构成关系的主码。主码属性必须非空且唯一。
  • foreign key(A1, A2…)references: foreign key声明表示关系中任意元组在属性(A1, A2…)上的取值必须对应于关系s中某元组在主码属性上的取值。
  • not null :一个属性上的not null 约束表明在该属性上不允许空值。
    SQL禁止破坏完整性的任何数据库更新。

大学数据库的部分SQL数据定义:

create table department
  (dept_name varcahr(20),
  building   varchar(15),
  budget     numeric(12,2),
  primary key (dept_name));
  
create table course
  (course_id  varchar(7),
  title       varchar(50),
  dept_name   varchar(20),
  credits     numeric(2,0),
  primary key (course_id),
  foreign key (dept_name) references department);
  
create table instructor
  (ID    varchar(5),
  name   varchar(20) not null,
  dept_name varhar(20),
  salary    numeric(8,2),
  primary key (ID),
  foreign key (dept_name) references department);
  
create table section
  (course_id    varchar(8),
  sec_id        varchar(8),
  semester      varchar(6),
  year          numeric(4,0),
  building      varchar(15),
  room_number   varchar(7),
  tiem_slot_id  varcahr(4),
  primary key (course_id,sec_id,semester,year),
  foreign key (course_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值