0%

数据库上机笔记

  • 查询字段值是Null的记录

    判断某个值是否为NULL时,应该用is NULL ,而不是is null

1
select * from tableA where xxx is null
  • 分组统计,数据为空时显示0

(有where条件时,被where条件过滤的数据不显示了)

利用表的关联查询

1
2
3
4
select k.catid,count(t.catid) from 
(select catid from Category) k left join
(select catid from Project left outer join Workson on Project.proid=Workson.proid where empid='10102')t
on k.catid=t.catid group by k.catid
从参考答案上学到另外一种方法:

将 where 换成left outer join… on …. and,用and代替where,在连接的时候过滤,该项会被设为空值,不会在一开始过滤掉需要的空值。另外要注意left outer join 的两张表的顺序

  • 查找选修了全部课程的学生学号

等价于找学生学号,对于这个学号,他所选的课程集合为B,不存在课程集合A,使得A不在B中—使用两个not exist 。但是我又想到,也可以去数这个学生选的课程数,这个课程数等于总的课程数。

1
2
3
4
5
6
7
select 学号 from student
where not exists
(select * from course
where not exists
(select * from takes
where takes.课号=course.课号
and takes.学号=student.学号))

SQL SELECT语句完整的执行顺序:

1、FROM子句组装来自不同数据源的数据; 2、WHERE子句基于指定的条件对记录进行筛选; 3、GROUP BY子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用HAVING子句筛选分组; 6、计算所有表达式; 7、使用ORDER BY对结果进行排序。