概述
SQL语言
关系代数的各种操作可以用三种方式实现:
- 关系代数
- 关系语言
- SQL语言
SQL(Structured Query Language)
结构化查询语言,是关系数据库的标准语言
特点
- 综合统一(DDL、DQL、DML、DCL)
集合了四种子语言
DDL(Data Define Language)数据定义语言
DQL(Data Query Language)数据查询语言
DML(Data Manipulation Language)数据操纵语言
DCL(Data Control Language)数据控制语言 - 高度非过程化
过程化(既要说清做什么,又要说清怎么做):
例如要排序,要说明排序方式
非过程化(要说清做什么,不用说怎么做):
例如插入,要说清插什么数据就好,不需要在意怎么插入 - 面向集合的操作方式
一次一集合(无论是操作对象还是操作结果,都是集合)这种操作方式就是集合的操作方式 - 以同一种语法结构提供多种使用方式
可以嵌套在任何宿主语言(如C++,Java的JDBC,Python的Pymysql等) - 语言简洁、易学易用
学生-课程表
表结构
Student和Course是实体性的表SC表叫联系表
一个学生实体可以对应多个课程实体
数据定义
一个模式中可包含若干表、视图、索引
模式是一种容器,可以按照某种用途、方式把表、视图、索引等对象分别放到不同的容器里,模式本身不存储数据,只是一种组织方式,是一种容器。(类似文件夹)
模式定义
创建模式
[例1]定义一个学生-课程模式S-T
create schema "S-T" authorization wang;
为用户wang定义了一个模式S-T
- Oracle中一个用户只能对应一个模式(用户名和模式名一样)
- SQLserver支持一个用户多个模式,但是一个模式只能对应一个用户
- 模式名单引号双引号都可以
[例2]create schema authorization wang;
如果没有指定模式名,模式名隐含为用户名
删除模式
drop schema <模式名> <cascade|restrict>
- cascade 级联
删除模式的同时把该模式中的所有数据库对象全部删除 - restrict 限制
如果该模式中定义了下属的数据库对象(表,视图等),则拒绝删除语句的执行
当该模式中没有热河下属对象时,才执行
drop schema zhang cascade;
基本表的定义、删除与修改
基本表也叫表、基表、关系、二维表
一、定义基本表
create table <表名>
(<列名><数据类型>[<列级完整性约束条件>],
<列名><数据类型>[<列级完整性约束条件>,
...
[,<表级完整性约束条件>])
建立“学生”表Student,学号是主码,姓名取值唯一
**
关键字、用户、密码 、字bai段名 、表名、序列名du 、触发器名等是不区分的,我们平时进zhi入都是大小写随便输入的表名,字段名,关键字大小写忽略表名,字段名不能使用关键字,表名,字段名不可以使用数字开头,中间不能出现特殊符号表名,字段名长度不能超过30个字符表名,字段名定义需要有含义。
**
create table student
(sno char(9) primary key,
sname char(20) unique,
ssex char(2) check(ssex='男' or ssex='女'),
sage smallint not null,
sdept char(20)
);
建立“课程”表Course
表级完整性约束
create table course(
cno char(4) primary key,
cname char(40),
cpno char(4),
ccredit smallint,
foreign key (cpno) references course(cno)
);
或者外键约束写成列级完整性约束
create table course(
cno char(4) primary key,
cname char(40),
cpno char(4) foreign key references course(cno),
ccredit smallint
);
或者
create table course(
cno char(4) primary key,
cname char(40),
cpno char(4) references course(cno),
ccredit smallint
);
建立“学生选课”表SC
create table sc(
sno char(9),
cno char(4),
grade smallint,
primary key (sno,cno),
foreign key (sno) references student(sno),
foreign key (cno) references course(cno)
);
因为主键是两个字段组合,所以写成表级完整性
五种完整性约束
- 主键约束
- 唯一约束
- 非空约束
- check约束
- 外键约束
插入元组
语句格式
insert into <表名> [(<属性列1>,<属性列2>...)]
values (<常亮1>[,<常量2>...])
将新元组插入指定表中
insert into student (sno,sname,ssex,sdept,sage)
values ('201215128','陈东','男','IS',18);
数据类型
数据更新
修改基本表
alter table<表名>
[add [column] <新列名> <数据类型> <完整性约束>]] # 新增列(属性)
[add <表级完整性约束>] #增加完整性约束(五个之一)
[drop [column] <列名> <cascade|restrict>] # 删除一列
[drop constraint <完整性约束名> [cascade|restrict]] #删除一列的完整性约束
[alter column <列名> <数据类型>];
案例
alter table student add s_entrance datetime;
alter table student alter column sage int;
alter table course
add unique(cname);
查勘表定义:
sp_help 表名(SQLSrver);
删除基本表
drop table <表名> [restrct|cascade];
- cascade:欲删除的基本表不能被其他表的约束所引用(外键约束)
如果存在依赖该表的对象(视图或索引),则此表也不能被删除 - cascade:删除该表没有限制,在删除表的同时,相关的依赖对象一起删除
案例
drop table student cascade;
- 基本表定义被删除,数据被删除
- 表上建立的索引、视图、触发器等一般也将被删除
作业:
小结
-
在SQL语言中域是用数据类型和长度实现的
-
确定列的数据类型和长度时,要考虑该列要做哪些运算。
-
定长字符串类型的优点是:操作效率高。缺点:可能浪费空间。
变长字符串类型的优点是:操作效率低,缺点是:节省空间。
-
完整性约束条件