【数据库系统概论】关系数据库标准语言 知识点小结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/82891371

本文参考自网络,由作者编辑整理,侵删歉。

SQL的特点

1.综合统一
SQL集数据定义语言DDL、数据操作语言DML、数据控制语言DCL的功能与一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。
2.高度非过程化
SQL进行数据操作,只要提出“做什么”,而无须指明“怎么做”。
3.面向集合的操作方式
查询、插入、删除、修改的操作对象及结果都是集合。
4.以同一种语法结构提供两种使用方法
可交互式和嵌入式使用。
5.以简捷的自然语言作为操作语言
定义了少量的关键字实现对数据库的定义、操纵和控制功能。

SQL的动词

数据查询:SELECT
数据定义:CREATE,DROP,ALTER
数据操纵:INSERT,UPDATE,DELETE
数据控制:GRANT,REVOKE,COMMIT,ROLLBACK

数据定义概述

SQL提供了专门的语言用来定义数据库、表、索引等数据库对象,这些语言被称作数据定义语言(Data Definition Language,DDL)。
SQL的数据定义语句

SQL中的数据类型

在这里插入图片描述

创建基本表

格式:
CREATE TABLE <表名>
( <列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] );



说明:
<表名>:所要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件

常用完整性约束

(1) 主码约束: PRIMARY KEY
(2) 唯一性约束:UNIQUE(不能取相同值但允许多个空值)(3) 非空值约束:NOT NULL
(4) 参照完整性约束:FOREIGN KEY (<列名>) REFERENCES <表名>(<列名>)
(5) CHECK约束:CHECK ( <谓词>)
(6) 断言(Assertion)约束

例:建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性构成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。
CREATE TABLE Student
( Sno CHAR(5) NOT NULL UNIQUE ,
Sname CHAR(20) UNIQUE ,
Ssex CHAR(1) CHECK (Ssex IN (‘M’,’F’)),
Sage INT,
Sdept CHAR(15) ) ;

主码的三种指定方式

(1) 用NOT NULL UNIQUE 作为列级约束指定
(2) 用PRIMARY KEY 作为列级约束指定
(3) 用PRIMARY KEY (<主码>) 作为表级约束指定

例:建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。
CREATE TABLE SC (
Sno CHAR(5) ,
Cno CHAR(3) ,
Grade INT CHECK (Grade >=0 AND Grade <=100 ),
PRIMARY KEY (Sno, Cno) ,
FOREIGN KEY (Sno) REFERENCES S(Sno) ,
FOREIGN KEY (Cno) REFERENCES C(Cno) ) ;

约束的指定方式

直接指定约束
命名约束

例:
CREATE TABLE Student
( Sno CHAR(5),
Sname CHAR(20) UNIQUE ,
Ssex CHAR(1)
CONSTRAINT chk_ssex CHECK (Ssex IN (‘M’,’F’)),
Sage INT,
Sdept CHAR(15)
CONSTRAINT pk_sno PRIMARY KEY (Sno) ) ;

删除基本表

DROP TABLE <表名> ;
删除基本表时,系统会从数据字典中删去有关该基本表及其索引的描述。基本表删除后,表里的数据、表上的索引都会被删除,表上的视图往往仍然保留,但无法引用。

修改基本表

ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> <列名>]
[ ALTER <列名> <数据类型> ];


说明:
<表名>:要修改的基本表
ADD子句:增加新列和新的完整性约束条件
DROP子句:删除指定的完整性约束条件
ALTER子句:用于修改列名和数据类型

例:
1.向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD Senroll DATE ;
注:不论基本表中原来是否已有数据,新增加的列一律为空值。
2.将年龄的数据类型改为半字长整数。
ALTER TABLE Student ALTER Sage SMALLINT ;
注:修改原有的列定义有可能会破坏已有数据
3.删除学生姓名必须取唯一值的约束。
ALTER TABLE Student DROP UNIQUE(Sname) ;

删除属性列

间接删除(由DBA或表的Owner操作)
1.把表中要保留的列及其内容复制到一个新表中
2.删除原表
3.再将新表重命名为原表名


直接删除(SQL-99)
例:ALTER TABLE Student Drop Senroll ;

索引

在这里插入图片描述
Search-key项常用的组织方式是顺序或Hash排列。
单一索引(Unique Index):每一个索引值只对应唯一的数据记录。
聚簇索引(Cluster Index):索引项顺序与表中数据记录的物理顺序一致。
普通索引:允许一个Search-key项对应多条存储记录。

创建索引

格式:
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON  <表名>(<列名>[<次序>][,<列名>[<次序>] ]…) ;


说明:
<表名>:指定要建索引的基本表名字,索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序>:指定索引值的排列次序。升序:ASC,降序:DESC,缺省值:ASC
UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER:表示要建立的索引是聚簇索引

例:
1.为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno) ;
CREATE UNIQUE INDEX Coucno ON Course(Cno) ;
CREATE UNIQUE INDEX SCno
ON SC(Sno ASC , Cno DESC) ;
2.在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。
CREATE CLUSTER INDEX Stusname
ON Student(Sname) ;

删除索引

