SQL的定义:
SQL的特点:
SQL功能 | 动词 |
---|---|
数据查询 | select |
数据定义 | create、drop、alter |
数据操纵 | insert、update、delete |
数据控制 | grant、revoke |
基本表
存储文件
视图
一个关系数据库管理系统的实例可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象
定义
CREATE SCHEMA <模式名>AUTHORIZATION<用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];
删除模式
DROP SCHEME <模式名>
定义
create table 表名(
列名 数据类型 not null, //非空性约束
列名 数据类型 unique, //唯一性约束
列名 数据类型 check(检查条件),//检查性约束
............
constraint 主键名 primary key(主属性列表),
constraint 外键名 foreign key (外键属性列表) references 被参考表名(参考列),
constraint 检查名 check(校验条件)
)
[例3.10] 增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
UNIQUE:不能重复可以为空
主码:不能重复不可以为空
建立索引的目的:加快查询速度
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]···
FROM <表名或视图名> [,<表名或视图名>···]|(
指定DISTINCT关键词,去掉表中重复的行
比较:= , > , < , >= , <= , != , <>(也是不等于), !> , !< , not+上述运算符
确定范围:between and , not between and
where age between 18 and 20;
等价于where age <=18 and age<=20;
确定集合:in , not in
字符匹配:like , not like
like
可以当做=
用以比较字符串,也可以使用通配符来模糊匹配字符串。%
表示匹配0个或多个字符,_
匹配一个。\%
用来转义百分号,以此类推。如果用户要查询的字符串本身就含有通配符%或_,这时就要使用ESCAPE‘<换码字符>’短语就可以对通配符转义了空值:is null,is not null
=null
判断。因为null
不等于任何值。逻辑运算:and , or , not
ORDER BY子句
聚集函数
如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。
注意:where子句中是不能用聚集函数作为条件表达式的,聚集函数只能用于select子句和group by中的having子句。
GROUP BY子句
连接查询:同时涉及两个以上的表的查询
等值与非等值连接查询
等值连接:
若在等值连接中把目标列中重复的属性列去掉则为自然连接
自身连接:一个表与其自己进行连接,需要给表起别名以示区别
外连接
左外连接
带有IN谓词的子查询
带有比较运算符的子查询
带有ANY(SOME)或ALL谓词的子查询
带有EXISTS谓词的子查询
....
where exists (select .........)
当后面的子查询结果集不为空时,exists返回true
,否则返回false
。
not exists和exists刚好相反。
两种形式:一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组
1、插入元组
INTO子句
插入子查询结果
可以一次插入多个元组
关系数据库管理系统在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
修改操作又称为更新操作,
update 表名 set 列名=表达式,列名=表达式,..... where 条件
功能:
修改某一个元组的值
修改多个元组的值
带子查询的修改语句
关系数据库管理系统在执行修改语句时会检查所插元组是否破坏表上已定义的完整性规则
delete from 表名 where 条件。
视图是从一个或几个基本表导出的表,是一个虚表,只存放视图的定义,而不存放视图对应的数据
建立视图
定义IS_Student视图时加上了with check option,对该视图进行插入、修改和删除操作时,关系数据库管理系统会自动加上Sdept="IS"的条件。
因为IS_S1视图上还道出了IS_S2视图,所以被拒绝执行。如果确定要删除,需要级联删除
用户角度:查询视图与查询基本表相同
关系数据库管理系统实现视图查询的方法
视图消解法
有些情况下,视图消解法不能生成正确的查询。
由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。
一般的,行列子集视图是可更新的,并不是所有的视图都是可更新的。
视图的作用(优点)
1 .试述 SQL 语言的特点。
2 .试述 SQL 的定义功能。S
SQL 的数据定义功能包括定义表、定义视图和定义索引。 SQL 语言使用 cREATE TABLE 语句建立基本表, ALTER TABLE 语句修改基本表定义, DROP TABLE 语句删除基本表;使用 CREATE INDEX 语句建立索引, DROP INDEX 语句删除索引;使用 CREATE VIEW 语句建立视图, DROP VIEW 语句删除视图。
3.什么是基本表?什么是视图?
两者的区别和联系是什么?基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
4 .试述视图的优点。
5.所有的视图是否都可以更新?为什么?
不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的
6 .哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。
答:基本表的行列子集视图一般是可更新的。若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。