1. SQL查询语言概述
“In 1986, the American National Standards Institute (ANSI) and the International Organization for Standardization (ISO) published an SQL standard, calledSQL-86. ANSI published an extended standard for SQL, SQL-89, in 1989.
The next version of the standard was SQL-92 standard, followed by SQL:1999, SQL:2003, SQL:2006,and most recently SQL:2008.
The bibliographic notes provide references to these standards.”
标准是企业竞争的制高点
1.1 SQL的组成部分
Data-definition language ——DDL | 数据定义(描述)语言。提供了定义关系模式、删除关系和修改关系模式的命令。 |
---|---|
Data-manipulation Language ——DML | 数据操作语言,提供了从数据库:查询、插入元组、删除和修改元组的功能 |
Integrity | 完整性,The SQL DDL包括了用于指定存储在数据库中的数据必满足完整性约束的命令。不允许违反完整性约束的更新。 |
View definition | SQL DDL包括用于定义视图的命令 |
---|---|
Transaction control | 事务控制,指定事务的开始和结束。 |
Embedded SQL and dynamic SQL | 嵌入式和动态SQL定义了如何在通用编程语言(如C、c++和Java)中嵌入SQL语句 |
Authorization | SQL DDL包括用于指定对关系和视图的访问权限的命令 |
- 注意:教材上的例子都是根据SQL 标准设计的,和具体的DBMS软件中的语法有所区别
1.2 Data Definition Language 数据定义语言
SQL DDL, 不只可以指定关系(relations)集,还可以指定每个关系的详细细信息 :
- The schema for each relation.定义模式
- The types of values associated with each attribute. 属性数据类型
- The integrity constraints. 完整性约束
- The set of indices to be maintained for each relation 索引
- Security and authorization information for each relation.安全,授权
- The physical storage structure of each relation on disk.物理存储
1.2.1 Basic Types基本类型
类型 | 说明 |
---|---|
char(n) | 用户指定长度为n的固定长度(fixed-length)字符串,若输入不足n个字符,会用空格补全。所以char(n)类型的变量,长度永远是n |
varchar(n) | 一个由用户指定的最大长度n的 可变长度(variable-length) 字符串,若输入不足n个字符,无碍。不会像上面的类型用空格补全。 |
int | 一个整数(依赖于机器的整数的有限子集)。 |
smallint | 短整型 |
numeric(p, d) | p代表整数位加小数位的总位数, d代表小数位数 |
real, double precision | 双精度实数,浮点数和双精度浮点数与机器相关的精度 |
float(n) | 一种精度至少为n位的浮点数 |
… |
空值NULL:
每种类型都可以包含。
表示可能存在,但未知,或根本不存在的缺失值。
在某些情况下,我们可能希望禁止输入空值
1.2.2 如何为表中属性选择恰当的数据类型
一般原则
- 判断数据的种类,需要存储的数据的大小和最大长度,
对于数字数据类型还要考虑精度和小数位数 - 在所用的DBMS找得到可用的数据类型,够用即可;
- 权衡存储空间和查询效率
- 数据类型的长度越小,存储大量数据所需要的存储空间就越小
分配的页面就越少,一次读取到内存中的数据记录就会越多
操作数据的效率就会提高很多。
- 数据类型的长度越小,存储大量数据所需要的存储空间就越小