DROP INDEX <索引名> ;
注:删除索引时,系统会从数据字典中删去有关该索引的描述。SQL标准中没有定义对索引的修改功能,而采用删除后重新定义索引的方式实现。

例:删除Student表的Stusname索引。
DROP INDEX Stusname ;

单一索引

对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束。当建立单一索引后,基本表中的索引项不可以再插入已有值,但可以插入多个空值(空值不相等) ,如果待索引项存在相同值则不能建立。

聚簇索引

建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致。在一个基本表上最多只能建立一个聚簇索引。SQL中不提供基本表的排序功能,而通过建立聚簇索引来实现。


聚簇索引的适用范围(与其特点相关)
· 很少对基本表进行增删操作
· 很少对基本表的聚簇索引列进行修改操作
· 很少对基本表中的变长列进行修改操作

查询

格式:
SELECT [ ALL | DISTINCT ] <目标列表达式1> [, <目标列表达式2>] …
FROM <表名或视图名1> [, <表名或视图名2> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC | DESC ] ] ;


说明:
SELECT子句:指定要显示的属性
FROM子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY子句:对查询结果按指定列分组,列值相同的记录为一组,通常再在该组上施加集函数运算
HAVING短语:筛选出只有满足指定条件的组
ORDER BY子句:对查询结果按指定列值升序或降序排序

例:查询全体学生的详细记录。
SELECT Sno, Sname, Ssex, Sage, Sdept
FROM Student ;

SELECT *
FROM Student ;

选择表中的若干列

目标列(SELECT子句)为表达式的查询:
目标列形式:算术表达式、字符串常量、函数、列别名等。

例:
1.查全体学生的姓名及其出生年份。
SELECT Sname, 1996 - Sage
FROM Student ;
2.查询全体学生的姓名、出生年份和所在系,在“出生年份”前加入常数列“Year of Birth:”,用小写字母表示所有系名,并将输出字段依次更名为:NAME、BIRTH、BIRTHYEAR、DEPARTMENT。
SELECT Sname NAME, ‘Year of Birth:’ BIRTH,
1996 - Sage BIRTHYEAR,
ISLOWER ( Sdept ) DEPARTMENT
FROM Student ;
3.消除结果中取值重复的行。
SELECT DISTINCT Sno
FROM SC ;

选择表中的若干元组

使用where子句
在这里插入图片描述

例:
1.使用比较运算符确定元组
查询所有年龄在20岁以下的学生姓名及其年龄。
SELECT Sname , Sage
FROM Student
WHERE Sage < 20 ;

SELECT Sname , Sage
FROM Student
WHERE NOT Sage >= 20 ;
2.确定范围
查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
SELECT Sname , Sdept , Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23 ;
3.确定集合
查询不是信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECT Sname , Ssex
FROM Student
WHERE Sdept NOT IN ( ‘IS’, ‘MA’, ‘CS’ ) ;
4.涉及空值的查询
某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。
SELECT Sno , Cno
FROM SC
WHERE Grade IS NULL ;
5.多重条件查询
查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECT Sname , Ssex
FROM Student
WHERE Sdept = ‘IS’ OR Sdept = ‘MA’ OR Sdept = ‘CS’ ;
如果建立了WHERE子句中的属性列的索引,[NOT] BETWEEN … AND … 和 [NOT] IN将不会利用索引提高查询效率,应改为多重条件查询。

字符串匹配
[NOT] LIKE ‘<匹配模板>’ [ESCAPE ‘<换码字符>’]
匹配模板:固定字符串或含通配符的字符串。
通配符:
% (百分号):代表任意长度(可以为0)的字符串。
例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串。
_ (下横线):代表任意单个字符。
例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串。
当要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE ‘<换码字符>’ 短语对通配符进行转义。

例:
1.查询学号为95001的学生的详细情况。
SELECT *
FROM Student
WHERE Sno LIKE ‘95001’ ; //不建议这样写
等价于:
SELECT *
FROM Student
WHERE Sno = ‘95001’ ;
2.查询所有姓刘学生的姓名、学号和性别。
SELECT Sname , Sno , Ssex
FROM Student
WHERE Sname LIKE ‘刘%’ ;
3.查询姓名中第3个字为"阳"字的学生姓名和学号。
SELECT Sname , Sno
FROM Student
WHERE Sname LIKE ‘_ _ _ _阳%’ ;
4.查询DB_Design课程的课程号和学分。
SELECT Cno , Ccredit
FROM Course
WHERE Cname LIKE ‘DB_Design’ ESCAPE ‘’ ;
转义符‘\’表示模板中出现在其后的第一个字符不再是通配符,而是字符本身。

对查询结果排序

使用ORDER BY子句
可以按一个或多个属性列排序
升序:ASC;
降序:DESC;
缺省值为升序
当排序列含空值时
ASC:排序列为空值的元组最后显示
DESC:排序列为空值的元组最先显示
(将空值作为最大值来理解)

例:
查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
SELECT *
FROM Student
ORDER BY Sdept , Sage DESC ;

猜你喜欢

转载自blog.csdn.net/wingrez/article/details/82891371
今日推荐