SQL查询语句练习题27道

本文提供了27道SQL查询练习题,涉及学生管理数据库,包括查询学生、课程、成绩等信息,以及一些高级查询技巧,如分组、聚合、条件筛选等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习环境为:XP+SQL2000数据库

练习使用的数据库为:学生管理数据库

数据库下载地址为: http://download.youkuaiyun.com/download/friendan/4648150

说明

         这是我在学习数据库课时,老师给的27道SELECT语句练习题,在写这篇文章时,老师并没有给参考答案,

写这篇文章的目的完全是为了加深我对SQL语句的理解和方便我以后复习、查阅,

文中难免有错误之处,发现的朋友,望指正一二,感激不尽。

数据库中有三张表,分别为student,course,SC(即学生表,课程表,选课表)

//三张表截图如下:



--1.分别查询学生表和学生修课表中的全部数据。
SELECT * FROM student--查询学生表
SELECT * FROM course--查询课程表


--2.查询成绩在70到80分之间的学生的学号、课程号和成绩。
SELECT Sno 学号,Cno 课程号,Grade 成绩
FROM SC
WHERE Grade BETWEEN 70 AND 80

--3.查询C01号课程成绩最高的分数
SELECT TOP 1 Grade
FROM SC
WHERE Cno='C01'
ORDER BY Grade DESC--降序DESC,升序ASC

--4.查询学生都选修了哪些课程,要求列出课程号。
SELECT Cname AS 学生选修的课程,Cno AS 课程号
FROM course
WHERE Cno IN(SELECT DISTINCT Cno FROM SC)--DISTINCT用来去除重复

--5.查询Northwind数据库中orders表的Or

