一、基础查询练习查询所有学生信息SELECT*FROMstudent;查询指定字段姓名、年龄并重命名列别名SELECTnameAS学生姓名,ageAS学生年龄FROMstudent;条件筛选年龄 24SELECTdevice_id,gender,age,universityFROMuser_profileWHEREage24;模糊查询学校名称含“北京”注意事项该查询区分大小写如需不区分大小写可改为 WHERE university LIKE ‘%北京%’ COLLATENOCASESELECTdevice_id,age,universityFROMuser_profileWHEREuniversityLIKE%北京%;空值判断排除年龄为空的记录SELECTdevice_id,gender,age,universityFROMuser_profileWHEREageISNOTNULL;二、聚合与分组练习统计各学校男生人数及平均GPA关键组成部分字段选择 university大学名称、 COUNT(*) AS male_num男性用户计数别名male_num、ROUND(AVG(gpa), 1) AS avg_gpa平均 GPA 保留一位小数别名avg_gpa。过滤条件 WHERE gender ‘male’ 限定仅处理男性用户数据。分组逻辑 GROUP BY university 按大学名称分组统计。SELECTuniversity,COUNT(*)ASmale_num,ROUND(AVG(gpa),1)ASavg_gpaFROMuser_profileWHEREgendermaleGROUPBYuniversity;分组后过滤平均发帖数 5 的学校查询逻辑分解选择字段 SELECT university, AVG(question_cnt) AS avg_question_cnt查询结果包含两列university大学名称和 avg_question_cntquestion_cnt 的平均值别名形式。数据来源 FROM user_profile 数据来源于名为 user_profile 的表。分组依据 GROUP BY university 按 university 字段分组计算每所大学的平均提问次数。分组后筛选 HAVING AVG(question_cnt) 5 筛选出平均提问次数小于 5 的大学。HAVING子句用于对分组后的结果进行条件过滤。注意事项HAVING 与 WHERE 的区别 WHERE 在分组前过滤数据而 HAVING在分组后过滤聚合结果。此查询需要基于聚合值AVG筛选因此必须使用 HAVING。聚合函数的使用 AVG(question_cnt) 计算每所大学用户的平均提问次数。其他常用聚合函数包括 SUM、COUNT、MAX、MIN等。别名的作用 AS avg_question_cnt 为聚合结果列赋予别名提高结果可读性但 HAVING子句中仍需使用原始聚合表达式AVG(question_cnt)。SELECTuniversity,AVG(question_cnt)ASavg_question_cntFROMuser_profileGROUPBYuniversityHAVINGAVG(question_cnt)5;多字段分组按性别学校统计活跃天数SELECTgender,university,AVG(active_days_within_30)ASavg_active_dayFROMuser_profileGROUPBYgender,university;三、连接与子查询练习内连接查询浙江大学用户的答题明细-- 方法1JOINSELECTa.device_id,a.question_id,a.resultFROMquestion_practice_detail aINNERJOINuser_profile bONa.device_idb.device_idWHEREb.university浙江大学;-- 方法2子查询SELECTdevice_id,question_id,resultFROMquestion_practice_detailWHEREdevice_idIN(SELECTdevice_idFROMuser_profileWHEREuniversity浙江大学);查询选修了“C001”和“C002”两门课的学生SELECTa.sno,a.snameFROMstudent aJOINsc bONa.snob.snoWHEREb.cnoIN(C001,C002)GROUPBYa.sno,a.snameHAVINGCOUNT(*)2;查询未选修任何课程的学生SELECTsnameFROMstudentWHEREsnoNOTIN(SELECTsnoFROMsc);四、排序与分页按成绩降序、年龄升序排序SQL 查询解析该 SQL 语句从 student 表中选取 name、age、score 三列数据并按 score 降序DESC和age 升序ASC双重排序。SELECTname,age,scoreFROMstudentORDERBYscoreDESC,ageASC;从第2条开始取3条记录分页SQL 查询解析结果限制LIMIT 1, 3 表示跳过第 1 条记录偏移量返回接下来的 3 条记录。注意偏移量从 0 开始计数LIMIT 1, 3 实际返回第 2、3、4 条记录。 某些数据库如 PostgreSQL使用 LIMIT 3OFFSET 1 语法实现相同功能。SELECTname,ageFROMstudentORDERBYageLIMIT1,3;