力扣sql练习题-学生们参加各科测试的次数

124 阅读2分钟

题目:学生们参加各科测试的次数

测试样例

  • 结果需要对学生student_id和姓名namestudent_name进行排序 学生考试次数.png

关于笛卡尔积的解释

解题步骤

  1. 通过笛卡尔积(CROSS JOIN)连接学生表Students、科目表Subjects (表1)
select *  from Students  a cross join Subjects b
  1. 将表1 与 考试表 Examinations 进行左连接
(select *  from Students  a cross join Subjects b) left join Examinations  e on a.student_id=e.student_id and b.subject_name =e.subject_name 
  1. 按照条件查询结果
select a.student_id,a.student_name,b.subject_name,count(e.subject_name) attended_exams from (Students  a cross join Subjects b) left join Examinations  e on a.student_id=e.student_id and b.subject_name =e.subject_name group by a.student_id , b.subject_name order by a.student_id , b.subject_name

笛卡尔积

笛卡尔积的解释

一:笛卡尔积的解释 例 给出二个域: 假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为

(a,0)(a,1)(a,2)
(b,0)(b,1)(b,2)

类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。   例 给出三个域:   D1=SUPERVISOR ={ 张清玫,刘逸 }   D2=SPECIALITY={计算机专业,信息专业}   D3=POSTGRADUATE={李勇,刘晨,王敏}   则D1,D2,D3的笛卡尔积为D:   D=D1×D2×D3 =

(张清玫,计算机专业,李勇)(张清玫,计算机专业,刘晨)(张清玫,计算机专业,王敏)
(张清玫,信息专业,李勇)(张清玫,信息专业,刘晨)(张清玫,信息专业,王敏)
(刘逸,计算机专业,李勇)(刘逸,计算机专业,刘晨)(刘逸,计算机专业,王敏)
(刘逸,信息专业,李勇)(刘逸,信息专业,刘晨)(刘逸,信息专业,王敏)

笛卡尔积在sql中的原理

  1. MySQL的多表查询(笛卡尔积原理)
  2. 先确定数据要用到哪些表。
  3. 将多个表先通过笛卡尔积变成一个表。
  4. 然后去除不符合逻辑的数据(根据两个表的关系去掉)。
  5. 最后当做是一个虚拟表一样来加上条件即可。