专栏/关系数据库标准语言SQL

关系数据库标准语言SQL

2022年02月13日 10:32--浏览 · --喜欢 · --评论
粉丝:17文章:45

第三章 关系数据库标准语言SQL

SQL的功能不仅仅是查询,而是包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。


本章详细介绍SQL的基本功能,并进一步讲述关系数据库的基本概念。


什么是数据库模式?就是那个三层模式,外模式内模式模式,鬼东西。


概念多的一批。


3.1SQL概述


3.1.1 SQL的产生与发展


Sql标准是什么?


看上去标准内容就是这个:SQL作为关系数据库语言


目前,没有一个数据库系统能够支持SOQL标准的所有概念和特性。


同时,许多软件厂商对SQL基本命令集还进行了不同程度的扩充和修改,又可以支持标准以外的一些功能特性。


本书不是介绍完整的SQL,而是介绍SQL的基本概念和基本功能。因此,在使用具体系统时要查阅各产品的用户手册。


3.1.2 SQL特点

SQL集数据查询( data query)、数据操纵( data manipulation)、数据定义( data definition)和数据控制( data control)功能于一体,其主要特点包括以下几部分:

1.综合统一

大致讲的是,没有sql的话,各种部分需要不同的语言,数据库系统投入运行之后要修改的话还要停止运行修改,这太麻烦了。


Sql统一了这些功能,运行数据库后修改可以不停大概是这样。


2.高度非过程化

无须了解存取路径,存取路径的选择以及SQL的操作过程由系统自动完成。

作用:大大减轻了用户负担,而且有利于提高数据独立性。

3.面向集合的操作方式

与非关系数据模型相比,sql可以操作集合,更方便吧。


4.以同一种语法结提供多种使用方式


5.语言简洁,易学易用



3.1.3 SQL的基本概念


基本表(base table)和视图(view)都是关系.视图是导出的表,是虚表。

下面将逐一介绍各SQL语句的功能和格式。


3.2学生一课程数据库

本章以学生一课程数据库为例来讲解SQL的数据定义、数据操纵、数据查询和数据控制语句。




3.3数据定义

因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义。


SQL标准不提供修改模式定义和修改视图定义的操作。用户如果想修改这些对象,只能先将它们删除然后再重建。


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


本节介绍如何定义模式、基本表和索引,视图的概念及其定义方法将在3.7节专门讨论。


3.3.1模式的定义与删除

1.定义模式


若无模式名,则默认为用户名。要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的 REATE SCHEMA的权限。


2.删除模式



3.3.2基本表的定义、删除与修改

1.定义基本表


2.数据类型

在SQL中域的概念用数据类型来实现。



3.模式与表

当定义基本表时一般可以有三种方法定义它所属的模式。


当用户创建基本表(其他数据库对象也一样)时若没有指定模式,系统根据搜索路径( search path)来确定该对象所属的模式。

搜索路径包含一组模式列表,关系数据库管理系统会使用模式列表中第一个存在的模式作为数据库对象的模式名。若搜索路径中的模式名都不存在,系统将给出错误。


4.修改基本表


看不太懂


5.删除基本表



3.3.3索引的建立与删除

当表的数据量比较大时,查询操作会比较耗时。建立索引是加快查询速度的有效手段。


数据库索引有多种类型,常见索引包括顺序文件上的索引、B+树索引、散列(hash)索引、位图索引等。


索引虽然能够加速数据库查询,但需要占用一定的存储空间,当基本表更新时,索引要进行相应的维护,这些都会增加数据库的负担,因此要根据实际应用的需要有选择地创建索引。


1.建立索引


2.修改索引


3.删除索引




3.3.4数据字典

数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、

统计信息等。关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字

典表中的相应信息。在进行查询优化和查询处理时,数据字典中的信息是其重要依据。



3.4数据查询

一般格式:



例子:

根据where的条件从from的表或者其他什么中选出元组。

如果有 GROUP BY子句,则将结果按《列名1》的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果 GROUP BY子句带 HAVING短语,则只有满足指定条件的组才予以输出。如果有 ORDER BY子句,则结果表还要按《列名2》的值的升序或降序排序。


