2023年6月21日发(作者:)
实验实习名
指导教师
课程名称
实验实习地点
学生姓名
学院专业
SQL 语言 SQL 语言的简单查询、连接查询
数据库原理
教师签名:
年 月 日
(以下为参考内容,具体内容要求由课程在实验实习指导书中规定。)
一、 实验实习目的及要求
(一)、实验目的
数据查询语言指对数据库中的数据查询、统计、分组、排序等操作。查询语 句可以分为简单查询、连接查询本次实验了解 SQL 语言的 SELECT 语句对数据的查询,学会在 Navicat for MySQL 中用 SELECT 语句对表中的数据进行简单查询、连接查询。
二、实验要求
1、实验前:预习实验内容,学习相关知识。
2、实验中:按照实验内容要求进行实验,实验时注意每种 SQL 语句的基本命令 及各个关键字的含义,做好实验记录。
3、实验后:分析实验结果,总结实验知识,得出结论,按格式写出实验报告。
4、在整个实验过程中,要独立思考、独立按时完成实验任务,不懂的要虚心向 教师或同学请教。5、要求按指定格式书写实验报告,且报告中应反映出对本次实验的总结,下次 实验前交实验报告。
二、实验实习设备(环境)及要求(软硬件条件)
硬件:已联网的笔记本一台
软件:Navicat for MySQL
三、实验实习内容与步骤
(一).实验内容
1.启动 Navicat for MySQL,用 SELECT 语句对表进行简单查询操作,整个 查询过程只涉及到一个表,是最基本的查询语句。语法格式如下: Select <目标列组> From <表名> [Where <元组选择条件>] [Group by < 分组列> [Having <组选择条件>]] [Order by <排序列 1> <排序要求> [,
„n]]
考核成绩
课程编号
完成日期
学生学号
所在班级
教师评语 2.用 SELECT 语句对表进行连接查询操作,连接查询涉及被连接和连接两个 表,所以数据源一般为多个表。用来连接两个表的条件称为连接条件,一般格式 为: [<表名 1>.]<列名 1> <比较运算符> [<表名 2>.]<列名 2> 其中比较运算符主要有:=、>、<、>=、<=、!=。
(二).实验步骤
执行以下内容:
1.启动 Navicat for MySQL,在 MySQL – 新建连接中完成连接参数配置。
2.登录到本地数据库服务器后,连接到 test 数据库上。
3.用 Create Table 建立 Student 表,表结构如下所示:
属性名
SNO
Name
Age
College
字段名
CourseID
CourseName
类型
Varchar
Varchar
Integer
Varchar
类型
Varchar
Varchar
长度
20
10
30
长度
15
30
15
长度
20
30
5,2
Age
20
19
21
CourseName
计算机引论
C 语言
数据结构
College
计算机学院
通信学院
计算机学院
CourseBeforeID
空值(NULL)
C1
C2
4.用 Create Table 建立 Course 表,表结构如下所示:
CourseBeforeID Varchar
字段名
SNO
CourseID
Score
SNO
S00001
S00002
S00003
CourseID
C1
C2
C3
Name
张三
李四
王五
类型
Varchar
Varchar
DECIMAL
5.用 Create Table 建立 Choose 表,表结构如下所示:
6.用 INSERT 语句向 Student 表中插入 3 个元组:
7.用 INSERT 语句向 Course 表中插入 3 个元组:
8.用 INSERT 语句向 Choose 表中插入 7 个元组
SNO
S00001
S00001
S00001
S00002
S00002
S00003
S00003
CourseID
C1
C2
C3
C1
C2
C1
C3
Score
95
80
84
80
85
78
70
9.用 SELECT 语句,查询计算机学院学生的学号和姓名关系代数及代码:
10.用 SELECT 语句的 between„and„表示查询条件,查询年龄在 20~23 岁的学 生信息。 11. 用 SELECT 语句的 COUNT()聚集函数,统计 Student 表中学生总人数。
12.分别用 SELECT 语句的 max()、min()、sum()、avg()四个聚集函数,计算 Choose 表中 C1
课程的最高分、最低分、总分、平均分。
13.用 SELECT 语句对空值(NULL)的判断条件,查询 Course 表中先修课称编号为 空值的课程编号和课程名称。
14.用 SELECT 语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩
四、实验实习过程或算法(源程序、代码)
1.
用 Create Table 建立 Student 表代码:
CREATE TABLE Student
( SNO VARCHAR(10),
Name Varchar (10),
Age INTEGER ,
College VARCHAR(30)
);
2.
用 Create Table 建立 Course 表代码
CREATE TABLE Course
( CourseID VARCHAR(15),
CourseName VARCHAR(30) ,
CourseBeforeID Varchar (15)
);
3.
.用 Create Table 建立 Choose代码
CREATE TABLE Choose
( SNO VARCHAR(20),
CourseID VARCHAR(30),
Score DECIMAL (5,2)
);
4.用 INSERT 语句向 Student 表中插入 3 个元组代码
INSERT INTO student (SNO,Name,Age,College) VALUES ('S00001','张三',20,'计算机学院');
INSERT INTO student (SNO,Name,Age,College) VALUES ('S00002','李四',19,'通信学院');
INSERT INTO student (SNO,Name,Age,College) VALUES ('S00003','王五',21,'计算机学院');
5
.用 INSERT 语句向 Course 表中插入 3 个元组代码
INSERT INTO course (CourseID,CourseName,CourseBeforeID) VALUES ('C1','计算机引论',NULL);
INSERT INTO course (CourseID,CourseName,CourseBeforeID) VALUES ('C2','C语言','C1');
INSERT INTO course (CourseID,CourseName,CourseBeforeID) VALUES ('C3','数据结构','C2');
6.用 INSERT 语句向 Choose 表中插入 7 个元组代码
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00001','C1',95);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00001','C2',80);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00001','C3',84);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00002','C1',80);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00002','C2',85);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00003','C1',78);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00003','C3',70); 7. 用 SELECT 语句,查询计算机学院学生的学号和姓名关系代数及代码
代码:SELECT * FROM student WHERE (College = '计算机学院');
8.用 SELECT 语句的 between„and„表示查询条件,查询年龄在 20~23 岁的学 生信息代码及关系代数
代码:SELECT Name FROM Student where Age BETWEEN 20 AND 23;
运行结果:
9用 SELECT 语句的 COUNT()聚集函数,统计 Student 表中学生总人数代码及运行结果
代码:SELECT COUNT(*) FROM Student; 运行结果:
10.
分别用 SELECT 语句的 max()、min()、sum()、avg()四个聚集函数,计算 Choose 表中
C1 课程的最高分、最低分、总分、平均分。 代码及运行结果
代码:SELECT MAX(Score) FROM choose WHERE(CourseID='C1');
SELECT MIN(Score) FROM choose WHERE(CourseID='C1');
SELECT SUM(Score) FROM choose WHERE(CourseID='C1');
SELECT AVG(Score) FROM choose WHERE(CourseID='C1'); 运行结果:
11.
用 SELECT 语句对空值(NULL)的判断条件,查询 Course 表中先修课称编号为 空值的课程编号和课程名称代码及运行结果:
代码:select * from course where CourseBeforeID is null ;
运行结果:
12
.用 SELECT 语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩关系代数代码及运行结果
关系代数: 代码:SELECT DISTINCT ,,ID,
FROMstudent,course,choose
WHERE = AND ID=ID;
运行结果:
五、实验实习结果分析和(或)源程序调试过程
思考题:
(1).
Where 与 Having 语句有何差别?
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
Where和having其实后面都是跟条件。区别在于它们后面的条件里如果有count之类的聚合函数的时候只能使用having而不能使用where。
(2).
Count(*)与 Count(字段名)有何差别?
count(*)统计的是结果集的总条数,即能计算一个表中的元组个数,包括重复项;
count(字段名)统计的是该字段值不为null的总条数。
(3).LIKE ‘[^s][^y][^s]%’与 NOT LIKE ‘sys%’有无区别?请加以验证?
答:是有区别的;
LIKE ‘[^s][^y][^s]%’表示匹配第一位不为s,第二位不为y,第三位不为s;
而NOT LIKE ‘sys%’表示匹配不以sys开头
[^...]负值字符集合表示匹配未包含的任意字符;
如:sysabc: 均不匹配而sabcys: NOT LIKE ‘sys%’可以匹配
可以用逻辑学的方法来理解,前者可以看成s^y^s^即(s+y+s)^,后者看成(sys)^。
心得体会:
(1)
2023年6月21日发(作者:)
实验实习名
指导教师
课程名称
实验实习地点
学生姓名
学院专业
SQL 语言 SQL 语言的简单查询、连接查询
数据库原理
教师签名:
年 月 日
(以下为参考内容,具体内容要求由课程在实验实习指导书中规定。)
一、 实验实习目的及要求
(一)、实验目的
数据查询语言指对数据库中的数据查询、统计、分组、排序等操作。查询语 句可以分为简单查询、连接查询本次实验了解 SQL 语言的 SELECT 语句对数据的查询,学会在 Navicat for MySQL 中用 SELECT 语句对表中的数据进行简单查询、连接查询。
二、实验要求
1、实验前:预习实验内容,学习相关知识。
2、实验中:按照实验内容要求进行实验,实验时注意每种 SQL 语句的基本命令 及各个关键字的含义,做好实验记录。
3、实验后:分析实验结果,总结实验知识,得出结论,按格式写出实验报告。
4、在整个实验过程中,要独立思考、独立按时完成实验任务,不懂的要虚心向 教师或同学请教。5、要求按指定格式书写实验报告,且报告中应反映出对本次实验的总结,下次 实验前交实验报告。
二、实验实习设备(环境)及要求(软硬件条件)
硬件:已联网的笔记本一台
软件:Navicat for MySQL
三、实验实习内容与步骤
(一).实验内容
1.启动 Navicat for MySQL,用 SELECT 语句对表进行简单查询操作,整个 查询过程只涉及到一个表,是最基本的查询语句。语法格式如下: Select <目标列组> From <表名> [Where <元组选择条件>] [Group by < 分组列> [Having <组选择条件>]] [Order by <排序列 1> <排序要求> [,
„n]]
考核成绩
课程编号
完成日期
学生学号
所在班级
教师评语 2.用 SELECT 语句对表进行连接查询操作,连接查询涉及被连接和连接两个 表,所以数据源一般为多个表。用来连接两个表的条件称为连接条件,一般格式 为: [<表名 1>.]<列名 1> <比较运算符> [<表名 2>.]<列名 2> 其中比较运算符主要有:=、>、<、>=、<=、!=。
(二).实验步骤
执行以下内容:
1.启动 Navicat for MySQL,在 MySQL – 新建连接中完成连接参数配置。
2.登录到本地数据库服务器后,连接到 test 数据库上。
3.用 Create Table 建立 Student 表,表结构如下所示:
属性名
SNO
Name
Age
College
字段名
CourseID
CourseName
类型
Varchar
Varchar
Integer
Varchar
类型
Varchar
Varchar
长度
20
10
30
长度
15
30
15
长度
20
30
5,2
Age
20
19
21
CourseName
计算机引论
C 语言
数据结构
College
计算机学院
通信学院
计算机学院
CourseBeforeID
空值(NULL)
C1
C2
4.用 Create Table 建立 Course 表,表结构如下所示:
CourseBeforeID Varchar
字段名
SNO
CourseID
Score
SNO
S00001
S00002
S00003
CourseID
C1
C2
C3
Name
张三
李四
王五
类型
Varchar
Varchar
DECIMAL
5.用 Create Table 建立 Choose 表,表结构如下所示:
6.用 INSERT 语句向 Student 表中插入 3 个元组:
7.用 INSERT 语句向 Course 表中插入 3 个元组:
8.用 INSERT 语句向 Choose 表中插入 7 个元组
SNO
S00001
S00001
S00001
S00002
S00002
S00003
S00003
CourseID
C1
C2
C3
C1
C2
C1
C3
Score
95
80
84
80
85
78
70
9.用 SELECT 语句,查询计算机学院学生的学号和姓名关系代数及代码:
10.用 SELECT 语句的 between„and„表示查询条件,查询年龄在 20~23 岁的学 生信息。 11. 用 SELECT 语句的 COUNT()聚集函数,统计 Student 表中学生总人数。
12.分别用 SELECT 语句的 max()、min()、sum()、avg()四个聚集函数,计算 Choose 表中 C1
课程的最高分、最低分、总分、平均分。
13.用 SELECT 语句对空值(NULL)的判断条件,查询 Course 表中先修课称编号为 空值的课程编号和课程名称。
14.用 SELECT 语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩
四、实验实习过程或算法(源程序、代码)
1.
用 Create Table 建立 Student 表代码:
CREATE TABLE Student
( SNO VARCHAR(10),
Name Varchar (10),
Age INTEGER ,
College VARCHAR(30)
);
2.
用 Create Table 建立 Course 表代码
CREATE TABLE Course
( CourseID VARCHAR(15),
CourseName VARCHAR(30) ,
CourseBeforeID Varchar (15)
);
3.
.用 Create Table 建立 Choose代码
CREATE TABLE Choose
( SNO VARCHAR(20),
CourseID VARCHAR(30),
Score DECIMAL (5,2)
);
4.用 INSERT 语句向 Student 表中插入 3 个元组代码
INSERT INTO student (SNO,Name,Age,College) VALUES ('S00001','张三',20,'计算机学院');
INSERT INTO student (SNO,Name,Age,College) VALUES ('S00002','李四',19,'通信学院');
INSERT INTO student (SNO,Name,Age,College) VALUES ('S00003','王五',21,'计算机学院');
5
.用 INSERT 语句向 Course 表中插入 3 个元组代码
INSERT INTO course (CourseID,CourseName,CourseBeforeID) VALUES ('C1','计算机引论',NULL);
INSERT INTO course (CourseID,CourseName,CourseBeforeID) VALUES ('C2','C语言','C1');
INSERT INTO course (CourseID,CourseName,CourseBeforeID) VALUES ('C3','数据结构','C2');
6.用 INSERT 语句向 Choose 表中插入 7 个元组代码
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00001','C1',95);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00001','C2',80);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00001','C3',84);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00002','C1',80);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00002','C2',85);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00003','C1',78);
INSERT INTO choose (SNO,CourseID,Score) VALUES ('S00003','C3',70); 7. 用 SELECT 语句,查询计算机学院学生的学号和姓名关系代数及代码
代码:SELECT * FROM student WHERE (College = '计算机学院');
8.用 SELECT 语句的 between„and„表示查询条件,查询年龄在 20~23 岁的学 生信息代码及关系代数
代码:SELECT Name FROM Student where Age BETWEEN 20 AND 23;
运行结果:
9用 SELECT 语句的 COUNT()聚集函数,统计 Student 表中学生总人数代码及运行结果
代码:SELECT COUNT(*) FROM Student; 运行结果:
10.
分别用 SELECT 语句的 max()、min()、sum()、avg()四个聚集函数,计算 Choose 表中
C1 课程的最高分、最低分、总分、平均分。 代码及运行结果
代码:SELECT MAX(Score) FROM choose WHERE(CourseID='C1');
SELECT MIN(Score) FROM choose WHERE(CourseID='C1');
SELECT SUM(Score) FROM choose WHERE(CourseID='C1');
SELECT AVG(Score) FROM choose WHERE(CourseID='C1'); 运行结果:
11.
用 SELECT 语句对空值(NULL)的判断条件,查询 Course 表中先修课称编号为 空值的课程编号和课程名称代码及运行结果:
代码:select * from course where CourseBeforeID is null ;
运行结果:
12
.用 SELECT 语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩关系代数代码及运行结果
关系代数: 代码:SELECT DISTINCT ,,ID,
FROMstudent,course,choose
WHERE = AND ID=ID;
运行结果:
五、实验实习结果分析和(或)源程序调试过程
思考题:
(1).
Where 与 Having 语句有何差别?
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
Where和having其实后面都是跟条件。区别在于它们后面的条件里如果有count之类的聚合函数的时候只能使用having而不能使用where。
(2).
Count(*)与 Count(字段名)有何差别?
count(*)统计的是结果集的总条数,即能计算一个表中的元组个数,包括重复项;
count(字段名)统计的是该字段值不为null的总条数。
(3).LIKE ‘[^s][^y][^s]%’与 NOT LIKE ‘sys%’有无区别?请加以验证?
答:是有区别的;
LIKE ‘[^s][^y][^s]%’表示匹配第一位不为s,第二位不为y,第三位不为s;
而NOT LIKE ‘sys%’表示匹配不以sys开头
[^...]负值字符集合表示匹配未包含的任意字符;
如:sysabc: 均不匹配而sabcys: NOT LIKE ‘sys%’可以匹配
可以用逻辑学的方法来理解,前者可以看成s^y^s^即(s+y+s)^,后者看成(sys)^。
心得体会:
(1)
发布评论