数据库实践:SQL创建与查询
需积分: 0 91 浏览量
更新于2024-09-19
收藏 75KB DOC 举报
"数据库练习,包括创建数据库、创建表、数据录入、SQL查询等实践操作。"
在这份数据库练习中,我们关注的核心知识点是数据库管理和SQL语言的应用。首先,我们需要了解如何使用SQL语句来创建数据库和表。例如,创建名为“数据库练习”的数据库可以使用以下语句:
```sql
CREATE DATABASE 数据库练习;
```
然后,我们需要在该数据库中创建“学生”、“课程”和“成绩”三张表。每张表应包含相应的字段,并根据描述设定数据类型和完整性约束。例如,“学生”表的创建语句可能如下:
```sql
CREATE TABLE 学生 (
学号 INT PRIMARY KEY,
姓名 VARCHAR(10),
性别 CHAR(1),
年龄 INT,
所在系 VARCHAR(20)
);
```
“课程”表和“成绩”表的创建方式类似,需要确保主键和外键的设置正确,以便维护数据的一致性。例如,“成绩”表中的“学号”和“课号”字段应作为外键,引用“学生”和“课程”表的主键。
接下来是数据录入。我们可以使用`INSERT INTO`语句将给定的数据插入到相应的表中。例如,插入“学生”表的首条记录:
```sql
INSERT INTO 学生 (学号, 姓名, 性别, 年龄, 所在系)
VALUES ('9512101', '李勇', '男', 19, '计算机系');
```
对于查询部分,我们需要利用SQL的聚合函数(如COUNT()、MAX())和连接操作来完成各种复杂的查询。以下是一些示例查询的SQL实现:
4.1 统计每门课程的修课人数和考试最高分:
```sql
SELECT 课号, COUNT(*) AS 修课人数, MAX(成绩) AS 最高分
FROM 成绩
GROUP BY 课号;
```
4.2 查询修课门数超过2门的学生的平均成绩和选课门数:
```sql
SELECT 学号, AVG(成绩) AS 平均成绩, COUNT(DISTINCT 课号) AS 选课门数
FROM 成绩
GROUP BY 学号
HAVING COUNT(DISTINCT 课号) > 2;
```
4.3 查询计算机系修了“数据库基础”课程的学生的姓名、性别和成绩:
```sql
SELECT s.姓名, s.性别, g.成绩
FROM 学生 s
JOIN 成绩 g ON s.学号 = g.学号
WHERE s.所在系 = '计算机系' AND g.课号 = 'c04';
```
4.4 查询哪些学生合选了一门课程,列出所选课程的学生学号和课程号:
```sql
SELECT g1.学号, g1.课号
FROM 成绩 g1
JOIN 成绩 g2 ON g1.课号 = g2.课号 AND g1.学号 <> g2.学号;
```
4.5 查询选修了C01号课程的学生的姓名和所在系:
```sql
SELECT s.姓名, s.所在系
FROM 学生 s
JOIN 成绩 g ON s.学号 = g.学号
WHERE g.课号 = 'c01';
```
4.6 查询'VB'课程考试成绩前三名的学生的学号、姓名、所在系:
```sql
SELECT s.学号, s.姓名, s.所在系
FROM 学生 s
JOIN 成绩 g ON s.学号 = g.学号
WHERE g.课号 = 'c02'
ORDER BY g.成绩 DESC
LIMIT 3;
```
4.7 删除信息系修课成绩小于60的学生记录,可以使用`DELETE`语句配合子查询:
```sql
DELETE FROM 成绩
WHERE 学号 IN (
SELECT g.学号
FROM 学生 s
JOIN 成绩 g ON s.学号 = g.学号
WHERE s.所在系 = '信息系' AND g.成绩 < 60
);
```
这个练习涵盖了数据库设计、数据录入和SQL查询的各个方面,是学习和检验数据库操作技能的好素材。通过这些练习,不仅可以熟悉SQL的基本语法,还能掌握如何处理实际数据和进行复杂查询。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2013-07-05 上传
2012-10-22 上传
2019-07-31 上传
2010-01-09 上传
2022-08-10 上传
xinxinnatixp
- 粉丝: 0
- 资源: 13
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析