根据给定的数据库复习题目,我们可以总结出一系列重要的SQL知识点,包括基本的查询操作、条件筛选、聚合函数的使用以及连接操作等。下面将逐一解释这些知识点。 ### 1. 查询指定字段 - **示例**:查询Student表中的所有记录的Sname、Ssex和Class列。 - **SQL语句**:`SELECT Sname, Ssex, Class FROM Student;` - **知识点**:使用`SELECT`关键字选择特定列进行查询。 ### 2. 去重查询 - **示例**:查询教师所有的单位即不重复的Depart列。 - **SQL语句**:`SELECT DISTINCT depart FROM teacher;` - **知识点**:使用`DISTINCT`关键字去除结果集中的重复行。 ### 3. 查询所有字段 - **示例**:查询Student表的所有记录。 - **SQL语句**:`SELECT * FROM student;` - **知识点**:使用`*`表示选择所有列。 ### 4. 使用范围查询 - **示例**:查询Score表中成绩在60到80之间的所有记录。 - **SQL语句**:`SELECT * FROM score WHERE degree BETWEEN 60 AND 80;` - **知识点**:`BETWEEN AND`用于指定一个范围,包括两端的值。 ### 5. 使用列表查询 - **示例**:查询Score表中成绩为85,86或88的记录。 - **SQL语句**:`SELECT * FROM score WHERE degree IN (85, 86, 88);` - **知识点**:`IN`关键字用于匹配多个值。 ### 6. 多条件查询 - **示例**:查询Student表中“95031”班或性别为“女”的同学记录。 - **SQL语句**:`SELECT * FROM student WHERE Class = '95031' OR Ssex = '女';` - **知识点**:使用`OR`逻辑运算符连接多个条件。 ### 7. 排序查询 - **示例**:以Class降序查询Student表的所有记录。 - **SQL语句**:`SELECT * FROM student ORDER BY Class DESC;` - **知识点**:`ORDER BY`关键字后跟列名进行排序,`DESC`表示降序。 ### 8. 复合排序 - **示例**:以Cno升序、Degree降序查询Score表的所有记录。 - **SQL语句**:`SELECT * FROM score ORDER BY Cno ASC, Degree DESC;` - **知识点**:可以对多个列进行排序,使用逗号分隔多个排序条件。 ### 9. 聚合函数与分组 - **示例**:查询“95031”班的学生人数。 - **SQL语句**:`SELECT COUNT(*) AS '人数' FROM student WHERE Class = '95031';` - **知识点**:使用`COUNT(*)`计算总行数。 ### 10. 联合使用子查询 - **示例**:查询Score表中的最高分的学生学号和课程号。 - **SQL语句**:`SELECT Sno, Cno FROM score WHERE Degree = (SELECT MAX(Degree) FROM score);` - **知识点**:使用子查询获取最高分,并在外部查询中找到对应的记录。 ### 11. 平均值计算 - **示例**:查询‘3-105’号课程的平均分。 - **SQL语句**:`SELECT AVG(Degree) AS '平均分' FROM score WHERE Cno = '3-105';` - **知识点**:使用`AVG()`计算平均值。 ### 12. 分组和过滤 - **示例**:查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。 - **SQL语句**:`SELECT Cno, AVG(Degree) AS '平均分' FROM score WHERE Cno LIKE '3%' GROUP BY Cno HAVING COUNT(*) >= 5;` - **知识点**:`LIKE`关键字用于模式匹配,`GROUP BY`进行分组,`HAVING`用于对分组后的结果进行过滤。 ### 13. 子查询与比较 - **示例**:查询最低分大于70,最高分小于90的Sno列。 - **SQL语句**:`SELECT Sno FROM score WHERE Degree > (SELECT MIN(Degree) FROM score WHERE Degree > 70) AND Degree < (SELECT MAX(Degree) FROM score WHERE Degree < 90);` - **知识点**:使用子查询来定义比较的基准值。 ### 14. 多表查询 - **示例**:查询所有学生的Sname、Cno和Degree列。 - **SQL语句**:`SELECT s.Sname, sc.Cno, sc.Degree FROM student s JOIN score sc ON s.Sno = sc.Sno;` - **知识点**:使用`JOIN`关键字实现表的连接。 ### 15. 表别名 - **示例**:查询所有学生的Sno、Cname和Degree列。 - **SQL语句**:`SELECT s.Sno, c.Cname, sc.Degree FROM student s JOIN score sc ON s.Sno = sc.Sno JOIN course c ON sc.Cno = c.Cno;` - **知识点**:为表使用别名简化查询。 ### 16. 字段别名 - **示例**:查询所有学生的Sname、Cname和Degree列。 - **SQL语句**:`SELECT s.Sname AS '学生姓名', c.Cname AS '课程名称', sc.Degree AS '成绩' FROM student s JOIN score sc ON s.Sno = sc.Sno JOIN course c ON sc.Cno = c.Cno;` - **知识点**:使用`AS`关键字为字段指定别名。 ### 17. 分组计算 - **示例**:查询“95033”班所选课程的平均分。 - **SQL语句**:`SELECT Cno, AVG(Degree) AS '平均分' FROM score WHERE Sno IN (SELECT Sno FROM student WHERE Class = '95033') GROUP BY Cno;` - **知识点**:结合子查询进行条件筛选。 ### 18. 创建表与数据插入 - **示例**:创建一个grade表并插入数据。 - **SQL语句**: ```sql CREATE TABLE grade (low NUMBER(3,0), upp NUMBER(3), rank CHAR(1)); INSERT INTO grade VALUES (90, 100, 'A'); INSERT INTO grade VALUES (80, 89, 'B'); INSERT INTO grade VALUES (70, 79, 'C'); INSERT INTO grade VALUES (60, 69, 'D'); INSERT INTO grade VALUES (0, 59, 'E'); COMMIT; SELECT s.Sno, sc.Cno, g.rank FROM student s JOIN score sc ON s.Sno = sc.Sno JOIN grade g ON sc.Degree BETWEEN g.low AND g.upp; ``` - **知识点**:`CREATE TABLE`用于创建新表,`INSERT INTO`用于插入数据,`COMMIT`提交事务。 ### 19. 条件比较 - **示例**:查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - **SQL语句**:`SELECT * FROM score WHERE Cno = '3-105' AND Degree > (SELECT Degree FROM score WHERE Sno = '109' AND Cno = '3-105');` - **知识点**:通过子查询获取比较对象。 ### 20. 复杂条件筛选 - **示例**:查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。 - **SQL语句**:`SELECT Sno, Cno, Degree FROM score WHERE Degree <> (SELECT MAX(Degree) FROM score WHERE Sno = score.Sno) GROUP BY Sno HAVING COUNT(Cno) > 1;` - **知识点**:结合`<>`(不等于)和`HAVING`进行复杂条件筛选。 ### 21. 比较值 - **示例**:查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - **SQL语句**:`SELECT * FROM score WHERE Degree > (SELECT Degree FROM score WHERE Sno = '109' AND Cno = '3-105');` - **知识点**:子查询获取比较基准。 ### 22. 条件筛选 - **示例**:查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - **SQL语句**:`SELECT Sno, Sname, Sbirthday FROM student WHERE YEAR(Sbirthday) = (SELECT YEAR(Sbirthday) FROM student WHERE Sno = '108');` - **知识点**:使用`YEAR()`提取年份。 ### 23. 连接多个表 - **示例**:查询“张旭“教师任课的学生成绩。 - **SQL语句**:`SELECT s.Sno, c.Cno, sc.Degree FROM student s JOIN score sc ON s.Sno = sc.Sno JOIN course c ON sc.Cno = c.Cno JOIN teacher t ON c.Tno = t.Tno WHERE t.Tname = '张旭';` - **知识点**:通过多个表之间的连接获取所需数据。 ### 24. 聚合函数与分组 - **示例**:查询选修某课程的同学人数多于5人的教师姓名。 - **SQL语句**:`SELECT t.Tname FROM teacher t JOIN course c ON t.Tno = c.Tno JOIN score sc ON c.Cno = sc.Cno GROUP BY t.Tname HAVING COUNT(sc.Sno) > 5;` - **知识点**:使用`HAVING`过滤分组结果。 ### 25. 多条件查询 - **示例**:查询95033班和95031班全体学生的记录。 - **SQL语句**:`SELECT * FROM student WHERE Class IN ('95033', '95031');` - **知识点**:使用`IN`关键字匹配多个值。 ### 26. 条件查询 - **示例**:查询存在有85分以上成绩的课程Cno. - **SQL语句**:`SELECT DISTINCT Cno FROM score WHERE Degree >= 85;` - **知识点**:使用`DISTINCT`去除重复值。 ### 27. 多表关联 - **示例**:查询出“计算机系“教师所教课程的成绩表。 - **SQL语句**:`SELECT s.Sno, c.Cno, sc.Degree FROM student s JOIN score sc ON s.Sno = sc.Sno JOIN course c ON sc.Cno = c.Cno JOIN teacher t ON c.Tno = t.Tno WHERE t.Depart = '计算机系';` - **知识点**:通过表连接获取跨表数据。 ### 28. 多表连接与条件筛选 - **示例**:查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - **SQL语句**:`SELECT t1.Tname, t1.Prof FROM teacher t1 JOIN teacher t2 ON t1.Prof <> t2.Prof WHERE t1.Depart = '计算机系' AND t2.Depart = '电子工程系';` - **知识点**:使用表连接进行条件筛选。 ### 29. 条件排序 - **示例**:查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - **SQL语句**:`SELECT Cno, Sno, Degree FROM score WHERE Cno = '3-105' AND Degree > (SELECT Degree FROM score WHERE Cno = '3-245') ORDER BY Degree DESC;` - **知识点**:结合子查询进行条件筛选和排序。 ### 30. 子查询与比较 - **示例**:查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - **SQL语句**:`SELECT Cno, Sno, Degree FROM score WHERE Cno = '3-105' AND Degree > (SELECT Degree FROM score WHERE Cno = '3-245');` - **知识点**:使用子查询获取比较基准值。 ### 31. 多表连接 - **示例**:查询所有教师和同学的name、sex和birthday. - **SQL语句**:`SELECT name, sex, birthday FROM student UNION SELECT Tname, Tsex, Tbday FROM teacher;` - **知识点**:使用`UNION`合并两个表的结果。 ### 32. 条件筛选与多表连接 - **示例**:查询所有“女”教师和“女”同学的name、sex和birthday. - **SQL语句**:`SELECT name, sex, birthday FROM student WHERE Ssex = '女' UNION SELECT Tname, Tsex, Tbday FROM teacher WHERE Tsex = '女';` - **知识点**:结合条件筛选和`UNION`操作。 ### 33. 子查询与条件筛选 - **示例**:查询成绩比该课程平均成绩低的同学的成绩表。 - **SQL语句**:`SELECT Sno, Cno, Degree FROM score WHERE Degree < (SELECT AVG(Degree) FROM score WHERE Cno = score.Cno);` - **知识点**:使用子查询计算每门课程的平均成绩。 ### 34. 多表连接 - **示例**:查询所有任课教师的Tname和Depart. - **SQL语句**:`SELECT t.Tname, t.Depart FROM teacher t JOIN course c ON t.Tno = c.Tno;` - **知识点**:使用表连接获取所需数据。 ### 35. 外连接 - **示例**:查询所有未讲课的教师的Tname和Depart. - **SQL语句**:`SELECT t.Tname, t.Depart FROM teacher t LEFT JOIN course c ON t.Tno = c.Tno WHERE c.Cno IS NULL;` - **知识点**:使用左外连接和`IS NULL`进行条件筛选。 ### 36. 条件筛选与分组 - **示例**:查询至少有2名男生的班号。 - **SQL语句**:`SELECT Class FROM student WHERE Ssex = '男' GROUP BY Class HAVING COUNT(*) >= 2;` - **知识点**:结合`HAVING`进行分组条件筛选。 ### 37. 条件筛选 - **示例**:查询Student表中不姓“王”的同学记录。 - **SQL语句**:`SELECT * FROM student WHERE Sname NOT LIKE '王%';` - **知识点**:使用`NOT LIKE`进行模式匹配。 ### 38. 字段计算 - **示例**:查询Student表中每个学生的姓名和年龄。 - **SQL语句**:`SELECT Sname, YEAR(CURDATE()) - YEAR(Sbirthday) AS '年龄' FROM student;` - **知识点**:使用当前日期和生日计算年龄。 ### 39. 聚合函数 - **示例**:查询Student表中最大和最小的Sbirthday日期值。 - **SQL语句**:`SELECT MAX(Sbirthday) AS '最晚出生日期', MIN(Sbirthday) AS '最早出生日期' FROM student;` - **知识点**:使用`MAX()`和`MIN()`计算最大值和最小值。 ### 40. 排序与分组 - **示例**:以班号和年龄从大到小的顺序查询Student表中的全部记录。 - **SQL语句**:`SELECT *, YEAR(CURDATE()) - YEAR(Sbirthday) AS '年龄' FROM student ORDER BY Class DESC, `年龄` DESC;` - **知识点**:结合`ORDER BY`进行排序。 ### 41. 多表连接与条件筛选 - **示例**:查询“男”教师及其所上的课程。 - **SQL语句**:`SELECT t.Tname, c.Cname FROM teacher t JOIN course c ON t.Tno = c.Tno WHERE t.Tsex = '男';` - **知识点**:使用表连接和条件筛选。 ### 42. 子查询与比较 - **示例**:查询最高分同学的Sno、Cno和Degree列。 - **SQL语句**:`SELECT Sno, Cno, Degree FROM score WHERE Degree = (SELECT MAX(Degree) FROM score);` - **知识点**:使用子查询获取最高分,并在外层查询中找到对应记录。 ### 43. 条件筛选 - **示例**:查询和“李军”同性别的所有同学的Sname. - **SQL语句**:`SELECT Sname FROM student WHERE Ssex = (SELECT Ssex FROM student WHERE Sname = '李军');` - **知识点**:使用子查询获取条件值。 ### 44. 多条件筛选 - **示例**:查询和“李军”同性别并同班的同学Sname. - **SQL语句**:`SELECT Sname FROM student WHERE Ssex = (SELECT Ssex FROM student WHERE Sname = '李军') AND Class = (SELECT Class FROM student WHERE Sname = '李军');` - **知识点**:使用子查询获取多个条件值。 ### 45. 多表连接与条件筛选 - **示例**:查询所有选修“计算机导论”课程的“男”同学的成绩表 - **SQL语句**:`SELECT s.Sname, c.Cname, sc.Degree FROM student s JOIN score sc ON s.Sno = sc.Sno JOIN course c ON sc.Cno = c.Cno WHERE s.Ssex = '男' AND c.Cname = '计算机导论';` - **知识点**:使用表连接和条件筛选获取跨表数据。 这些SQL练习题涵盖了数据库查询的基本到高级技巧,有助于加深对SQL语言的理解和掌握。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 本资源库是关于“Java Collection Framework API”的参考资料,是 Java 开发社区的重要贡献,旨在提供有关 Java 语言学院 API 的实践示例和递归教育关系 .zip
- 插件: e2eFood.dll
- 打造最强的Java安全研究与安全开发面试题库,帮助师傅们找到满意的工作.zip
- (源码)基于Spark的实时用户行为分析系统.zip
- (源码)基于Spring Boot和Vue的个人博客后台管理系统.zip
- 将流行的 ruby faker gem 引入 Java.zip
- (源码)基于C#和ArcGIS Engine的房屋管理系统.zip
- (源码)基于C语言的Haribote操作系统项目.zip
- (源码)基于Spring Boot框架的秒杀系统.zip
- (源码)基于Qt框架的待办事项管理系统.zip