期中复习

期中复习

期中考试复习
数据库的4个基本概念
数据:是数据库中存储的基本对象
数据的定义:描述事物的符号记录
数据的种类:数字、文字、图形、图像、音频、视频、学生的档案记录等

数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。
数据库的基本特征
数据按一定的数据模型组织、描述和储存
可为各种用户共享
冗余度较小
数据独立性较高
易扩展

什么是数据库管理系统
位于用户与操作系统之间的一层数据管理软件
是基础软件,是一个大型复杂的软件系统
数据库管理系统的用途
科学地组织和存储数据、高效地获取和维护数据

 数据定义功能
 提供数据定义语言(DDL)
 定义数据库中的数据对象
 数据组织、存储和管理
 分类组织、存储和管理各种数据
 确定组织数据的文件结构和存取方式
 实现数据之间的联系
 提供多种存取方法提高存取效率

建立“学生”表Student.学号是主码,姓名取值唯一
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
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)
);
建立一个学生选课表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)
);

<表名>是要修改的基本表
ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN子句用于删除表中的列
如果指定了CASCADE短语,则自动删除引用了该列的其他对象
如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列
DROP CONSTRAINT子句用于删除指定的完整性约束条件
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型

向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
不管基本表中原来是否已有数据,新增加的列一律为空值

ALTER TABLE Student ADD S_entrance DATE;

将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;

增加课程名称必须取唯一值的约束条件。

ALTER TABLE Course ADD UNIQUE(Cname);

删除基本表
DROP TABLE <表名>[RESTRICT| CASCADE];
 RESTRICT:删除表是有限制的。
 欲删除的基本表不能被其他表的约束所引用
 如果存在依赖该表的对象,则此表不能被删除
 CASCADE:删除该表没有限制。
 在删除基本表的同时,相关的依赖对象一起删除

–删除Student表
DROP TABLE Student CASCADE;
在这里插入图片描述

若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图也自动删除。

CREATE VIEW IS_Student
AS
	SELECT Sno,Sname,Sage
	FROM Student
	WHERE Sdept='IS';

DROP TABLE Student RESTRICT;

在这里插入图片描述
这是因为我的Student 没有创建好

如果选择CASCADE时可以删除表,视图也自动被删除

在这里插入图片描述

查询指定列

查询全体学生的学号与姓名。

	SELECT Sno,Sname
	FROM Student;

查询全体学生的姓名、学号、所在系。

	SELECT Sname,Sno,Sdept
	FROM Student;

查询全部列

选出所有属性列:

在SELECT关键字后面列出所有列名
将<目标列表达式>指定为 *

查询全体学生的详细记录

SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;

SELECT *
FROM Student;

查询经过计算的值

SELECT子句的<目标列表达式>不仅可以为表中的属性列,也可以是表达式

查全体学生的姓名及其出生年份。

SELECT Sname,2014-Sage
FROM Student;

查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名。

SELECT Sname,'Year of Birth: ',2014-Sage,LOWER(Sdept)
FROM Student;

使用列别名改变查询结果的列标题:

SELECT Sname NAME,‘Year of Birth:’ BIRTH,
2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student;

在这里插入图片描述

选择表中的若干元组

消除取值重复的行

如果没有指定DISTINCT关键词,则缺省为ALL

查询选修了课程的学生学号。

SELECT Sno FROM SC;
等价于
SELECT ALL Sno FROM SC;

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

SELECT DISTINCT Sno
FROM SC;

比较大小

查询计算机科学系全体学生的名单。

SELECT Sname
FROM     Student
WHERE  Sdept=‘CS’; 

查询所有年龄在20岁以下的学生姓名及其年龄。

SELECT Sname,Sage
FROM Student
WHERE Sage < 20;

查询考试成绩有不及格的学生的学号。

SELECT DISTINCT Sn
FROM SC
WHERE Grade<60;

确定范围

查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄

SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;

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

       SELECT Sname, Sdept, Sage
       FROM    Student
       WHERE Sage NOT BETWEEN 20 AND 23; 

确定集合

查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。

