

一、表名和字段
–1. 学生表 student (s_id,s_name,s_birth,s_sex) –学生编号,学生姓名,出生年月,学生性别
–2. 课程表 course (c_id,c_name,t_id) –课程编号,课程名称,教师编号
–3. 教师表 teacher (t_id,t_name) –教师编号,教师姓名
–4. 成绩表 score (s_id,c_id,s_score) –学生编号,课程编号,分数
具体详情看 Python 之 MySql 每日一练 00
二、Mysql 题目
查询"01"课程比"02"课程成绩高的学生的信息及课程分数
三、Mysql 分析
● 题目要求
① 学生信息
② 学生对应的 "01" 和 "02" 课程分数
③ 条件:"01" 课程分数高于 "02" 课程分数
● 表分析

student 表

score 表
① s_id 是唯一的
② 同一 s_id 在 score 表中有多条记录
一个同学有多个课程的成绩,有些缺考同学在 score 表中会没有分数记录,比如 s_id = "06",缺考 "02" 课程
③ 由于 "01" 课程 和 "02" 课程的成绩不在同一行,在 Mysql 中不能直接进行比较
需要做连接处理
● sql 分析
① 先查出所有学生的课程 "01" 的分数及该学生信息


②再用左外联接查出这些学生课程 2 的分数,因为 s_id = "06",缺考 "02" 课程


第二个连接不能用内连接,因为内连接只显示双方条件都符合的,即两个课程都参加考试了的。从表数据可知有人可能缺考
③ 在 where 后加上 b.s_score > c.s_score

注意:
● on 后面的筛选条件主要是针对关联表的(对于主表的筛选条件不适用)
● 对于主表的筛选条件应该放在 where 后面,不应该放在 on 后面
四、Mysql 方案

五、扩展 -- 巧用 SQLyog 工具
在我们使用 select * from 表名时,可能因为表名复杂或者相似,容易写错,也比较费时间。
1、先进入图 1 界面

2、双击表名
