SQL练习题集:涵盖E-R图、查询与数据库设计
需积分: 33 32 浏览量
更新于2024-07-21
收藏 28KB DOCX 举报
"这些练习题主要涉及SQL语言的基础操作,包括E-R图的理解,表的主键识别,以及各种查询语句的编写。通过解决这些问题,可以加深对SQL语法的理解和应用能力。"
一、学生和课程关系的问题:
1. E-R图表示:学生实体与课程实体之间存在一对多的关系,即一个学生可以选修多门课程,一门课程可以被多个学生选修。学习实体作为联系实体,连接学生和课程,包含学号和课程ID作为外键,以及成绩信息。
2. 主键字段:学生表的主键是学号,课程表的主键是课程ID,学习表的主键是组合键(学号,课程ID)。
3. SQL语句示例:
- (1) 查出所有男同学的基本信息:`SELECT * FROM 学生 WHERE 性别 = '男'`
- (2) 查出学生的学号,姓名,班级,课程名称,成绩:`SELECT 学生.学号, 学生.姓名, 学生.班级, 课程.课程名称, 学习.成绩 FROM 学生 JOIN 学习 ON 学生.学号 = 学习.学号 JOIN 课程 ON 学习.课程ID = 课程.课程ID`
- (3) 查出成绩表中成绩大于平均成绩的信息:需要先计算平均成绩,然后查询:`SELECT * FROM 学习 WHERE 成绩 > (SELECT AVG(成绩) FROM 学习)`
- (4) 查出民族为汉族或者回族的学生的所有基本信息:`SELECT * FROM 学生 WHERE 民族 IN ('汉族', '回族')`
- (5) 查出成绩在70-80分之间的学生姓名,课程名称和成绩:`SELECT 学生.姓名, 课程.课程名称, 学习.成绩 FROM 学生 JOIN 学习 ON 学生.学号 = 学习.学号 JOIN 课程 ON 学习.课程ID = 课程.课程ID WHERE 学习.成绩 BETWEEN 70 AND 80`
二、职工社团数据库问题:
1. 定义表及关系:
- 职工表:`CREATE TABLE 职工 (职工号 INT PRIMARY KEY, 姓名 VARCHAR(50), 年龄 INT, 性别 CHAR(1))`
- 社会团体表:`CREATE TABLE 社会团体 (编号 INT PRIMARY KEY, 名称 VARCHAR(100), 负责人 INT, 活动地点 VARCHAR(200), FOREIGN KEY (负责人) REFERENCES 职工(职工号))`
- 参加表:`CREATE TABLE 参加 (职工号 INT, 编号 INT, 参加日期 DATE, PRIMARY KEY (职工号, 编号), FOREIGN KEY (职工号) REFERENCES 职工(职工号), FOREIGN KEY (编号) REFERENCES 社会团体(编号))`
2. 视图创建:
- 社团负责人:`CREATE VIEW 社团负责人 AS SELECT 编号, 名称, 负责人, 姓名, 性别 FROM 社会团体 JOIN 职工 ON 社会团体.负责人 = 职工.职工号`
- 参加人情况:`CREATE VIEW 参加人情况 AS SELECT 职工号, 姓名, 社团编号, 社团名称, 参加日期 FROM 职工 JOIN 参加 ON 职工.职工号 = 参加.职工号 JOIN 社会团体 ON 参加.编号 = 社会团体.编号`
3. 查询语句:
- 查找参加唱歌队或篮球队的职工号和姓名:`SELECT 职工号, 姓名 FROM 职工 JOIN 参加 ON 职工.职工号 = 参加.职工号 JOIN 社会团体 ON 参加.编号 = 社会团体.编号 WHERE 社会团体.名称 IN ('唱歌队', '篮球队')`
- 查找没有参加任何社会团体的职工情况:`SELECT * FROM 职工 WHERE 职工号 NOT IN (SELECT 职工号 FROM 参加)`
- 查找参加了全部社会团体的职工情况:这个查询较为复杂,因为需要知道所有的社会团体编号,所以实际操作可能需要更具体的数据库信息
- 查找参加了职工号为“1001”的职工所参加的全部社会团体的职工号:`SELECT DISTINCT 职工号 FROM 参加 WHERE 编号 IN (SELECT 编号 FROM 参加 WHERE 职工号 = '1001')`
- 求每个社会团体的参加人数:`SELECT 社会团体.编号, 社会团体.名称, COUNT(*) as 参加人数 FROM 社会团体 JOIN 参加 ON 社会团体.编号 = 参加.编号 GROUP BY 社会团体.编号, 社会团体.名称`
- 求参加人数最多的社会团体的名称和参加人数:`SELECT 社会团体.名称, MAX(参加人数) FROM (SELECT 社会团体.名称, COUNT(*) as 参加人数 FROM 社会团体 JOIN 参加 ON 社会团体.编号 = 参加.编号 GROUP BY 社会团体.编号, 社会团体.名称) AS 社团计数 GROUP BY 社会团体.名称 ORDER BY 参加人数 DESC LIMIT 1`
- 求参加人数超过100人的社会团体的名称和负责人:`SELECT 社会团体.名称, 负责人 FROM 社会团体 WHERE 社会团体编号 IN (SELECT 编号 FROM 参加 GROUP BY 编号 HAVING COUNT(*) > 100)`
- 把权限赋予用户李平:`GRANT SELECT, INSERT, DELETE ON 社会团体, 参加 TO '李平'; GRANT GRANT OPTION ON 社会团体, 参加 TO '李平';`
三、SQL2000, flash, net字段设置为浮点型:
1. 创建student和computer表:
- `CREATE TABLE student (name VARCHAR(50), number INT, sex CHAR(1));`
- `CREATE TABLE computer (name VARCHAR(50), number INT, sex CHAR(1), SQL2000 FLOAT, flash FLOAT, net FLOAT);`
2. 查询语句:
- 输出所有男生的成绩:`SELECT name AS SQL数据库, flash AS 网络动画, net AS 计算机网络 FROM computer WHERE sex = '男'`
- 输出所有SQL成绩在90以上的记录:`SELECT * FROM computer WHERE SQL2000 >= 90`
2010-05-26 上传
2023-07-21 上传
2023-06-11 上传
2024-01-12 上传
2023-05-11 上传
2023-09-13 上传
2023-05-15 上传
开始编程的李先生
- 粉丝: 5
- 资源: 4
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