SELECT Sname, Ssex
FROM  Student
WHERE Sdept IN ('CS','MA’,'IS' );

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

在这里插入图片描述

字符匹配

在这里插入图片描述

匹配串位固定字符串

查询学号为201215121的学生的详细情况。

  SELECT *    
 FROM  Student  
 WHERE  Sno LIKE ‘201215121';

等价于:
SELECT *
FROM Student
WHERE Sno = ’ 201215121 ';

匹配串为含通配符的字符串

查询所有姓刘学生的姓名、学号和性别。

   SELECT Sname, Sno, Ssex
  FROM Student
  WHERE  Sname LIKE '刘%';

查询姓"欧阳"且全名为三个汉字的学生的姓名。

   SELECT Sname
  FROM   Student
  WHERE  Sname LIKE '欧阳__';

查询名字中第2个字为"阳"字的学生的姓名和学号。

  SELECT Sname,Sno
  FROM     Student
  WHERE  Sname LIKE '__阳%';

查询所有不姓刘的学生姓名、学号和性别。

  SELECT Sname, Sno, Ssex
  FROM     Student
  WHERE  Sname NOT LIKE '刘%';

使用换码字符将通配符转义为普通字符

查询DB_Design课程的课程号和学分。

  SELECT Cno,Ccredit
  FROM     Course
  WHERE  Cname LIKE 'DB\_Design' ESCAPE '\ ' ;

ESCAPE ‘\’ 表示“ \” 为换码字符

查询以"DB_"开头,且倒数第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 NULL

查所有有成绩的学生学号和课程号。

  SELECT Sno,Cno
  FROM     SC
  WHERE  Grade IS NOT NULL;

多重条件查询

AND和 OR来连接多个查询条件
AND的优先级高于OR
可以用括号改变优先级

查询计算机系年龄在20岁以下的学生姓名。

  SELECT Sname
   FROM  Student
   WHERE Sdept= 'CS' AND Sage<20;

查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。

SELECT Sname, Ssex
FROM Student
WHERE Sdept IN ('CS ','MA ',‘IS’)

SELECT Sname, Ssex
FROM Student
WHERE Sdept= ’ CS’ OR Sdept= ’ MA’ OR Sdept= 'IS ';

ORDER BY子句

可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为升序

对于空值,排序时显示的次序由具体系统实现来决定

查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

    SELECT Sno, Grade
    FROM    SC
    WHERE  Cno= ' 3 '
    ORDER BY Grade DESC;

查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。

    SELECT  *
    FROM  Student
    ORDER BY Sdept, Sage DESC;  

聚集函数

在这里插入图片描述

查询学生总人数。

SELECT COUNT(*)
FROM  Student; 

查询选修了课程的学生人数。

 SELECT COUNT(DISTINCT Sno)
 FROM SC;

计算1号课程的学生平均成绩。

      SELECT AVG(Grade)
      FROM    SC
      WHERE Cno= ' 1 ';

查询选修1号课程的学生最高分数。

SELECT MAX(Grade)
FROM SC
WHERE Cno=‘1’;

查询学生201215012选修课程的总学分数。

SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno=‘201215012’ AND SC.Cno=Course.Cno;

求各个课程号及相应的选课人数。

 SELECT Cno,COUNT(Sno)
 FROM    SC
 GROUP BY Cno; 

查询选修了3门以上课程的学生学号。

  SELECT Sno
 FROM  SC
 GROUP BY Sno
 HAVING  COUNT(*) >3;      

查询平均成绩大于等于90分的学生学号和平均成绩

WHERE子句中是不能用聚集函数作为条件表达式

SELECT  Sno, AVG(Grade)
FROM  SC
GROUP BY Sno
HAVING AVG(Grade)>=90;

查询每个学生及其选修课程的情况

	         SELECT  Student.*, SC.*
	         FROM     Student, SC
	         WHERE  Student.Sno = SC.Sno;

查询每一门课的间接先修课(即先修课的先修课)

SELECT  FIRST.Cno, SECOND.Cpno
 FROM  Course  FIRST, Course  SECOND
 WHERE FIRST.Cpno = SECOND.Cno;

在这里插入图片描述

数据更新

插入数据

两种插入数据方式
插入元组
插入子查询结果
可以一次插入多个元组

INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );

INTO子句
指定要插入数据的表名及属性列
属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
指定部分属性列:插入的元组在其余属性列上取空值

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

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

INSERT
INTO  Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201215128','陈冬','男','IS',18);

视图

在这里插入图片描述

建立信息系学生的视图

    CREATE VIEW IS_Student
    AS 
    SELECT Sno,Sname,Sage
    FROM     Student
    WHERE  Sdept= 'IS';

建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。

     CREATE VIEW IS_Student
    AS 
    SELECT Sno,Sname,Sage
    FROM  Student
    WHERE  Sdept= 'IS'
    WITH CHECK OPTION;

建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。

     CREATE VIEW IS_Student
    AS 
    SELECT Sno,Sname,Sage
    FROM  Student
    WHERE  Sdept= 'IS'
    WITH CHECK OPTION;
发布了342 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44522477/article/details/105440019