数据库系统概论 第四版 知识点整理(3)

2020-06-16 21:36

刘晨 Year of Birth: 1985 is

列别名 SELECT Sname as NAME,'Year of Birth: ' as BIRTH,

2011-Sage as BIRTHDAY,LOWER(Sdept) as DEPARTMENT FROM Student; 输出结果:

NAME BIRTH BIRTHDAY DEPARTMENT ------- ---------------- ------------- ------------------ 李勇 Year of Birth: 1991 cs 刘晨 Year of Birth: 1992 is ●选择表中的若干元组(选择) 消除重复性:

指定DISTINCT关键词,去掉表中重复的行

SELECT DISTINCT Sno FROM SC; 注意 DISTINCT短语的作用范围是所有目标列

错误的写法 SELECT DISTINCT Cno,DISTINCT Grade FROM SC; 正确的写法 SELECT DISTINCT Cno,Grade FROM SC; SELECT 子句缺省情况是保留重复元组(ALL),

例:查询选修了课程的学生学号。SELECT Sno FROM SC;等价于: SELECT ALL Sno FROM SC;

WHERE子句常用的查询条件(相当于σF)

使用比较运算符 或逻辑运算符NOT + 比较运算符 例:查询计算机科学系全体学生的名单

SELECT Sname FROM Student

WHERE Sdept=‘CS’;

例:查询所有年龄在20岁以下的学生姓名及其年龄 SELECT Sname,Sage

FROM Student

WHERE Sage < 20; //NOT Sage>=20

谓词: BETWEEN ? AND ? NOT BETWEEN … AND …

例;查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄 SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 23;//Sage>=20 and Sage<=23

例:查询年龄不在20~23岁之间的学生姓名、系别和年龄

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage NOT BETWEEN 20 AND 23;//Sage<20 or Sage>23

IN <值表>, NOT IN <值表> 例:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别 SELECT Sname,Ssex

FROM Student

WHERE Sdept IN ( 'IS','MA','CS' );

例:查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别 SELECT Sname,Ssex

FROM Student WHERE Sdept NOT IN ( 'IS','MA','CS' );

[NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’] 匹配串为固定字符串

例:查询学号为200215121的学生的详细情况。

SELECT * SELECT *

FROM Student 等价于: FROM Student WHERE Sno LIKE ‘200215121'; WHERE Sno = ' 200215121 '; 匹配串为含通配符的字符串

%:代表任意长度(可以是0)的字符串

_:代表任意单个字符

字符串本身就含有 % 或 _ 时,在% 或 _ 之前加上转义符“\\”要使用ESCAPE ‘<换码字符>’将通配符转义为普通字符。如果‘\’ 要作为一个普通字符,用连续两个‘\’ 表示一个真正的‘\’。

例:查询以\开头,且倒数第3个字符为 i的课程的详细情况。 SELECT *

FROM Course

WHERE Cname LIKE 'DB\\_%i_ _' ESCAPE ' \\ ‘; IS NULL 或 IS NOT NULL “IS” 不能用 “=” 代替 例:查所有有成绩的学生学号和课程号 SELECT Sno,Cno

FROM SC

WHERE Grade IS NOT NULL;

逻辑运算符:AND和 OR来联结多个查询条件,AND的优先级高于OR,可以用括号改变优先级,可用来实现多种其他谓词。

[NOT] IN

[NOT] BETWEEN … AND … 改写 例:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别 SELECT Sname,Ssex

FROM Student

WHERE Sdept IN ( 'IS','MA','CS' ) 可改写为:

SELECT Sname,Ssex

FROM Student

WHERE Sdept= ' IS ' OR Sdept= ' MA' OR Sdept= ' CS ' ● ORDER BY子句:对查询结果排序

可以按一个或多个属性列排序:升序:ASC;降序:DESC;缺省值为升序。 当排序列含空值时:空值最大

ASC:排序列为空值的元组最后显示;DESC:排序列为空值的元组最先显示。 例:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列 SELECT Sno,Grade FROM SC

WHERE Cno= ' 3 '

ORDER BY Grade DESC;

● 聚集函数:对查询结果集中的某列进行计算或统计。 计数 COUNT([DISTINCT|ALL] *)

COUNT([DISTINCT|ALL] <列名>)

计算总和SUM([DISTINCT|ALL] <列名>) 计算平均值 AVG([DISTINCT|ALL] <列名>) 最大最小值

MAX([DISTINCT|ALL] <列名>) MIN([DISTINCT|ALL] <列名>)

