zoukankan      html  css  js  c++  java
  • mysql 的左链接,右链接,内链接

    mysql进行连表查询的时候。可以用where 和jion on的两种连接方式。连表查询的关键在于消除笛卡儿积。在对两张进行连接的时候,有的时候数据数量并不能完全对应。如果在连接的时候没用使用left或者right等连接字时,我们默认选择的是内连接(where连接的时候也是内链接)。何为内链接,我们可以举个例子,比如现在我们手中有A,B两张表,两张表是有关联的,

    第一张为表A sys_class ,存储班级代码classid和班级的名称。第二张为表B sys_mid,存储关联代码selid,学生的代码stuid,班级代码classid,和成绩score,表二的外键classid就是表一的id。

    在我们进行连表查询的时候,通常的写法就是将sys_class的id与sys_mid的classid相连。sys_class a join sys_ mid b on a.id = b.classid。这样我们就可以消除笛卡儿积了。但是这样会产生一个问题,当我们这样进行连表查询。查询没门课的平均成绩的时候,并不能得到四条返回值,而是只有三条

    selcet a.name,avg(score) from sys_calss a join on sys_mid b on a.id = b.classid group by a.name;

    原因就在于这种方式是内链接,即把两张表的相同的集合进行连接,也就是a.id与b.classid共有的1,2,3进行连接,而不是1,2,3,4。

    那么我们怎么才能得到4那,在具体的这一条语句就算在 join前面加一个 left 意思是向左边的表链接,即左边的表的数据全部获取,如果后面的表没有对应的数值则使用空值进行补足。

    selcet a.name,avg(score) from sys_calss a left join on sys_mid b on a.id = b.classid group by a.name;

    如果a,b两张表的位置进行颠倒,则使用右链接

    selcet a.name,avg(score) from sys_calss a right join on sys_mid b on a.id = b.classid group by a.name;
  • 相关阅读:
    Docker Warning : the backing xfs filesystem is formatted without d_type support
    docker 版本变化及说明
    CORS 跨域请求
    nginx 用户登录认证
    PipelineDB On Kafka
    Postgres 主从配置(五)
    exec() has been disabled for security reasons
    invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"
    未连接到互联网
    github管理代码
  • 原文地址:https://www.cnblogs.com/Shirou20000/p/7852464.html
Copyright © 2011-2022 走看看