江南大学物联网工程学院数据库课程实验一作业1实验报告

简介: 江南大学物联网工程学院数据库课程实验一作业1实验报告

一、开发环境


DBMS:Microsoft SQL Server 2019 (64-bit)

可视化管理工具:Microsoft SQL Server

Management Studio- 18.10


二、代码及注释


--创建并使用该数据库
CREATE DATABASE test_one;
USE test_one;
--创建学生表 s
CREATE TABLE s(
snum VARCHAR(3) PRIMARY KEY, --将学生学号设置为主键
sname VARCHAR(5) NOT NULL, --非空约束(下同)
age INT NOT NULL,
sex VARCHAR(3) NOT NULL
);
--向学生表 s 添加测试字段
INSERT INTO s
-- VALUES('001','张三',20,'男');
-- VALUES('002','李四',19,'男');
-- VALUES('003','杨兰',19,'女');
-- VALUES ('004','韩梅',18,'女');
-- VALUES ('005','王丹',21,'女');
-- VALUES ('006','李强',21,'男');
VALUES ('007','江杰',19,'男');
--创建课程表
CREATE TABLE c(
cnum VARCHAR(4) PRIMARY KEY, -- 将课程课号设置为主键
cname VARCHAR(15) NOT NULL, -- 非空约束(下同)
credits INT NOT NULL,
teacher VARCHAR(5) NOT NULL
);
--向课程表 c 添加测试字段
INSERT INTO c
-- VALUES('C1','多媒体',3,'陈扬');
-- VALUES('C2','数据库',4,'王帆');
VALUES('C3','Java',3,'徐可');
--创建选课表 sc
CREATE TABLE sc(
snum VARCHAR(3),
cnum VARCHAR(4),
score INT,
--设置选课表的外键,使得该表中的 snum 和 cnum 受约束
CONSTRAINT snum_fkey FOREIGN KEY (snum) REFERENCES s(snum),
CONSTRAINT cnum_fkey FOREIGN KEY (cnum) REFERENCES c(cnum),
CONSTRAINT unique_sc UNIQUE (snum,cnum) --唯一性约束组
);
--向选课表 sc 添加测试字段
INSERT INTO sc
-- VALUES('002','C1',92);
-- VALUES('002','C2',97);
-- VALUES('003','C1',99);
-- VALUES('003','C2',88);
-- VALUES('004','C2',90);
-- VALUES('005','C2',90);
-- VALUES('006','C2',86);
-- VALUES('007','C1',86);
VALUES('003','C3',82);
--检索年龄介于 18~20 之间的女学生的学号和姓名
SELECT snum, sname FROM s
WHERE age BETWEEN 18 AND 20 AND sex = '女';
--检索选修了课程号为'C2',分数在 90 或 90 以上的学生姓名
SELECT s.sname FROM s 
JOIN sc --JOIN-ON 语句为内连接,该语法是 sql99 语法
ON s.snum = sc.snum --连接条件接在 ON 后面
WHERE sc.cnum = 'C2' AND score >= 90;
--检索李强同学所修课程的课程名称
SELECT c.cname FROM s 
JOIN sc --同上说明,为内连接 sql99 语法
ON s.snum = sc.snum --依据两表中的 snum 关联 s 和 sc 两表
JOIN c --再内连接 c 表
ON sc.cnum = c.cnum --依据两表中的 cnum 关联 sc 和 c 两表
WHERE s.sname = '李强';
--检索选修了数据库而没有选修多媒体的学生学号
SELECT s.snum FROM s
WHERE s.snum IN ( --子查询获取选修了数据库的学生学号
SELECT sc.snum FROM sc
WHERE sc.cnum = (--子查询获取数据库对应的课程课号
SELECT c.cnum FROM c
WHERE c.cname = '数据库'
)
)AND s.snum NOT IN (--子查询获取选修了多媒体的学生学号
SELECT sc.snum FROM sc
WHERE sc.cnum = (--子查询获取多媒体对应的课程课号
SELECT c.cnum FROM c
WHERE c.cname = '多媒体'
)
);
--检索没有选修数据库的学生名单
SELECT * FROM s 
WHERE s.snum NOT IN (--子查询获取选修了数据库的学生学号
SELECT sc.snum FROM sc
WHERE sc.cnum IN (--子查询获取数据库对应的课程课号
SELECT c.cnum FROM c
WHERE c.cname = '数据库'
)
);
--检索至少选修了两门课程的学生名单
SELECT * FROM s 
WHERE s.snum IN (--子查询获取至少选修了两门课程的学生学号
SELECT s1.snum
FROM sc AS s1,sc AS s2 --物理上一表,逻辑上两虚拟表
WHERE s1.snum = s2.snum --学号相同
AND s1.cnum <> s2.cnum --并且课号不同
);
--检索选修的课程包含李强同学所修课程的学生名单
SELECT * FROM s AS s1
WHERE s1.snum IN (
--子查询获取选修的课程包含李强同学所修课程的学生学号
SELECT sc1.snum FROM sc AS sc1
WHERE sc1.cnum IN (
--子查询获取李强同学所修课程的课程课号
SELECT sc2.cnum FROM sc AS sc2
WHERE sc2.snum = (--子查询获取李强同学的学号
SELECT s2.snum FROM s AS s2
WHERE s2.sname = '李强'
)
)
)AND s1.sname <> '李强'; -- 排除李强自己
--检索既选修了课程号为 C1 的课程又选修了课程号为 C2 的课程的学生学号
SELECT c1.snum 
--子查询获取两张虚拟表,其一选了 C1、其二选了 C2 的学生学号
FROM ( SELECT snum FROM sc WHERE sc.cnum = 'C1') AS c1,
(SELECT snum FROM sc WHERE sc.cnum = 'C2') AS c2
WHERE c1.snum = c2.snum; -- WHERE 条件查询,获得两张虚拟表的交集


