mysql数据库 连接查询

左连接:
select 列1,列2,列N from
tableA left  join tableB
on tableA.列 = tableB   【此次表连接成一张大表,完全当成普通表看】
where group ,having...照常写

例:select goods_id,goods.cat_id,cat_name,goods_name,shop_price from goods left join category on goods.cat_id = category.cat_id;

右连接:
select 列1,列2,列N from
tableA right join tableB
on tableA.列 = tableB   【此次表连接成一张大表,完全当成普通表看】
where group ,having...照常写


左右连接:
以左表为准,去右表找匹配数据,找不到匹配,用NULL补齐

如何记忆:
1:左右连接可以相互优化
2:可以把右连接转换为左连接来使用(并推荐使用左连接代替右连接,兼容性好一些)
A站在B的左边  ====> B站在A的右边
A left join B =====> B right join A

例:
select girl.*,boy.* from boy right join girl on girl.flower = boy.flower;

内连接:
select 列1,列2,列N from
tableA inner join tableB
on tableA.列 = tableB   【此次表连接成一张大表,完全当成普通表看】
where group ,having...照常写
内连接:查询左右表都有的数据,即:不要左/右中的NULL的那一部分
内连接是:左,右连接的交集

例:select boy.*,girl.* from boy inner join girl on boy.flower = girl.flower;



练习:
三表联查
例:
例一、
select goods_id,goods.cat_id,cat_name,brand.brand_id,brand_name,goods_name
from 
goods left join category on goods.cat_id = category.cat_id // 这里把他看成一个整体的表
left join brand on goods.brand_id = brand.brand_id;

查询结果如图:



例二、
create table m(
mid int primary key auto_increment,
hid int,
gid int,
mres varchar(10),
matime date
)charset utf8;


insert into m
(hid,gid,mres,matime) 
values
(1,2,'2:0','2006-05-21'),
(2,3,'1:2','2006-06-21'),
(3,1,'2:5','2006-06-25'),
(2,1,'3:2','2006-07-21');


create table t(
tid int,
tname varchar(10)
)charset utf8;


insert into t
values
(1,'国安'),
(2,'申花'),
(3,'传智连队');


select hid,t1.tname as hname,mres,gid,t2.tname as gname,matime
from
m left join t as t1
on m.hid = t1.tid
left join t as t2
on m.gid = t2.tid
where matime between '2006-06-01' and '2006-07-01';

查询结果如图:



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值