12.10 简化 SQL 双重否定的一个示例
根据一个表中数据,查询与另一个表中能够匹配的记录,在 SQL 处理中通过双重否定可以减少运算量。
根据选课表、课程表和学生表,查询选修了所有课程的学生。
| Student |
|---|
| ID |
| Name |
| Class |
| … |
| SelectCourse |
|---|
| ID |
| CourseID |
| StudentID |
| … |
| Course |
|---|
| ID |
| Name |
| TeacherID |
| … |
脚本:
| A | |
|---|---|
| 1 | =connect(“db”) |
| 2 | =A1.query(“select * from Student”) |
| 3 | =A1.query(“select * from Course”) |
| 4 | =A1.query@x(“select * from SelectCourse”) |
| 5 | =A4.groups(StudentID; icount(CourseID):CourseCount) |
| 6 | =A5.select(CourseCount==A3.len()) |
| 7 | =A2.join@i(ID, A6:StudentID) |
A1 连接数据库
A2 查询学生表
A3 查询课程表
A4 查询选课表
A5 选课表按照学生 ID 分组汇总每个学生的选课数量
A6 选出选择了所有课程的学生 ID
A7 使用 A.join@i() 函数连接过滤
运行结果:
| ID | Name | Class |
|---|---|---|
| 4 | Emily Smith | Class 1 |
