SQL练习题集:涵盖E-R图、查询与数据库设计
需积分: 33 128 浏览量
更新于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 上传
2024-07-14 上传
259 浏览量
2024-07-15 上传
118 浏览量
开始编程的李先生
- 粉丝: 5
- 资源: 4
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常