文章目录
一,SQL数据定义
(Data Definition Language)
数据库中的关系集合必须由数据定义语言(DDL)指定给系统。
例:
CREATE TABLE instructor(
ID char(5),
name varchar(20) not null,
dept_name varchar(20),
primary key (ID));
参见:
super-key
candidate key
primary key
SQL的DDL不仅能够定义一组关系,还能够定义每个关系的信息,包括:
- 每个关系模式
- 每个属性的取值类型
- 完整性约束
- 每个关系维护的索引集合
- 每个关系在磁盘上的物理存储结构
二,基本数据类型
(Domain Types in SQL)
- char(n):固定长度为 n 的字符串
- varchar(n):最大长度为 n 的,可变长度字符串
- int:整数类型(和机器相关的整数类型的子集),等价于全程 integer
- smallint:小整数类型(和机器相关的整数类型的子集)
- numeric(p,d):定点数(这个数有 p 位,其中第 d 位数在小数点的右边)
- real,double precision:浮点数与双精度浮点数,精度与机器其相关
- float(n):精度至少为 n 位的浮点数
- null:每种类型都可以包含一个特殊值,即空值。可以申明属性值不为空,禁止加入空值。
- data:日期,含 年 月 日,如“1999-02-03”
- time:时间,含 时 分 秒,如“12 : 28 : 15.07”’
- timestamp:日期 + 时间,如“1999-02-03 12 : 28 : 15.07”
SQL中有许多函数,用于处理各种类型的数据及其类型转换,但各数据库中函数的标准化程度不同
三,基本模式定义
1,CREATE TABLE 命令
我们用 create table 命令定义SQL关系:
其中,r 是关系名,每个 Ai 是关系 r 模式中的一个属性名,Di 是属性 Ai 的域
SQL支持许多不同的完整性约束。
- not null:一个属性上的 not null 约束表明在该属性上不许为空值
- 主键 primary key(A1, … ,An):表明属性 A1, … ,An 构成关系的主码。主码属性必须非空且唯一。
- 外码 foreign key(A1, … ,Am)references (s):声明表示关系中任意元组的属性上 A1, … ,Am 上的取值必须对应关系 s 中某元组的主码属性上的取值
- check(P):P 是谓语条件
举例:声明 ID 为 instructor 的主码,并确保 salary 的值非负
方法一
CREATE TABLE instructor(
ID char(5),
name varchar(20) not null,
salary numeric(8,2),
primary key (ID),
check (salary >= 0));
方法二
CREATE TABLE instructor(
ID char(5) primary key,
name varchar(20) not null,
salary numeric(8,2),
check (salary >= 0));
举例:关于 foreign key(A1, … ,Am)references (s)
定义外码(dept_name),参照关系s
create table student (
ID varchar(5),
name varchar(20) not null,
dept_name varchar(20),
tot_cred numeric(3,0),
primary key (ID),
foreign key (dept_name) references department);
create table takes (
ID varchar(5),
course_id varchar(8),
sec_id varchar(8),
semester varchar(6),
year numeric(4,0),
grade varchar(2),
primary key (ID, course_id, sec_id, semester, year) ,
foreign key (ID) references student,
foreign key (course_id, sec_id, semester, year) references section);
2,修改模式(Uptable Date Table)
drop table 命令
用于从数据库中删除关于被去掉关系的所有信息
- drop table r
例:将 关系instructor “满门抄斩”
drop table instructor;
alter table 命令
- alter table r add A D
为已有关系(r),增加属性(A,域为 D)
关系中所有元组在新属性上取值被设定为 null
例:在 关系instructor 中加入 birthday属性(日期)
alter table instructor add birthday date;
- alter table r drop A
从关系 r 中,去掉属性 A(但很多数据库系统不支持此操作)
例:从 关系instructor 中删除 birthday属性
alter table instructor drop birthday;
- alter table r modify (A D);
还可以用来修改关系中的属性
例:修改 instructor关系中的 ID属性
alter table instructor modify (ID char(10));
四,基本查询结构
(Basic Query Structure of SQL Queries)
1,SQL查询的基本结构
SQL查询的基本结构由3个子句构成:select,from,where
select 子句
- 基本方法,找出指定内容
例:找出所有教师的名字
select name
from instructor;
注意:SQL不允许在属性名称中使用 “–”,但可以使用“_”,例:dept_name
且SQL中是不区分字母大小写的!
SQL允许在关系以及SQL表达式中出现的重复的元组
- 若要去除重复,可在select后加关键词distinct
例:查询 instructor 中所有的系名,并去除重复
select distinct dept_name
from instructor;
- 也可以使用关键词 all 来指明保留重复(SQL默认就是 all)
例:只找出所有系名
select all dept_name
from instructor;
- 星号 “ * ”,在 select子句中表示所有属性
例:选出 instructor关系中的所有属性
select *
from instructor;
- select子句还可以带有 + - * / 运算符的算术表达式,运算对象可以是常数或元组的属性
例:将 instructor关系中的属性salary (x1.05倍)
select ID,name,salary*1.05</