mysql子查询以及多列过滤功能

1.含义

当一个查询时另一个查询的条件时,称为子查询

CREATE TABLE user1 (
  id int(4) not null auto_increment,
  name varchar(20) not null default '' comment '名称',
    primary key(id)
)engine=INNODB auto_increment=1 DEFAULT charset=utf8 comment '用户表';


CREATE TABLE user_kill (
  id int(4) not null auto_increment,
  userId int(4) not null default 0 comment '用户id',
  date date not null comment '日期',
  num int(4) not null default 0 comment '打怪数',
    primary key(id)
)engine=INNODB auto_increment=1 DEFAULT charset=utf8 comment '打怪表';

2.子查询的特点

语义明确

可以避免如join查询导致的数据重复问题

 

3.子查询示例

子查询示例:
SELECT a.* from user1 a where a.id in (SELECT userId from user_kill );

使用join查询示例:

SELECT a.* from user1 a join user_kill b on a.id=b.userId ;

 

4.子查询的多列过滤使用-mysql独有的

需求:取出每个用户打怪最多的记录数据

1.获取每个用户打怪最多的记录数据

SELECT c.userId , max(c.num) from user_kill c GROUP BY c.userId

2.获取每个用户的打怪记录

SELECT a.name,b.date,b.num from user1 a join user_kill b on a.id=b.userId

3.关联上述两个查询

SELECT a.name,b.date,b.num from user1 a join user_kill b on a.id=b.userId
where (b.userId,b.num) in (
 SELECT c.userId , max(c.num) from user_kill c GROUP BY c.userId
);

5.数据

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值