5.1 SQL简介
结构化查询语言SQL(Structured Query Language)是介乎于关系代数和元组演算之间的一种语言。
5.1.1 SQL发展史
5.1.2 SQL数据库的体系结构
SQL数据库的体系结构基本上也是三级结构,但术语与传统的关系模型术语不同。在SQL中,关系模式称为“基本表”(Base Table),存储模式称为“存储文件”(Stored File),子模式称为视图(View),元组称为“行”(ROW),属性称为“列”(Column)。
SQL数据库的体系结构要点如下:
(1)一个SQL模式(Schema)是表和约束的集合。
(2)一个表由行集构成,一行是列的序列,每列对应一个数据项。
(3)表有三种类型:基本表、视图和导出表。基本表是实际存储在数据库中的表,视图是由若干基本表或其他视图构成的表的定义,而导出表是执行了查询是产生的表。
(4)一个基本表可以跨一个或多个存储文件,一个存储文件也可以存放一个或多个基本表。每个存储文件与外部存储器上一个物理文件对应。
(5)用户可以用SQL语句对基本表和视图进行查询等操作。在用户看来,两者都是一样的,都是表。
(6)SQL用户可以是应用程序,也可以是终端用户。
5.1.3 SQL的组成
核心SQL主要有四个部分:
(1)数据库定义语言,即SQL DDL,用于定义SQL模式、基本表、视图、索引等结构。
(2)数据操纵语言。即SQL DML。
(3)嵌入式SQL语言的使用规定。
(4)数据控制语言,即SQL DCL。
5.1.4 SQL的特点
5.1.5 SQL的数据定义
5.2.1 SQL模式的创建和撤销
1.SQL模式的创建
在SQL中,一个SQL模式定义为一个基本表的集合。一个SQL模式由模式名和模式所有者的用户名或账号来确定,并包含模式中每一个元素(基本表、视图、索引等)的定义。创建SQL模式,就是定义了一个存储空间。
SQL模式的创建可用CREATE SCHEMA语句定义,其基本句法如下:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
2.SQL模式的撤销
当一个SQL模式及其所属的基本表、视图等元素都不需要时,可以用DROP语句撤销这个SQL模式。DROP语句的句法如下
DROP SCHEMA<模式名> [CASCADE|RESTRICT]
其方式有两种:
CASCADE(级联式)方式:执行Drop语句时,把SQL模式及其下属的基本表、视图、索引等索引元素全部撤销。
RESTRICT(约束式)方式:执行DROP语句时,只有当SQL模式中没有任何下属元素时,才能撤销SQL模式,否则拒绝执行DROP语句。
大多数DBMS把“创建SQL模式”按惯例称为“创建数据库”,语句采用“CREATE DATABASE...”和“DROP DATABASE...”
5.2.2 SQL的基本数据类型
SQL允许用户使用“CREATE DOMAIN”语句定义新的域。定义好域以后,就可以像使用基本类型一样,用域名来定义属性的类型。
5.2.3 基本表的创建和撤销
1.基本表的创建
创建基本表,可用CREATE TABLE 语句实现
CREATE TABLE <基本表名>
(<列名,类型>,
...
<完整性约束>,
......)
表中每个列的类型可以是基本数据类型,也可以是用户预先定义的域名。完整性约束主要有三种子句:主键(PRIMARY KEY)、外键子句(FOREIGN KEY)和检查子句(CHECK)。
2.基本表结构的修改
(1)增加新的列用“ALTER ... ADD ...”语句,其句法如下
ALTER TABLE<基本表名> ADD <列名> <类型>
应注意,新增加的列不能定义为“NOT NULL”。基本表在增加一列后,原有元组在新增加的列上的值都被定义为空值(NULL)。
(2)删除原有的列用“ALTER ...DROP...”语句,其句法如下:
ALTER TABLE <基本表名> DROP <列名>[CASCADE|RESTRICT]
此处CASCADE方式表示:在基本表中删除某列时,所有引用到该列的视图和约束也要一起自动地被删除。而RESTRICT方式表示在没有视图或约束引用该属性时,才能在基本表中删除该列,否则拒绝删除操作。
(3)修改原有列的类型、宽度用“ALTER... MODIFY...”语句,其句法如下:
ALTER TABLE <基本表名> MODIFY <列名> <类型>
3.基本表的撤销
撤销语句的句法如下:
DROP TABLE <基本表名>[CASCADE|RESTRICT]
此处CASCADE、RESTRICT的语义同前面句法中的语义一样。
5.2.4 索引的创建和撤销
1.索引的创建
创建索引可用“CREATE INDEX”语句实现。其句法如下:
CREATE <UNIQUE> INDEX<索引名> ON<基本表名>(<列名序列>)
此处关键字UNIQUE表示每个索引值对应惟一的数据记录。
2.索引的撤销
当索引不需要时,可以用“DROP INDEX”语句撤销,其句法如下:
DROP INDEX <索引名>
5.3 SQL的数据查询
5.3.1 SELECT查询语句的基本结构
1.SELECT句型
SELECT A1,...,An
FROM R1,...,Rm
WHERE F
在WHERE子句中
2.SELECT语句的使用技术
SELECT语句使用时有三种写法:连接查询、嵌套查询和带存在量词的嵌套查询。
查询设计多个基本表时用嵌套结构逐次求解层次分明,具有结构程序设计特点,并且嵌套查询的执行效率也比连接查询的笛卡尔积效率高。在嵌套查询中,IN是常用到的谓词,其结构为“元组IN(集合)”,表示元组在集合内。
5.3.2 SELECT 语句完整的结构
1.聚合函数
SQL提供了下列聚合函数:
COUNT(*) 计算元组的个数
COUNT(<列名>) 对一列中的值计算个数
SUM(<列名>) 求某一列的总和(此列的值必须是数值型)
AVG(<列名>) 求某一列值的平均值(此列的值必须是数值型)
MAX(<列名>) 求某一列值的最大值
MIN(<列名>) 求某一列值的最小值
2.SELECT语句完整的句法
SELECT 语句的完整句法如下:
SELECT <目标表的列名或列表达式序列>
FROM <基本表名和(或)视图序列>
[WHERE <行条件表达式>]
[GROUP BY <列名序列>]
[HAVING <组条件表达式>]
[ORDER BY <列名[ASC|DESC]>,...]
句法中[ ]表示该成分可有,也可无。
整个语句的执行过程如下:
(1)读取FROM子句中基本表、视图的数据,执行笛卡尔积操作。
(2)选取满足WHERE子句中给出的条件表达式的元组
(3)按GROUP子句中指定列的值分组,同事提取满足HAVING子句中组条件表达式的那些组。
(4)按SELECT子句中给出的列名或列表达式求值输出。
(5)ORDER子句对输出的目标表进行排序,按附加说明ASC升序排列,或按DESC降序排列。
SELECT语句中,WHERE子句称为“行条件子句”,GROUP子句称为“分组子句”,HAVING子句称为“组条件子句”,ORDER子句称为“排序子句”。
5.3.3 数据查询中的限制和规定
1.SELECT子句中的规定
SELECT子句中用于描述查询输出的表格结构,即输出值的列名或表达式,其形式如下:
SELECT[ALL|DISTINCT] <列名或表达式序列> | *
(1)DISTINCT选项保证重复的行将从结果中去除;而ALL选项是默认的,将保证重复的行留在结果中,一般就不必写出。
(2)星号*是对于在FROM子句中命名表的所有列的简写。
(3)列表达式是对于一个单列求聚合之的表达式
(4)允许表达式中出现包含+、-、*和/以及列名、常数的算术表达式。
2.列和基本表的改名操作
有时,用户也可以要求输出的列名与基本表中列名不一致,可在SELECT子句中用“旧名 AS 新名”形式改名。
3.集合的并、交、差操作
当两个子查询结果的结构完全一致时,可以让这两个子查询执行并、交、差操作。并、交、差的运算符为UNION、INTERECT和EXCEPT。
(SELECT 查询语句1) UNION[ALL] (SELECT 查询语句2)
(SELECT 查询语句1) INTERECT[ALL] (SELECT 查询语句2)
(SELECT 查询语句1) EXCEPT[ALL] (SELECT 查询语句2)
上述操作中不带关键字ALL时,返回结果消除了重复元组;而带ALL时,返回结果中未消除重复元组。
5.3.4 条件表达式中的比较操作
1.算术比较操作
2.字符串的匹配操作
添加表达式中字符串匹配操作符是“LIKE”。在表达式中可使用两个通配符:
百分号(%):与零个或多个字符组成的字符串匹配
下划线(_):与单个字符匹配
为了使字符串中包含特殊字符(即%和_),SQL允许定义转义字符。转义字符紧靠特殊字符并放在它前面,表示该特殊字符将被当成普通字符。在LIKE比较中使用ESCAPE关键字来定义转义符。如果使用反斜线(\)作为转义符,那么:
LIKE'ab\%cd%'ESCAPE'\' 匹配所有以“ab%cd”开头的字符串
LIKE'ab\\%cd%'ESCAPE'\' 匹配所有以“ab\cd”开头的字符串
SQL允许使用NOT LIKE比较运算符搜寻不匹配项。
SQL还允许在字符上使用多种函数,例如连接(“||”)、提取子串、计算字符串长度、大小写转换操作。
3.空值的比较操作
SQL中允许列值为空,空值用保留字NULL表示。
SQL中规定,涉及到+、-、*、/ 的算术表达式中有一个值是空值时,表达式的值也是控制,涉及到空值的比较操作的结果认为是“false”。
在聚合函数中遇到空值时,除了COUNT(*)外,都跳过空值而去处理非空值。
4.集合成员资格比较
SQL提供SELECT语句的嵌套子查询机制。子查询是嵌套在另一个查询中的SELECT语句。
判断元组是否在子查询的结果(即集合)中的操作,称为“集合成员资格比较”。其形式如下:
<元组>[NOT]IN(<集合>)
这里的集合可以是一个SELECT查询语句,或者是元组的集合,但其结构应与前面元组的结构相同。IN操作符表示;如果元组在集合内,那么其逻辑值为true,否则为false。
5.集合成员的算术比较
其形式如下:
<元组>θ ALL | SOME | ANY (<集合>)
这里要求“元组”与集合中“元组”的结构一致。θ是算术比较运算符,“θ ALL”操作表示左边那个元组与右边集合中每一个元组满足θ 运算,“θ SOME”操作便是左边那个元素组与右边集合中至少一个元组满足θ 运算。ANY和SOME是同义词,早期的SQL标准用ANY,为避免与英语中ANY的意思混淆,后来的标准都改为SOME。
在SQL中,不允许对聚合函数进行复合运算,因此不能写成“SELECT MAX(AVG(SCORE))”形式。
6.集合空否的测试
可以用谓词EXISTS来测试一个集合是否为非空,或空。其形式如下:
[NOT]EXISTS(<集合>)
不带NOT的操作,当集合非空时(即至少存在一个元组),其逻辑值为true,否则为false。带NOT的操作,当集合为空时,其值为true,否则为false。
7.集合中重复元组存在否的测试
可以用谓词UNIQUE来测试一个集合里是否有重复元组存在。形式如下:
[NOT]UNIQUE(<集合>)
不带NOT的操作,当集合中不存在重复元组时,其逻辑值为true,否则为false。带NOT的操作,当集合中存在重复元组时,其逻辑值为true,否则为false。
<!--EndFragment-->
分享到:
相关推荐
SQL数据库第五章的作业可能涵盖了多个关键概念,包括查询、数据操作、表间关系以及数据库设计原则。以下是对这些核心知识点的详细阐述: 1. **SQL基本查询**:SQL查询是获取数据库中信息的基本方式。这涉及到SELECT...
Oracle第13章SQL语言基础 本资源为Oracle第13章SQL语言基础的教学资料,涵盖了SQL语言的基础知识,包括SQL语言概述、数据查询、数据操纵、事务控制、SQL函数等内容。 SQL语言概述 SQL(Structured Query Language...
在本资源"C#语言和SQL Server数据库基础-第5章上机练习.zip"中,我们主要探讨了C#编程语言与SQL Server数据库的基础知识及其在实际应用中的结合。这一章节的上机练习将帮助初学者深入理解这两个核心概念,通过实践来...
Oracle 数据库应用:第5章 SQL 语言.ppt
Oracle 11g SQL语言基础(DML) Oracle 11g 第5章 SQL语言基础(DML).ppt
在本资源包"C#语言和SQL Server数据库基础第5章.zip"中,我们可以深入学习C#编程语言与SQL Server数据库的基础知识。C#是微软公司推出的一种面向对象的、安全的、类型强化的编程语言,广泛应用于Windows平台的开发,...
《第六章 数据库及SQL查询语言》 数据库是存储和管理信息的核心工具,SQL(Structured Query Language)则是访问和操作这些数据库的标准语言。本章将深入探讨数据库的基础知识以及SQL的使用。 6.1 数据库基础知识 ...
《C#语言与SQL Server数据库基础-第8章上机练习》 在深入探讨C#语言与SQL Server数据库的基础知识时,我们首先需要理解这两者的核心概念。C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的...
【SQL语言概述】 SQL,全称为Structured Query Language,即结构化查询语言,是1972年由IBM公司为实验型关系数据库管理系统SYSTEM R设计的一种查询语言。起初名为SQUARE,后改为SEQUEL,最终简化为SQL。SQL是关系...
5. **SQL Server基础知识**:了解数据库的概念、表的创建与管理,掌握SQL语言的基本操作,如SELECT查询、INSERT插入、UPDATE更新和DELETE删除记录。 6. **事务处理**:理解SQL Server中的事务概念,如何通过BEGIN ...
它支持标准的SQL语言,包括SELECT、INSERT、UPDATE、DELETE等基本操作,以及更复杂的JOIN、子查询、视图、存储过程等功能。在SQL Server中,我们可以通过创建数据库、表、索引来组织和优化数据。安全性方面,SQL ...
SQL 语言基础知识点 SQL 语言是关系数据库管理系统的核心语言,用于完成数据定义、数据操纵、数据控制等核心功能。SQL 语言的核心功能包括 SELECT、CREATE、DROP、ALTER、INSERT、UPDATE、DELETE、GRANT、REVOKE 等...
"SQL语言练习题和答案" 第三章 SQL 语言练习题和答案是关系数据库管理系统中的一种重要语言,用于定义、操作和控制关系数据库中的数据。下面我们将对该语言的基本概念和操作进行详细的解释。 SQL 语言的基本概念 ...
### SQL语言简明讲稿-第一章 #### 一、SQL简介 结构化查询语言(Structured Query Language),简称SQL,是一种特殊目的的编程语言,主要用于存取数据以及查询、更新和管理关系数据库系统。SQL不仅是一种数据库查询...
本书第五章介绍了如何使用SQL管理数据库,包括创建、修改和删除表,以及如何维护数据库的完整性和安全性。还讲解了索引的概念、创建和使用方法。 《图解SQL数据库语言轻松入门》是一本非常实用的学习指南,旨在帮助...
"第2章:SQL语言(3).ppt"至"第2章:SQL语言(5).ppt"可能涵盖了SQL的数据查询、插入、更新和删除操作,即DQL(Data Query Language)、DML(Data Manipulation Language)和DDL(Data Definition Language)。...
2. **SQL语言**:SELECT语句用于查询数据,INSERT用于插入数据,UPDATE用于更新数据,DELETE用于删除数据。还有JOIN操作用于连接不同表的数据。 3. **T-SQL扩展**:存储过程、触发器、函数(内置函数与自定义函数)...