关系数据库标准语言SQL
Sdudent
学号Sno | 姓名Sname | 性别Ssex | 年龄Sage | 所在系Sdept |
---|---|---|---|---|
201215121 | 李勇 | 男 | 20 | CS |
201215122 | 刘晨 | 女 | 19 | CS |
201215123 | 王敏 | 女 | 18 | MA |
201215124 | 张立 | 男 | 19 | IS |
Course
课程号Cno | 课程名Cname | 先行课Cpno | 学分Ccredict |
---|---|---|---|
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | ||
7 | pascle语言 | 6 |
学号Sno | 课程号Cno | 成绩Grade |
---|---|---|
201215121 | 1 | 92 |
201215121 | 2 | 85 |
201215121 | 3 | 88 |
201215122 | 2 | 90 |
201215122 | 3 | 80 |
数据定义
模式的定义与删除
*CREATE SCHEMA<模式名>AUTHORIZATION<用户名> *
例:为用户WANG定义一个学生-课程模式S-T
CREAT SCHEMA “”S-T UTHORIZATION WANG;
删除
DROP SCHEMA<模式名>CASCADE|RESTRICT>;
基本表的建立与删除
建立
CREATE TABLE<表名>(<列名><数据类型>)[列级完整性约束条件]
例:建立一个学生表
CREATE TABLE Student
(Sno CHAR(15) PRIMARY KEY,
Sname CHAR(15) NOT NULL,
Sexy CHAR(5),
Sage SMALLINT,
Sdept CHAR(15),
FOREIGN KEY(Sno)REFERENCE Course(Sno)
);
修改基本表
ALTER TABLE<表名>
[ADD[COLUMN]<列名><数据类型>[完整性约束]
[DROP[COLUMN]<列名>[CASCADE|RESTRICT]];
删除
DROP TABLE<表名>[CASCADE|RESTRICT];
//CASCADE表示级联,删除表的同时,相关的依赖对象如视图也会被删除;RESTRICT表示删除有限制条件,表上有视图等依赖对象时不允许被删除
索引的建立与删除
建立索引
CREATE [UNIQUE][CLUSTER]INDEX<索引名>
ON<表名>(<列名>[<次序>][,<列名>[<次序 >]]···);
//索引可以建立在一个表一列或多列上,列名用逗号隔开;次序指索引值的排列顺序可以选择升序(ASC)或者降序(DESC)
//UNIQUE表示此索引对应的索引值只对应唯一的数据记录
//CLUSTER表示建立的索引是聚簇索引(在一些属性上具有相同值的元组集中存放在连续的物理块中称为聚簇)
修改索引
ALTER INDEX<旧索引名>RENAME TO<新索引名>
删除索引
DROP INDEX<索引名>
数据查询
单表查询
单表查询指仅涉及一个表的查询
1.选择表中的若干列
例:查询全体学生的学号和姓名
SELECT Sno,Sname
FROM Student;
2.选择表中的若干行
<1>DESTINCT:去除重复的行
例:查询选修了课程的学生学号
SELECT DESTINCT Sno
FROM SC;
<2>查询满足条件的元组
WHERE常用的查询条件
确定范围:BETWEEN AND,NOT BETWEEN AND
确定集合:IN, NOT IN
字符匹配:LIKE,NOT LIKE
空值:IS NULL,IS NOT NULL
例:查询所有姓刘的姓名,学号和性别
SELECT SName,Sno,Ssex
FROM Student
WHERE Sname LIKE ‘刘%’;
3.ORDER BY
对一个或多个属性列的升序(ASC)或者降序排列(DESC)
例:
SELECT * /*这里的*默认查询所有的属性列*/
FROM Student
ORDER BY Sdept,Sage DESC /*这里Sdep后面的ASC可写可不写,不写默认是升序*/
4.GROUP BY
将查询结果按某一列或者多列的值分组,值相同的为一组
5.聚集函数
COUNT(*):统计元组个数
SUM([DISTINCT|ALL]<列名>):计算一列值的总和
AVG([DISTINCT|ALL]<列名>):计算一列值的平均值
MAX([DISTINCT|ALL]<列名>):求一列值中的最大值
MIN([DISTINCT|ALL]<列名>):求一列值中的最小值
连接查询
自身连接
外连接
嵌套查询
一个查询块嵌套在另一个查询块的WHERE子句或者HAVING子句中
相关子查询
不相关子查询
带有ONLY或者ALL谓词的子查询
带有EXIS谓词的子查询:
集合查询
并操作UNION:合并两个查询的结果
交操作INTERSECT:取两个查询结果的交集
差操作EXCEPT:两个查询结果的差集
基于派生表的查询
出现在FROM子句的子查询生成的临时派生表
数据更新
插入数据
插入元组:(格式)
INSERT
INTO<表名>(<属性名1>,<属性名2>,<属性名3>….)
VALUES(<常量名1>,<常量名2>,<常量名3>…)//字符串用单引号括起来
修改数据
格式:
UPDATE<表名>
SET<列名>=<表达式>,[<列名>=<表达式>]…
[WHERE<条件>];
删除数据
格式:
DELETE
FROM<表名>
WHERE<条件>;
视图
定义视图
建立视图
CREATE VIEW<视图名>[<列名>,<列名>…]
AS <子查询>
[WITH CHECK OPTION]; //表示对视图进行增删改查要满足子查询的条件表达
删除视图
DROP VIEW<视图名>[CASCADE].
查询视图
更新试图
视图作用
1.能够简化用户的操作
2.能使用户多个角度看待同一数据
3.重构数据库提供一定的逻辑独立性
4.对机密数据提供安全保护
5.更清晰的表达查询。
数据库的查询处理过程
查询语句—>词法分析,语法分析——>语义分析,符号名转换,安全性检查,完整性初步检查——>查询树——>代数优化,物理优化——>查询执行计划——>代码生成——>查询计划的执行代码
事物的ACID特性
1.原子性
2.一致性
3.隔离性
4.持续性