数据库系统概念笔记 CH3
第三章 SQL
SQL数据定义
数据库中的关系集合必须由数据定义语言(DDL)指定给系统
SQL支持多种数据类型,包括:
- char(n):固定长度为n的字符串
- varchar(n):最大长度为n的可变长字符串
- int:整数类型
- smallint:小整数类型
- numeric(p,d):定点数,p位数字,d位在小数点后面
- real,double precision:浮点数,双精度浮点数
- float(n):精度至少为n的浮点数
补充:如果使用char(5)存储"abc",则后面未使用的两位将补充空格,如果使用varchar就不会出现该情况。故如果设计字符串的比较问题,个人建议均使用varchar较为方便,可以避免一些问题。
--创建一个表 通用格式:
creat table r
(A1,D1
A2,D2,
...
An,Dn,
<完整性约束1>
...
<完整性约束n>
);
--例如:
create table department
(dept_name varchar(20),
building varchar(15),
budget numeric(12,2),
primary key (dept_name) --完整性约束,将dept_name设置为主码
);
完整性约束:
- primary key(A1,A2,…An):表示属性A1,A2,…An构成了该关系的主码。主码必须非空且唯一
- foreign key(A1,A2,…An) references table2 : 声明表示关系的任意元组的外码属性必须与后者的主码属性一致
- not null :表示该属性不能为空值
基本的插入、删除命令:
--插入命令
insert into instructor
values(id,name..);
--删除元组
delete from student ;--删除所有元组
delete table student ;--彻底删除,该关系将被删除
--为原有关系增加属性
alter table r add A D;
--其中,r是关系的名字, A是添加属性的名字,D是添加属性的域
--为原有关系删除属性
alter table r drop A;
SQL查询的基本结构
基本结构:select … from … where…
- select子句用来列出查询结果中所需的属性
- from子句是一个查询求值中需要访问的关系列表
- where子句是一个作用在from子句中关系的属性上的谓词
例如:
--找出所有教师的名字
select name
from instructor;
--找出所有计算机学院的教师名字
select name
from instructor
where dept_name='Comp.Sci.'
可以通过在select后加入distinct去除重复,使用all显式声明不去重
--去重