渗透多知识点的50个数据库题目
根据给定文件中的标题、描述、标签以及部分内容,可以总结出以下相关知识点: ### SQL基础概念及用法 #### 1. 基本表结构 - **学生表(Student):** 包含学号(S#)、学生姓名(Sname)、学生年龄(Sage)、学生性别(Ssex)。 - **课程表(Course):** 包含课程编号(C#)、课程名字(Cname)、教师编号(T#)。 - **成绩表(SC):** 包含学号(S#)、课程编号(C#)、成绩(score)。 - **教师表(Teacher):** 包含教师编号(T#)、教师名字(Tname)。 #### 2. SQL查询语句详解 - **子查询:** 使用`SELECT`子句嵌套在另一个`SELECT`语句中,用于获取内层查询的结果作为外层查询的条件或数据源。 - **示例1:** 查询“001”课程比“002”课程成绩高的所有学生的学号。 ```sql SELECT a.S# FROM (SELECT S#, score FROM SC WHERE C# = '001') a, (SELECT S#, score FROM SC WHERE C# = '002') b WHERE a.score > b.score AND a.S# = b.S#; ``` - **聚合函数:** `AVG`, `COUNT`, `SUM`等用于对数据进行统计分析。 - **示例2:** 查询平均成绩大于60分的同学的学号和平均成绩。 ```sql SELECT S#, AVG(score) FROM sc GROUP BY S# HAVING AVG(score) > 60; ``` - **示例3:** 查询所有同学的学号、姓名、选课数、总成绩。 ```sql SELECT Student.S#, Student.Sname, COUNT(SC.C#), SUM(score) FROM Student LEFT OUTER JOIN SC ON Student.S# = SC.S# GROUP BY Student.S#, Sname; ``` - **模式匹配:** 使用`LIKE`关键字进行模糊匹配。 - **示例4:** 查询姓“李”的老师的个数。 ```sql SELECT COUNT(DISTINCT Tname) FROM Teacher WHERE Tname LIKE '李%'; ``` - **连接查询:** 使用`JOIN`关键字将多个表连接起来进行查询。 - **示例5:** 查询没学过“叶平”老师课的同学的学号、姓名。 ```sql SELECT Student.S#, Student.Sname FROM Student WHERE S# NOT IN ( SELECT DISTINCT(SC.S#) FROM SC, Course, Teacher WHERE SC.C# = Course.C# AND Teacher.T# = Course.T# AND Teacher.Tname = '叶平' ); ``` - **示例6:** 查询学过“001”并且也学过编号“002”课程的同学的学号、姓名。 ```sql SELECT Student.S#, Student.Sname FROM Student, SC WHERE Student.S# = SC.S# AND SC.C# = '001' AND EXISTS ( SELECT * FROM SC AS SC_2 WHERE SC_2.S# = SC.S# AND SC_2.C# = '002' ); ``` #### 3. 复杂查询 - **存在性子查询:** 使用`EXISTS`关键字来判断子查询结果是否存在。 - **示例7:** 查询学过“叶平”老师所教的所有课的同学的学号、姓名。 ```sql SELECT S#, Sname FROM Student WHERE S# IN ( SELECT S# FROM SC, Course, Teacher WHERE SC.C# = Course.C# AND Teacher.T# = Course.T# AND Teacher.Tname = '叶平' GROUP BY S# HAVING COUNT(SC.C#) = ( SELECT COUNT(C#) FROM Course, Teacher WHERE Teacher.T# = Course.T# AND Tname = '叶平' ) ); ``` - **比较子查询:** 在查询中使用子查询获取特定值,并与查询结果进行比较。 - **示例8:** 查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名。 ```sql SELECT S#, Sname FROM ( SELECT Student.S#, Student.Sname, score, (SELECT score FROM SC AS SC_2 WHERE SC_2.S# = Student.S# AND SC_2.C# = '002') AS score2 FROM Student, SC WHERE Student.S# = SC.S# AND C# = '001' ) S_2 WHERE score2 < score; ``` #### 4. 其他高级用法 - **排除条件:** 使用`NOT IN`或`NOT EXISTS`来筛选不符合条件的数据。 - **示例9:** 查询所有课程成绩小于60分的同学的学号、姓名。 ```sql SELECT S#, Sname FROM Student WHERE S# NOT IN ( SELECT Student.S# FROM Student, SC WHERE S.S# = SC.S# AND score > 60 ); ``` - **示例10:** 查询没有学全所有课的同学的学号、姓名。 ```sql SELECT Student.S#, Student.Sname FROM Student, SC WHERE Student.S# = SC.S# GROUP BY Student.S#, Student.Sname HAVING COUNT(C#) < (SELECT COUNT(C#) FROM Course); ``` #### 5. 实战应用 - **相似条件查询:** 使用`IN`关键字或`EXISTS`结合子查询来找出与某个标准相似的数据。 - **示例11:** 查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名。 ```sql SELECT S#, Sname FROM Student, SC WHERE Student.S# = SC.S# AND C# IN ( SELECT C# FROM SC WHERE S# = '1001' ); ``` 这些题目涵盖了SQL语言的基础语法到复杂查询的各种应用场景,对于学习和掌握SQL语言来说是非常全面且实用的练习材料。通过这些练习,不仅可以帮助学习者熟悉基本的SQL语句,还能进一步提升处理复杂数据查询的能力,对于应对数据库相关的考试或面试都有很大的帮助。
剩余6页未读,继续阅读
- 粉丝: 61
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助