说在前面:
本系列文章专注于软考备考复习内容梳理,文章内容是对教材中知识点和考点的提炼,备考过程中可以有针对的进行复习,减少阅读量,有的放矢。
导航目录:
SQL(Structured Query Language)是在关系数据库中最普遍使用的语言,它不仅包含数据查询功能,还包括插入、删除、更新和数据定义功能。目前,主要有3个标准∶ANSISQL;对ANSI SQL进行修改后在1992年采用的标准SQL-92或SQL2;最近的SQL-99标准(也称SQL3)。
SQL具有以下特点。
(1)综合统一。非关系模型的数据语言分为模式定义语言和数据操纵语言。其缺点是,当要修改模式时,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库。SOL 集数据定义语言、数据操纵语言和数据控制语言的功能于一身,语言风格统一,可独立完成数据库生命周期的所有活动。
(2)高度非过程化。非关系数据模型的数据操纵语言是面向过程的,若要完成某项请求时,必须指定存储路径∶而 SQL是高度非过程化语言,当进行数据操作时,只要指出"做什么”,无须指出“怎么做”,存储路径对用户来说是透明的,提高了数据的独立性。
(3)面向集合的操作方式。非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。而SQL采用面向集合的操作方式,其操作对象、查找结果可以是元组的集合。
(4)两种使用方式。第一种方式是用户可以在终端键盘上输入SQL命令,对数据库进行操作,故称之为自含式语言;第二种方式,将SQL嵌入到高级语言程序中,所以又是嵌入式语言。
(5)语言简洁,易学易用。SQL功能极强,完成核心功能只用了9个动词,包括数据查询(SELECT)、数据定义(CREATE、DROP、ALTER)、数据操纵(INSERT、UPDATE、DELETE)及数据控制(GRANT、REVOKE)。
SQL 支持关系数据库的三级模式结构,即视图对应外模式、基本表对应模式和存储文件对应内模式。
SQL的基本组成如下。
(1)数据定义语言(DDL)。SQL DDL提供定义关系模式和视图、删除关系和视图、修改关系模式的命令。
(2)交互式数据操纵语言(DML)。SQLDML提供查询、插入、删除和修改的命令。
(3)事务控制(Transaction Control)。SQL提供的定义事务开始和结束的命令。
(4)嵌入式SQL和动态SQL。用于嵌入到某种通用的高级语言(C、C++、Java、PL/I、Cobol、VB等)中混合编程。其中SQL负责操纵数据库,高级语言负责控制程序流程。
(5)完整性(Integrity)。SQLDDL包括定义数据库中的数据必须满足的完整性约束条件的命令,对于破坏完整性约束条件的更新将被禁止。
(6)权限管理(Authorization)。SQL DDL中包括说明对关系和视图的访问权限的命令。
语句格式∶
CREATE TABLE<表名>(<列名><数据类型>【列级完整性约束条件】
【,<列名><数据类型>【列级完整性约束条件】】…【,<表级完整性约束条件>】);
列级完整性约束条件有NULL、UNIQUE,如NOT NULL UNIQUE表示取值唯一,不能取空值。
1) 修改表
语句格式:
ALERT TABLE<表名>【ADD<新列名><数据类型>【列级完整性约束条件】】
【DROP<完整性约束名>】【MODIFY<列名><数据类型>】;
2)删除表
语句格式:
DROP TABLE<表名>;
索引分聚集索引和非聚集索引。聚集索引是指索引表中索引项的顺序与表中记录的物理顺序一致的索引。
1)建立索引
语句格式
:
CREATE 【UNIQUE】 【CLUSTER】 INDEX<索引名>ON<表名>(<列名>【<次序>】【,<列名>【<次序>】】...);
参数说明如下:
2)删除索引
语句格式:
DROP INDEX<索引名>;
视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。视图不是真实存在的基础表而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
1)视图的创建
语句格式:
CREATE VIEW 视图名(列表名)AS SELECT 查询子句[WITH CHECK OPTION];
注意视图的创建中,必须遵循以下规定:
2)视图的删除
语句格式:
DROP VIEW 视图名;
语句格式:
SELECT 【ALL|DISTINCT】<目标列表达式>【,<目标列表达式>】…FROM<表名或视图名>【,<表名或视图名>】【WHERE<条件表达式>】
【GROUP BY<列名1>【HAVING<条件表达式>】】【ORDER BY<列名2>【ASC|DESC】】;
SQL查询中的子句顺序∶SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY。SELECT、FROM是必需的,HAVING子句只能与GROUP BY搭配使用。
(1)SELECT子句对应的是关系代数中的投影运算,用来列出查询结果中的属性。其输出可以是列名、表达式、集函数(AVG、COUNT、MAX、MIN、SUM),DISTINCT选项可以保证查询的结果集中不存在重复元组。
(2)FROM 子句对应的是关系代数中的笛卡儿积,它列出的是表达式求值过程中须扫描的关系,即在FROM子句中出现多个基本表或视图时,系统首先执行笛卡儿积操作。
(3)WHERE子句对应的是关系代数中的选择谓词。WHERE子句的条件表达式中可以使用的运算符如下表所示。
SQL最简单的査询是找出关系中满足特定条件的元组,这些査询与关系代数中的选择 操作类似。简单査询只需要使用3个保留字,即SELECT> FROM和WHERE。
若査询涉及两个以上的表,则称为连接査询。
1)子査询
子査询也称为嵌套査询,是指一个SELECT-FROM-WHERE査询可以嵌入另一个査询
块之中。在SQL中允许多重嵌套。
2)聚集函数
聚集函数是以一个值的集合为输入,返回单个值的函数。SQL提供了 5个预定义集合
函数,即平均值AVG、最小值MEN、最大值MAX、求和SUM及计数COUNT。
使用ANY和ALL谓词必须同时使用比较运算符,其含义及等价的转换关系如下表
所示。
1)GROUP BY子句
在WHERE子句后面加上GROUP BY子句可以对元组进行分组,保留字GROUP BY 后面跟着一个分组属性列表。最简单的情况是,FROM 子句后面只有一个关系,根据分组属性对其元组进行分组。SELECT子句中使用的聚集操作符仅用在每个分组上。
2)HAVING子句
假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,则在GROUP BY 子句后面跟一个HAVING子句即可。
当元组含有空值时,应注意以下两点。
SQL提供可为关系和属性重新命名的机制,这是通过使用具有以下形式的AS子句来实现的。
old-name AS new-name
AS子句既可出现在SELECT子句中,也可以出现在FROM子句中。
对于字符串进行的最通常的操作是使用LIKE操作符的模式匹配。使用两个特殊的字符来描述模式,即“%”匹配任意字符串、“-”匹配任意一个字符。
查询视图表时,系统先从数据字典中取出该视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句。
要在关系数据库中插入数据,可以指定被插入的元组,或者用查询语言选出一批待插入的元组。插入语句的基本格式如下:
INSERT INTO 基本表名【(字段名【,字段名>】…)】
VALUE(常量【,常量】…);
查询语句INSERT INTO基本表名(列表名)
SELECT查询语句
语句格式:
DELETE FROM基本表名
【WHERE条件表达式】
语句格式:
UPDATE基本表名
SET 列名=值表达式【,列名=值表达式..】【WHERE条件表达式】;
数据控制是控制用户的数据存储权利,是由DBA来决定的。DBMS数据控制应具有以下功能。
授权的语句格式如下:
GRANT<权限>【,<权限>】…
【ON<对象类型><对象名>】TO<用户>【,<用户>】... [WITH GRANT OPTION];
不同类型的操作对象有不同的操作权限,常见的操作权限如下表所示。
说明如下。
(1)PUBLIC∶接受权限的用户可以是单个或多个具体的用户,PUBLIC参数可将权限
(2) WITH GRANT OPTION∶若指定了此子句,获得权限的用户还可以将权限赋予其他用户。
收回权限的语句格式如下:
REVOKE<权限>【,<权限>】…【ON<对象类型><对象名>】…FROM<用户>【,<用户>】....
SQL提供了将SQL语句嵌入到某种高级语言中的使用方式,识别嵌入在高级语言中的SQL语句通常采用预编译的方法。该方法的关键问题是必须区分主语言中嵌入的SQL语句,以及主语言和SQL间的通信问题。采用的方法是由DBMS的预处理程序对源程序进行扫描,识别出SQL语句,把它们转换为主语言调用语句,以使主语言编译程序能识别它,最后由主语言的编译程序将整个源程序编译成目标码。
嵌入式SQL与主语言之间的通信采用以下3种方式:
(1)SQL通信区。向主语言传递SQL语句执行的状态信息,使主语言能够根据此信息控制程序流程。
(2)主变量。也称为共享变量。主语言向 SQL 语句提供参数主要通过主变量,主变量由主语言的程序定义,并用SQL的DECLARE语句说明。
(3)游标SQL。语言是面向集合的,一条SQL语句可产生或处理多条记录。而主语言是面向记录的,一组主变量一次只能放一条记录,所以引入游标,通过移动游标指针来决定获取哪一条记录。
未完待续。。。
更多知识传送:
- 计算机操作系统–基础知识
- 计算机操作系统–进程管理
- 计算机操作系统–存储管理
- 计算机操作系统–设备管理
- 计算机操作系统–文件管理
- 计算机操作系统–作业管理
- 计算机操作系统–网络操作系统和嵌入式操作系统
- 计算机操作系统–UNIX操作系统
- 软件工程基础知识–认识软件工程
- 软件工程基础知识–软件过程模型
- 软件工程基础知识–需求分析
- 软件工程基础知识–系统设计
- 软件工程基础知识–运行和维护
- 软件工程基础知识–软件项目管理
- 软件工程基础知识-软件质量
- 结构化开发方法–系统分析及设计概述
- 结构化开发方法–结构化分析方法
- 结构化开发方法–用户界面设计
- 面向对象技术–概念及程序设计
- 面向对象技术–面向对象开发技术
- 面向对象技术–面向对象的分析与设计方法
- 面向对象技术–设计模式
- 数据库技术基础–基本概念
- 数据库技术基础–数据模型
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上内容整理参考《软件设计师教程(第5版)》和《软件设计师考试同步辅导(第四版)》(忘记是哪个老师的了,侵删)。本文章内容旨在帮助更多想要进军软考,给自己镀金的小伙伴。有兴趣的小伙伴可以共勉。