3.4.1单表查询

1.选择表中的若干列

(1)查询指定列,



(2)查询全部列


(3)查询经过计算的值


用户可以通过指定别名来改变查询结果的列标题,这对于含算术表达式、常量、函数名的目标列表达式尤为有用。例如对于例3.20可以定义如下列别名


2.选择表中的若干元组

(1)消除取值重复的行

两个本来并不完全相同的元组在投影到指定的某些列上后,可能会变成相同的行。可以用 DISTINCT消除它们。


(2)查询满足条件的元组

查询满足指定条件的元组可以通过 WHERE子句实现。 WHERE子句常用的查询条件如表3.6所示。

1.比较





2.确定范围

谓词 BETWEEN…AND…和 NOT BETWEEN-…AND…可以用来查找属性值在(或不在)指定范围内的元组,其中 BETWEEN后是范围的下限(即低值),AND后是范围的上限(即高值)。



3.确定集合

谓词IN可以用来查找属性值属于指定集合的元组。



4.字符匹配




注意:数据库字符集为ASCⅡ时一个汉字需要两个;当字符集为GBK时只需要




ESCAPE“\”表示“\”为换码字符。这样匹配串中紧跟在“\”后面的字符“_”不再具有通配符的含义,转义为普通的“”字符。


5.涉及空值的查询


6.多重条件查询



3. ORDER BY子句

户可以用 ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序


对于空值,排序时显示的次序由具体系统实现来决定。


因为默认是升序,所以上面例子3.40的sdept后没有加升序。


4.聚集函数



当聚集函数遇到空值时,除 COUNT(*)外,都跳过空值而只处理非空值

注意, WHERE子向中是不能用聚集函数作为条件表达式的。聚集函数只能用于SELECT子向和 GROUP BY中的 HAVING子句


5.group by子句




3.4.2连接查询

前面的查询都是针对一个表进行的。若一个查询同时涉及两个以上的表,则称之为连接查询。连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接査询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询等。

1.等值与非等值连接查询




2.自身连接

连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接

看不太懂

3.外连接


有时想以 Student表为主体列出每个学生的基本情况及其选课情况。若某个学生没有选课,仍把 Student的悬浮元组保存在结果关系中,而在SC表的属性上填空值NULL,这时就需要使用外连接。

4.多表连接


3.4.3嵌套查询

3.4.4集合查询

3.4.5基于派生表的查询

3.4.6 SELECTT语句的一般格式



3.5数据更新

插入修改删除数据

内容就是这个细节先不看了。



3.6 空值处理

所谓空值就是“不知道”或“不存在”或“无意义”的值


某些情况下取空值:

该属性应该有一个值,但目前不知道它的具体值。例如,某学生的年龄属性,因为学生登记表漏填了,不知道该学生年龄,因此取空值。

该属性不应该有值。例如,缺考学生的成绩为空,因为他没有参加考试。由于某种原因不便于填写。例如,一个人的电话号码不想让大家知道,则取空值因此,空值是一个很特殊的值,含有不确定性,对关系运算带来特殊的问题,需要做特殊的处理。


1.空值的产生

怎样会产生空值

2.空值的判断

判断一个属性的值是否为空值,用 IS NULL或 IS NOT NULL来表示


3.空值的约束条件

属性定义(或者域定义)中有 NOT NULL约束条件的不能取空值,加了 UNIQUE限制的属性不能取空值,码属性不能取空值。


4.空值的算术运算、比较运算和逻辑运算

这里需要再看吧



3.7视图

视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化

视图一经定义,就可以和基本表一样被査询、被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。




本节专门讨论视图的定义、操作及作用。



3.7.4 视图的作用

1.视图能够简化用户的操作

2.视图使用户能以多种角度看待同一数据

3.视图对重构数据库提供了一定程度的逻辑独立性

4.视图能够对机密数据提供安全保护

5.适当利用视图可以更清晰地表达查询


投诉或建议