首页 > 数据库 >数据库系统概念(第3章 SQL介绍)

数据库系统概念(第3章 SQL介绍)

时间:2022-09-23 09:11:59浏览次数:58  
标签:关系 元组 概念 SQL table 数据库系统 select 属性

目录

3.1 SQL查询语言概览

SQL(Structured Query Language, 结构化查询语言)
SQL语言有几个部分:

  • 数据定义语言(Data-Definition Language, DDL)——create/drop/alter/desc
  • 数据操纵语言(Data-Manipulation Language, DML)——select/update/insert/delete
  • 数据控制语言(Data-Control Language, DCL)——commit/rollback/grant/rewoke
  • 完整性(integrity)
  • 视图定义(view definition)
  • 事务控制(transaction control)
  • 嵌入式SQL(embedded SQL)和动态SQL(dynamic SQL)
  • 授权(authorization)

3.2 SQL数据定义

数据库中的关系集合是用数据定义语言(DDL)定义的。SQL DDL不仅能够定义关系的集合,还能够定义有关每个关系的信息,包括:

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

3.2.1 基本类型

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

  • char(n):具有用户指定长度n的固定长度的字符串。也可以使用全称character
  • varchar(n):具有用户指定的最大长度n的可变长度的字符串。等价的全称形式是character varying
  • int:整数(依赖于机器的整数的有限子集),等价的全称形式是integer。
  • smallint:小整数(依赖于机器的整数类型的子集)。
  • numeric(p, d):具有用户指定精度的定点数。这个数有p位数字(加上一个符号位),并且小数点右边有p位中的d位数字。
  • real, double precision:浮点数与双精度浮点数,精度依赖于机器。
  • float(n):精度至少为n位数字的浮点数。

每种类型都可能包含一个被称作(null)值的特殊值。(null值的存在不总是好的)

3.2.2 基本模式定义

我们通过使用create table命令来定义SQL关系。
create table命令的通用形式是:

create table r
	(A_1 D_1,
	A_2 D_2,
	…,
	A_n D_n,
	<完整性约束_1>,
	…,
	<完整性约束_k>);

其中r是关系名,每一个\(A_i\)是关系r的模式中的一个属性名,\(D_i\)是属性\(A_i\)的域;也就是说,\(D_i\)指定了属性\(A_i\)的类型以及可选的约束,用于限制所允许的\(A_i\)取值的集合。
典型的约束有以下三种:

  • primary key(\(A_{j1}\), \(A_{j2}\), …, \(A_{jm}\))主码声明表示属性\(A_{j1}\), \(A_{j2}\), …, \(A_{jm}\)构成关系的主码。主码属性必须是非空且唯一的。
  • foreign key (\(A_{k1}\), \(A_{k2}\), …, \(A_{kn}\)) references s外码声明表示关系中任意元组在属性(\(A_{k1}\), \(A_{k2}\), …, \(A_{kn}\))上的取值必须对应于关系s中某元组在主码属性上的取值。(包括MySQL在内的一些数据库系统需要显式列出被引用表s中的被引用属性)
  • not null:一个属性上的非空约束表明在该属性上不允许存在空值。

如果要从SQL数据库中去掉一个关系,我们使用drop table命令。drop table命令从数据库中删除关于被去掉关系的所有信息。drop table命令的格式为:

drop table r;

命令drop table r;是比delete from r;更强的语句。
后者保留关系r,但删除r中的所有元组。前者不仅删除r中的所有元组,还删除r的模式。一旦r被去掉,除非用create table命令重新创建r,否则没有元组可以插入r中。

如果要为已有关系增加属性,我们使用alter table命令。关系中的所有元组在新属性上的取值将被赋为null。alter table命令的格式为:

alter table r add A D;

其中r是现有关系的名称,A是待添加属性的名称,D是待添加属性的类型。
同理,如果要从关系去掉属性,我们可以使用如下命令:

alter table r drop A;

其中r是现有关系的名称,A是关系的一个属性的名称。(很多数据库系统并不支持去掉属性,尽管它们允许去掉整张表)

3.3 SQL查询的基本结构

SQL查询的基本结构由三个子句构成:selectfromwhere。查询以在from子句中列出的关系作为其输入,在这些关系上进行whereselect子句中指定的运算,然后产生一个关系作为结果。

3.3.1 单关系查询

select A
from r;

在某些情况下如果想强行去除重复,可以在select后插入关键字distinct

select distinct A
from r;

SQL同样允许使用关键字all来显式指名不去除重复:

select all A
from r;

select子句还可带含有+、-、*、/运算符的算数表达式,运算对象可以是常数或元组的属性(不导致r关系发生任何改变):

select A * 1.1
from r;

where子句允许我们只选出那些在from子句的结果关系中满足特定谓词的元组:

select A
from r
where condition1 and/or/not condition2…;

3.3.2 多关系查询

类似的,我们给出一个典型的SQL查询:

select A_1, A_2, …, A_n
from r_1, r_2, …, r_m
where P;

每个\(A_i\)代表一个属性,每个\(r_i\)代表一个关系。P是一个谓词。如果省略where子句,则谓词P为

标签:关系,元组,概念,SQL,table,数据库系统,select,属性
From: https://www.cnblogs.com/kirin-dev/p/Database-System-Concepts_Chapter-3.html

相关文章

  • 【SQLServer】SQLServer执行计划的类型
    1.【SQLServer】SQLServer执行计划概览 在上一篇文章中,我们详细描述了提交的SQLServer查询所经历的不同阶段以及SQLServer关系引擎如何处理它。SQLServer关系引擎生......
  • mysql函数--找出每个学校GPA最低的同学
    描述题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。 示例:user_profileiddevice_idgenderageuniversitygpaactive_days_w......
  • mysql练习--统计每种性别的人数
    描述题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个性别的用户分别有多少参赛者,请取出相应结果 示例:user_submitdev......
  • sql练习-- 计算用户的平均次日留存率
    描述题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。 示例:question_practice_detailiddevice_idquest_idresultda......
  • 开启 windows10上的mysql的远程连接
    1打开mysql的bin目录cdF:\program\phpstudy_pro\Extensions\MySQL8.0.12\bin 2登录.\mysql-uroot-p3切换数据库usemysql;  4创建远程用户......
  • sql练习--计算用户8月每天的练题数量
    描述题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。 示例:question_practice_detailiddevice_idquestion_idresultdate121381......
  • mysql练习--计算25岁以上和以下的用户数量
    描述题目:现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量本题注意:age为null也记为25岁以下 示例:user_profileiddevic......
  • sql练习--查看不同年龄段的用户明细
    描述题目:现在运营想要将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况,请取出相应数据。(注:若年龄为空请返回其他。)   示例:user......
  • 【云原生】MySQL on k8s 环境部署
    目录一、概述二、开始部署(一主两从)1)添加源2)修改配置3)开始安装4)测试验证5)Prometheus监控6)卸载一、概述MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Ora......
  • JDBC(MySQL)
    JDBC(MySQL)​ 使用JDBCUtils的优点,在我们有大量使用mysql的数据库的情况下,我们可以通过更改jdbc.properties配置文件就可以修改数据库的配置,而不是寻找代码然后在一次次......