数据库系统概论的一些知识点
Posted Icy Hunter
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库系统概论的一些知识点相关的知识,希望对你有一定的参考价值。
文章目录
- 前言
- 数据库的四个基本概念
- 数据模型
- 数据库系统的三级模式结构
- 关系代数
- 关系元组
- SQL语句第一次作业
- [1] 创建数据库Studentdb
- [2] 在数据库Studentdb中创建学生表Student
- [3] 在数据库Studentdb中创建课程表Course
- [4] 在数据库Studentdb中使用创建成绩表Score
- [5] 将下列数据插入Student表中
- [6] 将下列数据插入course表中
- [7] 将下列数据插入Student表中
- [8] 查询全体学生的详细记录(不包括选课信息)
- [9] 查询学生表中学生的姓名和地址信息
- [10]查询学生表中“刘”姓学生的信息
- [11]查询学生表中姓名包含“民”的学生的信息
- [12]查询所有身高1.75以上的男学生的学号和姓名
- [13]查询所有来自“宁波”的学生姓名、性别和年龄
- [14]查询没有考试成绩的学生学号和课程编号
- [15]查询所有参加过考试的学生学号
- [16]查询所有学分不小于3的课程名
- [17]查询学分在1~5范围内的课程编号和课程名称
- [18]查询“数据库原理及应用”课程的信息
- [19]查询每门(被选修)课程的课程号以及选修该课程的学生信息,并按课程号升序进行排列
- SQL语句第二次作业
- [1] 查询选修“0002”号课程的学生的成绩最高分
- [2] 统计参加“0001”号课程考试的学生人数
- [3] 计算“0003”号课程中所有参加过考试的学生平均分
- [4] 查询选修了3门课以上[包括3门]的学生姓名
- [5] 统计各个课程号及相应的选课人数
- [6] 统计没有参加考试的学生学号和姓名
- [7] 查询选修了所有课程的学生学号和姓名
- [8] 统计选修人数在3人以上[包括3人]的课程号和课程名
- [9] 查询每个学生的学号、姓名、选修的课程名及成绩
- [10] 查询选修了课程号为“0003”的学生姓名和住址
- [11] 查询有两门及以上课程成绩大于等于90分的学生学号和姓名
- [12] 查询比“0003”号课程平均分高的其它课程信息
- [13] 查询每个学生及其选修课程的情况[包括没有选修课程的学生]
- [14] 将选修了课程号为0002的学生的成绩减去2分
- [15] 删除0002号课程的所有选课记录
- [16] 删除所有的学生选课记录
- SQL语句第三次作业
- [1] 使用SQL语句删除学生信息表(Student)中“备注”字段
- [2] 使用SQL语句修改学生信息表(Student)中字段属性如下
- [3] 为Student表添加“系名”字段,存储数据如:“信息系”,“数学系”,“计算机系”等,具体数据可自行添加到Student表中
- [4] 将信息系所有学生的身高增加5cm
- [5] 将计算机系全体学生的成绩清零
- [6] 删除信息系所有学生的选课记录
- [7] 查询与“刘一平”来自同一个系的学生姓名
- [8] 查询其它系中’0002’ 课程比信息系所有学生分数高的学生学号和姓名
- [9] 查询其它系中比信息系所有学生年龄大的学生姓名和性别
- [10] 查询“信息系”中选课最多的学生学号
- [11] 查询每门课程中低于该课程平均成绩的学生学号和姓名
- [12] 统计每个系学生的平均年龄,并创建新表,同时把统计结果存入新表中
- 参考
前言
因为最近好像没什么要紧的事干,复习一下数据库吧。
数据库的四个基本概念
数据
数据库
数据库管理系统
数据库系统
数据库系统可如上图所示。
数据模型
概念模型
逻辑模型
层次模型
网状模型
关系模型
数据库系统的三级模式结构
外模式
模式
内模式
关系代数
例子
关系元组
例子
SQL语句第一次作业
[1] 创建数据库Studentdb
CREATE DATABASE Studentdb;
[2] 在数据库Studentdb中创建学生表Student
CREATE TABLE Student(
Sno CHAR(4) NOT NULL,
Sname VARCHAR(8) NOT NULL,
Gender CHAR(2),
Birthday DATE,
Haddress VARCHAR(50),
Height DECIMAL(3,2),
Remark text,
PRIMARY KEY(Sno)
);
[3] 在数据库Studentdb中创建课程表Course
CREATE TABLE Course(
Cno CHAR(4) NOT NULL,
Cname VARCHAR(20) NOT NULL,
Credit int,
PRIMARY KEY(Cno)
);
[4] 在数据库Studentdb中使用创建成绩表Score
CREATE TABLE Score(
Sno char(4) NOT NULL,
Cno char(4),
Grade DECIMAL(3,1),
PRIMARY KEY(Sno, Cno)
);
[5] 将下列数据插入Student表中
INSERT INTO student(Sno,Sname,Gender,Birthday,Haddress,Height)
VALUES
('0001','刘一平','男','1990-10-1','温州市环城西路201号',1.78),
('0002','张得民','男','1990-12-2','杭州市下沙路22号',1.65),
('0003','马东','男','1990-7-4','宁波市中山北道20号',1.71),
('0004','肖海燕','女','1990-3-15','温州市越秀北路43号',1.65),
('0005','张民华','女','1991-5-13','宁波市艮山路7号',1.63);
[6] 将下列数据插入course表中
INSERT INTO course(Cno,Cname,Credit)
VALUES
('0001','计算机基础',2),
('0002','管理学原理',3),
('0003','数据库原理及应用',3),
('0004','项目管理',2),
('0005','毕业论文',10);
[7] 将下列数据插入Student表中
INSERT INTO score(Sno,Cno,Grade)
VALUES
('0001','0001',80.0),
('0001','0002',90.0),
('0001','0003',70.0),
('0001','0004',85.0),
('0001','0005',92.0),
('0002','0001',78.0),
('0002','0002',NULL),
('0002','0003',77.0),
('0002','0004',67.0),
('0003','0001',66.0),
('0003','0002',76.0),
('0003','0003',NULL),
('0003','0004',73.0)
;
[8] 查询全体学生的详细记录(不包括选课信息)
SELECT * FROM student;
[9] 查询学生表中学生的姓名和地址信息
SELECT Sname,Haddress FROM student;
[10]查询学生表中“刘”姓学生的信息
SELECT * FROM student
WHERE Sname LIKE "刘%";
[11]查询学生表中姓名包含“民”的学生的信息
SELECT * FROM student
WHERE Sname LIKE "%民%";
[12]查询所有身高1.75以上的男学生的学号和姓名
SELECT Sno,Sname FROM student
WHERE Gender='男' AND Height>1.75;
[13]查询所有来自“宁波”的学生姓名、性别和年龄
SELECT Sname,Gender,TIMESTAMPDIFF(YEAR, Birthday, CURDATE()) AS Age
FROM student
WHERE Haddress LIKE "宁波%";
[14]查询没有考试成绩的学生学号和课程编号
SELECT DISTINCT Sno,Cno FROM Score
WHERE Grade <=> NULL;
[15]查询所有参加过考试的学生学号
SELECT DISTINCT Sno FROM score
WHERE Grade IS NOT NULL;
[16]查询所有学分不小于3的课程名
SELECT Cname FROM course
WHERE Credit>=3;
[17]查询学分在1~5范围内的课程编号和课程名称
SELECT Cno,Cname
FROM course
WHERE Credit>=1 AND Credit<=5;
[18]查询“数据库原理及应用”课程的信息
SELECT * FROM course
WHERE Cname="数据库原理及应用";
[19]查询每门(被选修)课程的课程号以及选修该课程的学生信息,并按课程号升序进行排列
SELECT score.Cno,student.*
FROM student INNER JOIN score
ON score.Sno = student.Sno ORDER BY Cno;
SQL语句第二次作业
[1] 查询选修“0002”号课程的学生的成绩最高分
SELECT MAX(Grade)
FROM score
WHERE Cno='0002';
[2] 统计参加“0001”号课程考试的学生人数
SELECT COUNT(DISTINCT Sno)
FROM score
WHERE Cno='0001';
[3] 计算“0003”号课程中所有参加过考试的学生平均分
SELECT AVG(DISTINCT Grade)
FROM score
WHERE Cno='0003';
[4] 查询选修了3门课以上[包括3门]的学生姓名
SELECT student.Sname
FROM student INNER JOIN score
ON score.Sno = student.Sno
GROUP BY score.Sno
HAVING COUNT(*)>=3;
[5] 统计各个课程号及相应的选课人数
SELECT Cno,COUNT(DISTINCT Sno)
FROM score
GROUP BY Cno;
[6] 统计没有参加考试的学生学号和姓名
SELECT student.Sno,student.Sname
FROM student,score
WHERE student.Sno = score.Sno AND
score.Grade IS NULL;
[7] 查询选修了所有课程的学生学号和姓名
SELECT student.Sno,student.Sname
FROM student,score
WHERE student.Sno = score.Sno
HAVING COUNT(*)=(SELECT COUNT(Cno)FROM score);
[8] 统计选修人数在3人以上[包括3人]的课程号和课程名
SELECT score.Cno,course.Cname
FROM score,course
WHERE score.Cno = course.Cno
GROUP BY score.Cno
HAVING COUNT(*)>=3;
[9] 查询每个学生的学号、姓名、选修的课程名及成绩
SELECT student.Sno,student.Sname,course.Cname,score.Grade
FROM student,course,score
WHERE student.Sno = score.Sno AND score.Cno = course.Cno;
[10] 查询选修了课程号为“0003”的学生姓名和住址
SELECT student.Sname, student.Haddress
FROM student, score
WHERE student.Sno = score.Sno AND
score.Cno='0003';
[11] 查询有两门及以上课程成绩大于等于90分的学生学号和姓名
SELECT student.Sno,student.Sname
FROM student,score
WHERE student.Sno = score.Sno AND
Grade >= 90
GROUP BY student.Sno
HAVING COUNT(*)>=2;
[12] 查询比“0003”号课程平均分高的其它课程信息
SELECT DISTINCT course.*
FROM course, score
WHERE course.Cno = score.Cno
GROUP BY score.Cno
HAVING AVG(score.Grade)>
(SELECT AVG(Grade) FROM score WHERE Cno='0003');
[13] 查询每个学生及其选修课程的情况[包括没有选修课程的学生]
SELECT student.*,course.*
FROM student,course,score
WHERE student.Sno = score.Sno AND
course.Cno = score.Cno;
[14] 将选修了课程号为0002的学生的成绩减去2分
UPDATE score
SET Grade = Grade-2
WHERE Cno='0002';
[15] 删除0002号课程的所有选课记录
DELETE FROM score
WHERE Cno='0002';
[16] 删除所有的学生选课记录
DELETE FROM score;
SQL语句第三次作业
[1] 使用SQL语句删除学生信息表(Student)中“备注”字段
alter table student drop Remark;
[2] 使用SQL语句修改学生信息表(Student)中字段属性如下
alter table student modify column Sname VARCHAR(20) not null ;
[3] 为Student表添加“系名”字段,存储数据如:“信息系”,“数学系”,“计算机系”等,具体数据可自行添加到Student表中
UPDATE student set 系名 = '信息系'
WHERE Sno="0001";
UPDATE student set 系名 = '数学系'
WHERE Sno="0002";
UPDATE student set 系名 = '计算机系'
WHERE Sno="0003";
UPDATE student set 系名 = '信息系'
WHERE Sno="0004";
UPDATE student set 系名 = '计算机系'
WHERE Sno="0005";
[4] 将信息系所有学生的身高增加5cm
UPDATE student
SET Height = Height + 0.05
WHERE 系名="信息系";
[5] 将计算机系全体学生的成绩清零
UPDATE student,score
SET score.Grade = 0
WHERE student.Sno = score.Sno AND
student.系名="计算机系";
[6] 删除信息系所有学生的选课记录
Delete From Score
Where Sno in( Select b.* FROM
(SELECT score.Sno FROM student,score
WHERE student.Sno = score.Sno AND student.系名 = '信息系') b
);
[7] 查询与“刘一平”来自同一个系的学生姓名
SELECT Sname
FROM student
WHERE student.系名 =
(SELECT 系名
FROM student
WHERE Sname="刘一平");
[8] 查询其它系中’0002’ 课程比信息系所有学生分数高的学生学号和姓名
SELECT student.Sno, student.Sname
FROM student,score
WHERE score.Sno=student.Sno AND score.Cno="0002" AND
student.系名<>"信息系" AND
score.Grade >(SELECT MAX(score.Grade)
FROM score,student
WHERE score.Sno = student.Sno AND student.系名 = "信息系");
[9] 查询其它系中比信息系所有学生年龄大的学生姓名和性别
SELECT Sname, Gender
FROM student
WHERE 系名<>"信息系" AND Birthday<(
SELECT MAX(Birthday)
FROM student
WHERE 系名="信息系");
[10] 查询“信息系”中选课最多的学生学号
SELECT student.Sno
FROM student, score
WHERE student.Sno = score.Sno AND 系名="信息系"
GROUP BY student.Sno
HAVING COUNT(score.Cno) =
MAX( (SELECT COUNT(*)
FROM student,score
WHERE student.Sno = score.Sno and 系名="信息系"
GROUP BY student.Sno) );
[11] 查询每门课程中低于该课程平均成绩的学生学号和姓名
SELECT DISTINCT student.Sno, student.Sname
FROM student,score s1
WHERE student.Sno = s1.Sno AND s1.Grade<
(SELECT AVG(s2.Grade)
FROM score s2
WHERE s1.Cno=s2.Cno);
[12] 统计每个系学生的平均年龄,并创建新表,同时把统计结果存入新表中
CREATE TABLE stu_age《数据库系统概论》知识点梳理