多表查询(续)

-- 多表查询连接
create table t1(key1 char, v1 int);
create table t2(key2 char, v2 int);

insert into t1 values('a',1), ('a',2),('b',3), ('c',4), ('a', 13);
insert into t2 values('b',10), ('b',11),('a',12),('a',13),('e',14);

select * from t1;
select * from t2;

-- 内连接
select * from t1 inner join t2 on t1.key1 = t2.key2;
-- 左连接
select * from t1 left join t2 on t1.key1 = t2.key2;
-- 右连接
select * from t1 right join t2 on t1.key1 = t2.key2;
select * from t2 left join t1 on t1.key1 = t2.key2;

-- 合并查询(去重)
select * from t1 union select * from t2;

-- 合并查询(不去重)
select * from t1 
union all
select * from t2;









create database cda;
use cda;

create table a_user(
userid varchar(10),
tel varchar(10)
);

create table b_order(
userid varchar(10),
end_time datetime
);

insert into a_user values('A1','123456789'),
						 ('A2','134577432'),
                         ('A3','677389494'),
                         ('A5','832526477'),
                         ('A6','432728448');
                         
insert into b_order values('A1','2019-5-1 12:00'),
						  ('A2','2019-3-2 13:00'),
                          ('A2','2019-5-3 10:00'),
                          ('A3','2019-5-2 11:00'),
                          ('A4','2019-5-1 17:00'),
                          ('A5','2019-5-9 14:00'),
                          ('A1','2019-5-6 15:00'),
                          ('A5','2019-5-8 16:00'),
                          ('A2','2019-5-4 13:00'),
                          ('A4','2019-5-5 18:00'),
                          ('A3','2019-5-7 13:00');
                          
select * from a_user;
select * from b_order;
-- 出现在表a却不在表b的userid
select * from a_user left join b_order on a_user.userid=b_order.userid
where b_order.userid is null;

select userid from a_user where userid not in (select userid from b_order);
-- 每个userid的最新结束时间

select 
userid, max(end_time)
from 
(select * from b_order
order by userid asc, end_time desc) as t
group by userid;

select userid, max(end_time) from b_order 
group by userid;
-- 用户结束时间在3月份的userid及tel
select b_order.userid, tel
from b_order left join a_user on a_user.userid = b_order.userid
where month(end_time) = 3;

select t.userid, tel from
(select * from b_order where month(end_time)=3) t
left join a_user on t.userid = a_user.userid;

 主要查询谁,把谁当做主表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值