SQL概述 Flashcards
SQL特点
1。综合统一。SQL集数据定义语言DDL、数据操纵语言DML,数据控制语言DCL的功能于一体
2。高度非过程化。用SQL进行数据操作,只要提出"做什么",而无须指明"怎么做",因此无需了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。
3。面向集合的操作方式。SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
4。以同一种语法结构提供多种使用方式。SQL既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,作为嵌入式语言,SQL语句能够嵌入到高级语言程序中,供程序员设计程序时使用。
5。语言简洁,易学易用。
SQL功能
数据查询,数据操纵,数据定义,数据控制。
综合统一
数据库系统的主要功能是通过数据库支持的数据语言来实现的。
非关系模型(层次模型、网状模型)的数据语言一般都分为:模式数据定义语言,外模式数据定义语言,数据存储有关的描述语言,数据操纵语言。它们分别用于定义模式、外模式、内模式和进行数据的存取与处置。当用户数据库投入运行后,如果需要修改模式,必须停止现有数据库的运行,转储数据,修改模式并编译后再重装数据库,十分麻烦。
SQL集数据定义语言DDL、数据操纵语言DML,数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动:包括:定义关系模式,插入数据,建立数据库;对数据库中的数据进行查询和更新;数据库重构和维护;数据库安全性、完整性控制;等一系列操作要求。
这为数据库应用系统的开发提供了良好的环境。用户在数据库系统投入运行后,还可根据需要随时地逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩展性。
在关系模型中实体和实体之间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一性,查找、插入、删除、更新等每一种操作都只需要一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。
高度非过程化
非关系数据模型的数据操纵语言是"面向过程"的语言,用"过程化"语言完成某项请求,必须指定存取路径。
而用SQL进行数据操作,只要提出"做什么",而无须指明"怎么做",因此无需了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。
不但大大减轻了用户的负担,而且有利于提高数据独立性。
面向集合的操作方式
非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。
SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
以同一种语法结构提供多种使用方式
SQL既是独立的语言,又是嵌入式语言。
作为独立的语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供多种不同使用方式的做法,提供了极大的灵活性与方便性。
语言简洁,易学易用
SQL功能极强,但由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词。
SQL的动词
数据查询:SELECT
数据定义:CREATE,DROP,ALTER
数据操纵:INSERT,UPDATE,DELETE
数据控制:GRANT,REVOKE
支持SQL的RDBMS同样支持关系数据库三级模式结构
外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。
用户可以用基本表和视图进行查询或其他操作,基本表和视图一样,都是关系。
基本表
是本身独立存在的表,在SQL中一个关系就对应一个基本表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构是任意的,对用户是透明的。
SQL的数据定义功能
模式定义、表定义、视图和索引的定义。
关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有表、视图和索引。
SQL的数据定义语句
模式 CREATE/ DROP SCHEMA 表 CREATE/ DROP/ ALTER TABLE 视图 CREATE/ DROP VIEW 索引 CREATE/ DROP INDEX SQL标准通常不提供修改模式定义、修改视图定义和修改索引定义的操作。用户如果想修改这些对象,只能先将它们删除掉,然后再创建。
模式定义语句
CREATE SCHEMA AUTHORIZATION
如果没有指定,那么隐含为。
要创建模式,调用该命令的用户必须拥有DBA权限,或者获得了DBA授予的CREATE SCHEMA的权限。
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。
在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。即用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图,定义授权。
CREATE SCHEMA AUTHORIZATION [||]
删除模式语句
DROP SCHEMA
其中CASCADE和RESTRICT两者必选其一。
CASCADE(级联):在删除模式的同时把该模式中所有的数据库对象全部一起删除。
RESTRICT(限制):如果该模式中已定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。
基本表的定义
创建了一个模式,就建立了一个数据库的命名空间,一个框架。在这个空间中首先要定义的是该模式包含的数据库基本表。
CREATE TABLE ( [列级完整性约束条件][,[列级完整性约束条件]]…[,]);
建表的同时还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由RDBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
域
每一个属性来自一个域,它的取值必须是域中的值。
在SQL中域的概念用数据类型来实现。定义表的各个属性时需要指明其数据类型及长度。(不同的RDBMS中支持的数据类型不完全相同。)
一个属性要选用哪种数据类型,要根据实际情况来决定,一般从两个方面来考虑,一是取值范围,二是要做哪些运算。
数据类型
CHAR(n) 长度为n的定长字符串 VARCHAR(n) 最大长度为n的变长字符串 INT 长整数(也可以写作INTEGER) SMALLINT 短整数 NUMERIC(p,d) 定点数,由p位数字(不包括符号、小数点)组成,小数后面有d位数字 REAL 取决于机器精度的浮点数 Double Precision 取决于机器精度的双精度浮点数 FLOAT(n) 浮点数,精度至少为n位数字 DATE 日期,包含年、月、日,格式为YYYY-MM-DD TIME 时间,包含一日的时、分、秒,格式为HH:MM:SS
模式与表
每一个基本表都属于某一个模式,一个模式包含多个基本表。 定义基本表时定义它所属的模式的方法: 1。在表名中明显地给出模式名。 (CREATE TABLE "S-T".Student(...);) 2。在创建模式语句中同时创建表。 3。设置所属的模式,这样在创建表时表名中不必给出模式名。 当用户创建基本表(其他数据对象也一样)时若没有指定模式,系统根据搜索路径来确定该对象所属的模式。 搜索路径包含一组模式列表,RDBMS会使用模式列表中第一个存在的模式作为数据库对象的模式名。若搜索路径中的模式名不存在,系统将给出错误。
搜索路径
显示当前的搜索路径:SHOW search_path;
搜索路径的当前默认值是:$user, PUBLIC。其含义是首先搜索与用户名相同的模式名,如果该模式不存在,则使用PUBLIC模式。
DBA用户也可以设置搜索路径,例如:SET searth_path TO “S-T”,PUBLIC;
然后定义基本表:CREATE TABLE Student(…);
修改基本表
格式: ALTER TABLE [ADD [完整性约束]] [DROP ] [ALTER COLUMN ]; 其中是要修改的基本表,ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定列的完整性约束条件,ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型。 不论基本表中原来是否已有数据,新增加的列一律为空值。
删除基本表
DROP TABLE [RESTRICT|CASCADE];
RESTRICT:该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如CHECK,FOREIGN KEY等约束),不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。
CASCADE:该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除。
缺省情况是RESTRICT。
索引
建立索引是加快查询速度的有效手段。用户可以根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。
建立与删除索引由数据库管理员DBA或表的属主,即建立表的人,负责完成。系统在存取数据时会自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引。
建立索引
CREATE [UNIQUE][CLUSTER] INDEX ON ([][,[]]…);
其中,是要建索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔。每个后面还可以用指定索引值的排列次序,可选ASC(升序)或DESC(降序),缺省值为ASC。
UNIQUE:此索引的每一个索引值只对应唯一的数据记录。
CLUSTER:聚簇索引(索引项的顺序与表中记录的物理顺序一致的索引组织)。
用户可以在最基经常查询的列上建立聚簇索引以提高查询效率。在一个基本表上最多只能建立一个聚簇索引。建立聚簇索引后,更新该索引列上的数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。
删除索引
索引一经建立,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作的时间,但如果数据增删改频繁,系统会花很多时间来维护索引,从而降低了查询效率。
DROP INDEX ;
删除索引时,系统会同时从数据字典中删去有关该索引的描述。
在RDBMS中索引一般采用B+树、HASH索引来实现。B+树索引具有动态平衡的优点。HASH索引具有查找速度快的特点。
索引属于内模式的范畴。
用户使用CREATE INDEX语句定义索引时,可以定义索引是唯一索引、非唯一索引或聚簇索引。至于某一索引是采用B+树,还是HASH索引则由具体的RDBMS来决定。
数据查询
查询是数据库的核心操作。 SELECT [ALL|DISTINCT] [,]... FROM [,]... [WHERE ] [GROUP BY [HAVING ]] [ORDER BY [ASC|DESC]]; 含义:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。 如果有GROUP BY子句,则将结果按的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果GROUP BY子句带HAVING短语,则只有满足指定条件的组才予以输出。 如果有ORDER BY子句,则结果表还要按的值的升序或降序排序。 SELECT语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。
单表查询
仅涉及一个表的查询。
查询
SELECT
用小写字母表示
LOWER()
消除取值重复的行
DISTINCT
若没有DISTINCT,则缺省为ALL。
查询满足指定条件的元组
WHERE
比较大小
= > < >= <> !> !<
确定范围
BETWEEN…AND…
NOT BETWEEN…AND…
确定集合
IN
NOT IN
字符匹配
[NOT] LIKE ‘’ [ESCAPE ‘’]
%:任意长度(长度可以为0)的字符串。
:任意单个字符。
如果LIKE后面的匹配串中不含通配符,则可以用=运算符取代LIKE谓词,用!=或<>运算符取代NOT LIKE谓词。
如果用户要查询的字符串本身就含有通配符%或,这时就要使用ESCAPE ‘‘短语,对通配符进行转义了。