<think>首先,用户查询的是“SQL 查询语句练习题及答案”。系统指令要求我使用中文回答,并确保回答结构清晰、真实可靠。 回顾系统级指令: - 所有行内表达式用 $...$,比如 $x^2$。 - 独立公式用 $$...$$ 并单独成段。 - 使用中文回答。 - 生成相关问题。 - 在引用的段落末尾添加引用标识,如 [^1]。 - 回答中要结构清晰,帮助用户逐步解决问题。 在用户消息中,有一个引用:[^1] 引用了一个SQL Server的查询语句例子。它说:“SQL Server经典查询语句练习题及答案。15.显示95001和95004班全体学生的全部个人信息(不包括选课)。(student表全部属性) select *from Student where class=95001 or class=95004 [^1]。” 这表明用户可能想练习SQL查询。 我的响应应该包括: 1. **SQL查询练习题及答案**:提供一些经典的SQL查询练习题,并给出答案。确保基于常见数据库如MySQLSQL Server。 2. **结构清晰**:逐步呈现问题,然后答案。 3. **生成相关问题**:在最后添加相关问题部分,以鼓励用户深入。 4. **使用中文**:整个响应用中文。 5. **引用处理**:如果引用内容,添加 [^1]。但在这个案例中,用户提供了引用,所以我应该适当地引用它或基于它构建。 用户真正的需求是提升SQL技能,所以我需要提供练习题。引用 [^1] 是一个例子,所以我可以在我的响应中引用它作为参考。 计划响应结构: - **引言**:简要介绍SQL练习的重要性。 - **练习题及答案**:列出多个SQL查询练习题,每个问题后给出SQL语句作为答案。 - **相关问题**:在最后添加“相关问题”部分,提出更深入的问题。 - **确保真实性**:使用标准SQL语法,避免错误。 练习题想法(基于常见场景): 1. 查询所有学生信息。 2. 查询特定班级的学生。 3. 聚合查询,如平均成绩。 4. JOIN操作,连接多个表。 5. WHERE子句条件。 6. GROUP BY和HAVING。 7. ORDER BY排序。 从引用中提取:用户提到“student表”,所以假设有表如Student、Course等。 定义假设的表结构以保持一致性: - Student (student_id, name, class, age, ...) - Course (course_id, course_name, ...) - Score (student_id, course_id, score, ...) 练习题: 1. 查询所有学生的信息(引用中的例子)。 2. 查询特定班级的学生。 3. 查询平均成绩大于80的学生。 4. 查询选修了特定课程的学生。 5. 等等。 在答案中,使用SQL代码块,类似示例中的Python代码块。 最后,生成相关问题: - 例如,“如何优化SQL查询性能?”或“SQL中的索引是什么?” 响应大纲: 1. 开头:介绍SQL练习。 2. 练习题列表: - 每个问题描述。 - SQL答案在代码块中。 3. 结束:相关问题部分。 确保使用中文。</think>以下是针对 SQL 查询语句练习题及答案,旨在帮助您提升 SQL 技能。我基于常见的数据库系统(如 MySQLSQL Server)设计了一系列经典练习题,覆盖基本查询、条件过滤、聚合函、表连接等核心概念。每个练习题都附带一个清晰的 SQL 语句答案,使用代码块展示。练习题基于一个简化的学生选课数据库模型(假设表结构如下),以确保真实性和一致性: - **Student 表**:存储学生信息,包括 `student_id`(学号)、`name`(姓名)、`class`(班级)、`age`(年龄)等属性。 - **Course 表**:存储课程信息,包括 `course_id`(课程号)、`course_name`(课程名)。 - **Score 表**:存储学生成绩,包括 `student_id`(学号)、`course_id`(课程号)、`score`(分)。 ### SQL 查询练习题及答案 我将逐步列出 5 个经典练习题,每个问题后给出对应的 SQL 语句答案。这些练习从简单到中等难度,帮助您逐步掌握 SQL 语法。 1. **问题:查询所有学生的全部个人信息(不包括选课信息)。** (这是基于引用中的经典例子,直接查询 Student 表的所有属性。) **答案**: ```sql SELECT * FROM Student; ``` 2. **问题:查询班级为 95001 或 95004 的所有学生的姓名和年龄。** (此问题扩展了引用中的例子,添加了条件过滤,使用 WHERE 子句。) **答案**: ```sql SELECT name, age FROM Student WHERE class = '95001' OR class = '95004'; ``` 3. **问题:查询每个班级的平均年龄,并按班级升序排序。** (引入聚合函和 GROUP BY 子句,用于据分组统计。) **答案**: ```sql SELECT class, AVG(age) AS avg_age FROM Student GROUP BY class ORDER BY class ASC; ``` 4. **问题:查询选修了课程号为 'C001' 的学生的姓名和该课程分,且分大于 80。** (涉及表连接 JOIN 操作和条件过滤,连接 Student 和 Score 表。) **答案**: ```sql SELECT s.name, sc.score FROM Student s JOIN Score sc ON s.student_id = sc.student_id WHERE sc.course_id = 'C001' AND sc.score > 80; ``` 5. **问题:查询平均分大于 85 的学生姓名及其平均分,只显示前 5 名。** (结合聚合函、HAVING 子句和 LIMIT 子句,用于高级筛选。) **答案**: ```sql SELECT s.name, AVG(sc.score) AS avg_score FROM Student s JOIN Score sc ON s.student_id = sc.student_id GROUP BY s.student_id HAVING AVG(sc.score) > 85 ORDER BY avg_score DESC LIMIT 5; ``` ### 练习建议 - **实践方法**:在数据库管理工具(如 MySQL Workbench 或 SQL Server Management Studio)中创建上述表并插入测试据,然后运行这些查询。例如,插入据脚本可能包括: ```sql INSERT INTO Student (student_id, name, class, age) VALUES ('S001', '张三', '95001', 20), ('S002', '李四', '95001', 22), ('S003', '王五', '95004', 21); -- 类似地添加 Course 和 Score 表据 ``` - **为什么有效**:这些练习覆盖了 SQL 的核心知识点,如 SELECT、WHERE、JOIN、GROUP BY 和聚合函,能显著提升您的查询能力。引用中的例子(查询特定班级学生)是经典入题,我已将其融入练习中[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值