我发誓:每一道题目都不超过如下知识点。
如果超过了,就让凤姐和乔碧萝蹂躏我一百次。
SQL跟初中数学一样,记忆概念、用法是没卵用的。
能灵活应用才是王道。
====================================================================================================
任务:找出从不缺考的学生id,并按照学生id升序排序;注意,学生成绩为NULL,则表示改学生缺考了。
前面学了那么多GROUP BY,再给你一个新的知识点NULL,你能融会贯通吧?
不然当什么大学生呢,难怪高数不及格。
====================================================================================================
NULL 的基本概念
- 定义:
NULL
表示一个字段的值是未知或不存在的。它不是零、空字符串或其他任何默认值。 - 三值逻辑:SQL 使用三值逻辑来处理
NULL
:真(TRUE)、假(FALSE)和未知(UNKNOWN)。例如,NULL = NULL
返回UNKNOWN
而不是TRUE
或FALSE
。
处理 NULL 的方法
-
IS NULL 和 IS NOT NULL:
IS NULL
用于检查某个字段是否为NULL
。IS NOT NULL
用于检查某个字段是否不为NULL
。
-
COALESCE:
- 返回第一个非
NULL
的表达式。如果所有参数都是NULL
,则返回NULL
。
- 返回第一个非
-
IFNULL:
- MySQL 特定函数,用于替换
NULL
值。如果有NULL
,则返回第二个参数;否则返回第一个参数。
- MySQL 特定函数,用于替换
-
NULLIF:
- 如果两个表达式相等,则返回
NULL
,否则返回第一个表达式。
- 如果两个表达式相等,则返回
聚合函数与 NULL
-
COUNT:
COUNT(*)
计算所有行数,包括NULL
。COUNT(column_name)
仅计算非NULL
的行数。
-
SUM, AVG, MIN, MAX:
- 这些聚合函数通常会忽略
NULL
值。
- 这些聚合函数通常会忽略
students,学生表
student_id | name | class_code | grade_code | birth_date | residence | gender |
---|---|---|---|---|---|---|
100611 | 姜建华 | C219 | S3 | 2009-01-15 | 城镇 | m |
102890 | 韩辉 | C223 | S3 | 2009-10-26 | 农村 | m |
105684 | 李丽丽 | C219 | S3 | 2009-03-28 | 城镇 | m |
110591 | 李华 | C223 | S1 | 2008-05-31 | 农村 | m |
110611 | 王桂珍 | C218 | S3 | 2008-06-04 | 城镇 | m |
scores,成绩表
分数可能为Null
student_id | subject | score | exam_date |
---|---|---|---|
358575 | 生物 | 29 | 2024-06-30 |
735011 | 语文 | 37 | 2024-03-30 |
597305 | 历史 | 67 | 2024-03-30 |
921856 | 数学 | 76 | 2024-04-27 |
455713 | 化学 | 77 | 2024-06-30 |
teachers
,教师表
如第一行,赵娇娇教学C218、C219、C217三个班级的语文,是C217班的班主任
teacher_id | name | subject | class_code | head_teacher | degree | graduate_date(毕业日期) | enter_date(入校日期) | gender | qualification(职称) | fir_degr(第一学历) | mst_degr(研究生学历) |
---|---|---|---|---|---|---|---|---|---|---|---|
t001 | 赵娇娇 | 语文 | C218C219C217 | C217 | master | 2010-06-30 | 2010-07-30 | f | Senior | 北京大学 | 北京大学 |
t002 | 任伊乐 | 语文 | C220C221C222C223C224 | C220 | master | 2010-06-30 | 2010-07-30 | f | Senior | 北京大学 | 清华大学 |
t003 | 李敏 | 数学 | C218C219C217 | C218 | master | 1994-06-30 | 1994-07-30 | f | Senior | 北京大学 | 复旦大学 |
t004 | 吕敏 | 数学 | C220C221C222 | C221 | phd | 1995-06-30 | 1995-07-30 | f | Senior | 北京大学 | 清华大学 |
t005 | 陈佳蔬 | 数学 | C223C224 | C223 | master | 2010-06-30 | 2010-07-30 | f | null | 北京大学 | 北京大学 |
university,大学信息表
name | is_985 | times_rnk(泰晤士2024全球排名) |
---|---|---|
King's College London | 0 | 34 |
National University of Singapore,NUS | 0 | 24 |
Singapore Polytechnic | 0 | null |
上海交通大学 | 1 | 113 |
北京大学 | 1 | 16 |
 成为会员,解锁300道大厂数分SQL真题
MySQL 8.0