1、SQL
Structured Query Language,即结构化查询语言。 是关系数据库的标准语言。
2、sql对关系数据库模式的支持

3、数据定义
1、SQL 的数据定义语句

SQL 不提供修改模式定义、修改视图定义和修改索引定义的操作,若想修改需先删掉再重建。
2、模式的定义与删除
a、定义模式
create schema <模式名> authorization <用户名>;
如果没有指定 模式名,隐含为 用户名。
实例:
在 mysql 中定义模式(即创建数据库)语句为:
creater schema wtf; /*或者使用:*/ creater database wtf; /*常用*/b、删除模式
drop schema <模式名>
其中 cascade(级联)表示删除数据库及其中所有对象一起删除,restrict(限制)只有数据库中没有对象时才能删除。
实例:
在 mysql 中 删除数据库语句为:(mysql是直接删除整个数据库,相当于 cascade)
drop schema wtf; /*或者使用: */ drop database wtf; /*常用*/
3、定义基本表


建表的同时通常还可以定义与该表有关的完整性约束条件,如
primary key 指示为主键,unique 指示取唯一值,not null 指示为非空。还可以指定外码如:
create table sc( sno char(7), cno char(4), grade smallint, primary key(sno,cno),/*主码*/ foreign key (sno) references student(sno), /*表级完整性约束条件,标明外码及其被参照表*/ foreign key (cno) references course(cno) );
4、SQL 数据类型
要注意,不同的 RDBMS 中支持的数据类型不完全相同
SQL主要数据类型如下:
| 数据类型 | 含义 |
| 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 |
5、模式与表
每一个基本表都属于某一个模式,一个模式包含多个基本表
定义基本表时,定义它所属的模式的方法如下:
a、在表名中明显的给出模式名
如:create table "S-T".student(......);
b、在创建模式语句中同时创建表
c、设置所属模式
如:设置搜索路径: set search_path to "S-T",public;
在 mysql 中可以使用: use 数据库名; 来指定使用哪个数据库
6、修改基本表
alter table <表名>
[ add <新列名> <数据类型> [完整性约束] ]
[ drop <完整性约束名> ]
[ alter column <列名> <数据类型> ];
实例:
alter table student add sage int; alter table student alter column sage smallint;mysql 中:

7、删除表
drop table < 表名 > [ cascade | restrict ];
mysql 中 则直接删除整个表数据,相当于 cascade
8、建立索引
建立索引是加快查询速度的有效手段,用户可以根据应用环境的需要,在基本表上建立一个或多个索引
以提供多种存取路径,加快查找速度。
create [ unique ] [ cluster ] index <索引表>
on <表名> (<列名> [ <次序> ] [, <列名> [ <次序> ] ]...);
实例:

其中次序可选 asc(升序,缺省值),desc(降序),unique 表明此索引的每一个索引值只对应唯一的数据记录,
cluster 表示要建立的索引是聚簇索引,所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。
9、删除索引
drop index <索引名>;
建立索引是为了减少查询操作的时间,但如果数据增删改频繁,系统会花费许多时间来维护索引,从而降低了查询效率。
删除索引表时,系统会同时从数据字典中删去有关该索引的描述。
4、数据更新
1、插入数据
a、插入元组
insert into <表名> [ ( <属性列 1 > [, <属性列 2> ] ... ) ]
values ( <常量 1> [, <常量 2> ] ... );
其功能是将新元组插入指定表中,属性列与常量列依次对应,没有出现的属性列将取空值,但 not null 的属性列不能取空值。
如果 into 子句中没有指名任何属性列名,则新插入的元组必须在每个属性列上均有值。
实例:

b、插入子查询结果
insert
into <表名> [ (<属性列 1> [, <属性列 2> ] ... ) ]
子查询;
实例:
insert into dept_age(sdept, avg_age) select sdept,avg(sage) from student group by sdept;
2、修改数据
修改数据又称更新操作,一般格式为
update <表名>
set <列名> = <表达式> [, < 列名> = < 表达式 > ]...
[ where <条件> ];
其功能是修改指定表中满足 where 子句条件的元组,其中 set 子句给出 表达式 的值用于取代相应的属性列值,
若省略 where 子句,则表示修改表中所有元组
实例:
a、修改某一元组的值

b、修改多个元组的值
update student set sage = sage + 1;c、带子查询的修改语句
update sc
set grade = 0
where 'cs' =
(select sdept
from student
where student.sno = sc.sno);
3、删除数据
delete
from < 表名 >
[ where <条件> ];
若省略 where 子句,表示删除表中全部元组,但表的定义仍存在。
可以删除某一个元组的值,可以删除多个元组的值,还可以使用带子查询的删除语句。
实例:

5、数据查询
一般格式:
select [ all | distinct ] <目标列表达式> [ , <目标列表达式> ] ...
from <表名或视图名> [, <表名或视图名> ] ...
[ where <条件表达式> ]
[ group by <列名 1> [ having <条件表达式> ] ]
[ order by <列名 2> [ asc | desc ] ];
即根据 where 子句的条件表达式,从 from 子句指定的基本表或视图中找出满足条件的元组,再按 select 子句的目标表达式,
选出元组中属性值形成果表,如果有 gruop by 子句,则将结果按 <列名 1> 的值进行分组,该属性列值相等的元组为一个组,
通常会在每组中作用聚集函数,如果子句带 having 短语,则只有满足条件的组才予以输出。order by 使结果表按 <列名 2> 排序。
1、单表查询
(1)选中表中若干列
a、查询指定列

b、查询全部列

c、查询经过计算的值

(2)选中表中的若干元组
a、取消取值重复的行(使用 distinct 关键字)

b、查询满足条件的元组
常用的查询条件:
| 查询条件 | 谓词 |
| 比较 | = , > , < , >= , <= , != , <>(不等于) , !> , !< ; not + 上诉比较运算符 |
| 确定范围 | between and , not between and |
| 确定集合 | in , not in |
| 字符匹配 | like , not like |