sql多表查询

普通多表查询

//查询两张表的所有数据
select * from 表名1,表名2 where 表名1.字段名 = 表名2.字段名;
//查询指定字段的数据
select 表名1.字段名,表名2.字段名  from 表名1,表名2 where 表名1.字段名 = 表名2.字段名;

嵌套多表查询

select * from 表名 where 字段名 in(select 字段或者函数 from 表名);
//例如
select name from user where id in(select max(id) from user);

链接多表查询

  • 左链接(会将左表的内容全部输出,没有需要补NULL)
select * from 表名1 left join 表名2 on 表名1.字段名 = 表名2.字段名;
select * from 表名1 as a left join 表名2  as b on a.字段名 = a.字段名;
//例如
select class.name if(count(user.id),count(user.id),'无') from class left join user on class.id=user.class_id group by class.id;
  • 右链接(会将右表的内容全部输出,没有需要补NULL)
select * from 表名1 right join 表名2 on 表名1.字段名 = 表名2.字段名;
select * from 表名1 as a right join 表名2  as b on a.字段名 = a.字段名;
//例如
select class.name if(count(user.id),count(user.id),'无') from user left join class on class.id=user.class_id group by class.id;
  • 内链接(完全等价于普通多表查询,必须符合条件的多个表的数据才会显示)
select class.name count(user.id) from class left join user on class.id=user.class_id group by class.id;

having的使用方法

//使用class_id为分组聚合条件之后,使用having再class_id作为条件筛选一次
select class_id from user group by class_id having class_id<2;

问题:将所有班的总人数统计出来,前提是有些班没有人

select class.name if(count(user.id),count(user.id),'无') from class inner join user on class.id=user.class_id group by class.id;

问题:用户表,里面有很多用户,有一列是成绩,请统计这张表中及格人数和不及格人数

select sum(if(score>=60,1,0)) jige ,sum(if(score<60,1,0)) bujige from user;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。只有真正了解它们之间...
    小喜_ww阅读 5,080评论 0 7
  • 多表查询分为 内、外连接 外连接分为左连接(left join 或left outer join)、右连接(rig...
    阿甘呀阅读 4,334评论 0 0
  • 之前做过一个关于数据库的使用总结,里面写过一些关于数据库的常用方法的集合,但是我们在实例工作中,很可能涉及到一需要...
    JokerHerry阅读 9,448评论 0 2
  • 当我确定你永远不可能只属于我 我不会选择牵手 宁愿拥有永恒的友谊 也不愿贪恋一时的温情
    明月千思阅读 921评论 0 2
  • 今天是比较失落的一天,一早把我最重要的最心爱的手机丢了,觉得自己很没用,这么重要的东西会让它离开我,没有手机半天时...
    FAB艳儿阅读 1,103评论 0 0

友情链接更多精彩内容