三、小结


①对于条件较多且单层查询语句难以解决的时候,可以采用子查询,子查询可以从内向外写,每写–层可以测试看看该层所得结果是否是预期的,子查询实际上是通过未知表进行查询后的条件判断。

②当两张或多张表进行关联(非自连接)时,sq192 语法的方式是( from-where)直接将

连接条件写在 where 中,与筛选条件在一起,可读性较差,sq199 语法的方式是( joinon)将连接条件写在 on 中,筛选条件独自在where 中,可读性较好。



相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
1月前
|
存储 JSON Ubuntu
时序数据库 TDengine 支持集成开源的物联网平台 ThingsBoard
本文介绍了如何结合 Thingsboard 和 TDengine 实现设备管理和数据存储。Thingsboard 中的“设备配置”与 TDengine 中的超级表相对应,每个设备对应一个子表。通过创建设备配置和设备,实现数据的自动存储和管理。具体操作包括创建设备配置、添加设备、写入数据,并展示了车辆实时定位追踪和车队维护预警两个应用场景。
60 3
|
2月前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
2月前
|
前端开发 应用服务中间件 API
|
3月前
|
人工智能 物联网
【2022年无线通信和与物联网专场】中国工程院张平院士-AI使能6G演进与应用
中国工程院张平院士关于"AI使能6G演进与应用"的演讲摘要。
107 8
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的《数据库原理及应用》课程平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的《数据库原理及应用》课程平台的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的数据库课程在线教学的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的数据库课程在线教学的详细设计和实现(源码+lw+部署文档+讲解等)
56 2
|
4月前
|
数据库管理 Python
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的《数据库原理及应用》课程平台的详细设计和实现
基于SpringBoot+Vue的《数据库原理及应用》课程平台的详细设计和实现
38 1
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的《数据库原理及应用》课程平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的《数据库原理及应用》课程平台附带文章源码部署视频讲解等
49 0
|
5月前
|
Oracle Java 关系型数据库
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE

相关产品

  • 物联网平台
  • 下一篇
    无影云桌面