C9程序猿 2023-08-26 23:53 采纳率: 0%
浏览 3

Mysql中on与where关系

目前有三个表:student 学生信息表 ,course选课课程信息表,exame选课情况信息表。其中 stduent 和course 是exame子表。

我们先用外连接看一下标的基本信息,其中1-4都有选课。5号只插入了学生表的信息。

mysql> select s.*,e.* from student s left join exame e on s.uid = e.uid;
+-----+--------+-----+--------+------+------+------------+-------+
| uid | name   | age | sex    | uid  | cid  | time       | score |
+-----+--------+-----+--------+------+------+------------+-------+
|   1 | Alice  |  20 | female |    1 |    1 | 2023-08-25 |    85 |
|   1 | Alice  |  20 | female |    1 |    2 | 2023-08-26 |    92 |
|   2 | Bob    |  22 | male   |    2 |    1 | 2023-08-25 |    78 |
|   2 | Bob    |  22 | male   |    2 |    3 | 2023-08-27 |    88 |
|   3 | Claire |  21 | female |    3 |    2 | 2023-08-26 |    95 |
|   3 | Claire |  21 | female |    3 |    4 | 2023-08-28 |    90 |
|   4 | David  |  23 | male   |    4 |    1 | 2023-08-25 |    82 |
|   4 | David  |  23 | male   |    4 |    4 | 2023-08-28 |    91 |
|   5 | Eeboy  |  25 | male   | NULL | NULL | NULL       |  NULL |
+-----+--------+-----+--------+------+------+------------+-------+
9 rows in set (0.00 sec)

#我们对e.uid进行筛选一下。

mysql> select s.*,e.* from student s left join exame e on s.uid = e.uid and e.uid is NULL;
+-----+--------+-----+--------+------+------+------+-------+
| uid | name   | age | sex    | uid  | cid  | time | score |
+-----+--------+-----+--------+------+------+------+-------+
|   1 | Alice  |  20 | female | NULL | NULL | NULL |  NULL |
|   2 | Bob    |  22 | male   | NULL | NULL | NULL |  NULL |
|   3 | Claire |  21 | female | NULL | NULL | NULL |  NULL |
|   4 | David  |  23 | male   | NULL | NULL | NULL |  NULL |
|   5 | Eeboy  |  25 | male   | NULL | NULL | NULL |  NULL |
+-----+--------+-----+--------+------+------+------+-------+
5 rows in set (0.01 sec)

#引出了问题 为什么在exame信息成null了?
#换成where就好了。
mysql> select s.*,e.* from student s left join exame e on s.uid = e.uid where e.uid is NULL;
+-----+-------+-----+------+------+------+------+-------+
| uid | name  | age | sex  | uid  | cid  | time | score |
+-----+-------+-----+------+------+------+------+-------+
|   5 | Eeboy |  25 | male | NULL | NULL | NULL |  NULL |
+-----+-------+-----+------+------+------+------+-------+
1 row in set (0.00 sec)
  • 写回答

3条回答

  • FY_Hypo 2023-08-27 00:10
    关注

    区别在内连接时,会先把左边/右边的所有记录先记录下来,然后再根据on找到另一张表的所有记录,若不满足所有的on,那么直接赋值为NULL。而where是在两张表链接后进行筛选,若不匹配直接过滤掉。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月26日

悬赏问题

  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。
  • ¥15 MATLAB卫星二体模型仿真
  • ¥15 怎么让数码管亮的同时让led执行流水灯代码