例:查询学生200215012选修课程的总学分数 SELECT SUM(Ccredit) FROM SC, Course

WHER Sno='200215012' AND SC.Cno=Course.Cno; 注:除Count(*),都要跳过空值;Where子句不能使用聚集函数。 ● GROUP BY子句:对查询结果分组。 用途细化聚集函数的作用对象

未对查询结果分组,聚集函数将作用于整个查询结果 对查询结果分组后,聚集函数将分别作用于每个组

使用GROUP BY 后:其SELECT子句的列名列表中只能出现分组属性和集函数。 如果分组后还要按照条件对这些组进行筛选,可使用having 短语指定筛选条件 例: 查询选修了3门以上课程的学生学号 SELECT Sno FROM SC

GROUP BY Sno

HAVING COUNT(*) >3;

例:查询有3门以上课程是90分以上学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC Where Grade >90

GROUP BY Sno

HAVING COUNT(*) >3;

HAVING短语与WHERE子句的区别:作用对象不同

WHERE子句作用于基表或视图,从中选择满足条件的元组

HAVING短语作用于组,从中选择满足条件的组。 3、数据更新 (1)插入数据 插入元组

INSERT

[INTO] <表名> [(<属性列1>[,<属性列2 >?)]

VALUES (<常量1> [,<常量2>] ? ) 功能:将新元组插入指定表中;新元组的属性列1的值为常量1,属性列2的值为常量2,?。

INTO子句:属性列的顺序可与表定义中的顺序不一致,但须指定列名;没有指定属性列,表示要插入的是一条完整的元组;指定部分属性列,未指定的属性列取空值,具有NOT NULL的属性列除外。

VALUES子句:提供的值必须与INTO子句匹配,值的个数,值的类型。

例:将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中

INSERT

INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('200215128','陈冬','男','IS',18); 例: 将学生张成民的信息插入到Student表中

INSERT

INTO Student

VALUES (‘200215126’, ‘张成民’, ‘男’,18,'CS');

例:插入一条选课记录( '200215128','1 ')。 INSERT

INTO SC(Sno,Cno) VALUES (‘ 200215128 ’,‘ 1 ’);

RDBMS将在新插入记录的Grade列上自动地赋空值。或者: INSERT

INTO SC VALUES (‘ 200215128 ’,‘ 1 ’,NULL);

因为没有指出SC的属性名,在GRADE列上要明确给出空值 (2)修改数据

UPDATE <表名>

SET <列名>=<表达式>[,<列名>=<表达式>]? [WHERE <条件>];

SET子句:指定修改方式,要修改的列,修改后取值:<表达式>。 WHERE子句:指定要修改的元组,,缺省表示要修改表中的所有元组。 功能:修改指定表中满足WHERE子句条件的元组。 修改某一个元组的值 例:将学生200215121的年龄改为22岁 UPDATE Student

SET Sage=22

WHERE Sno=' 200215121 '; 修改多个元组的值 例:将所有学生的年龄增加1岁

UPDATE Student SET Sage= Sage+1;

带子查询的修改语句 子查询须放在比较运算符之后 例:将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 WHERE 'CS'=

(SELETE Sdept FROM Student

WHERE Student.Sno = SC.Sno); (3)删除数据 DELETE

FROM <表名> [WHERE <条件>];

功能:删除指定表中满足WHERE子句条件的元组。

WHERE子句:指定要删除的元组;缺省表示要删除表中的全部元组,表的定义仍在数据字典中。

删除某一个元组的值 例:删除学号为200215128的学生记录

DELETE

FROM Student

WHERE Sno= 200215128 '; 删除多个元组的值 例:删除所有的学生选课记录 DELETE FROM SC; 带子查询的删除语句 例:删除计算机科学系所有学生的选课记录 DELETE FROM SC

WHERE 'CS'=

(SELETE Sdept

FROM Student

WHERE Student.Sno=SC.Sno);

4、视 图

特点:虚表,是从一个或几个基本表(或视图)导出的表;只存放视图的定义,不存放视图对应的数据;基表中的数据发生变化,从视图中查询出的数据也随之改变。

基于视图的操作: 查询、删除、受限更新、定义基于该视图的新视图。 (1)定义视图 建立视图 CREATE VIEW <视图名> [(<列名> [,<列名>]?)] AS <子查询>

[WITH CHECK OPTION];

子查询:不允许含有ORDER BY子句和DISTINCT短语。


数据库系统概论 第四版 知识点整理(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大学英语(三)第2阶段测试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: