mysql数据库多表联合查询

最近几天也是苦于多张表联合查询的问题,因为涉及的表比较多,表之间的主键外键的关联关系也容易搞错,所以今天总计一下这几天遇到的问题和解决方法。

我用到的有内连接查询和左外连接查询,在这里我是用的项目里正在用的数据库,会尽可能简单明了。

话不多说上代码。

1、普通单表查询:

sql语法:select 列名1,列名2... from   表   where条件语句;

​
select tour_id,tour_groupno from tour_group where tour_start between '2019-09-26'  and '2019-09-26' 
​

2、两个表联合查询(inner join):

sqly语法:SELECT 列名1,列名2… FROM 表1 INNER JOIN 表2 ON 表1.外键=表2.主键 Where 条件语句;

select p.tour_id,p.tour_groupno,l.tour_gid,l.tour_ysmoney from tour_group p inner join tour_groupcompanybill l on p.tour_id=l.tour_gid where tour_start between '2019-09-26'  and '2019-09-26' 

 

3、三张表联合查询(inner join):

其实你会发现两张表和多张表联合查询区别并不大,3张表已上的查询也适用于此方法。

我先给大家看内连接inner join的效果:

select p.tour_id,p.tour_groupno,l.tour_gid,l.tour_ysmoney,h.tour_date 
from tour_group p 
inner join tour_groupcompanybill l on p.tour_id=l.tour_gid 
inner join tour_groupsearch h on h.tour_id=p.tour_id
where tour_start between '2019-09-26'  and '2019-09-26' 

4、三个表联合查询(left join):

注意:左连接是以左表为标准,主要查询在左边表中存在的数据,不符合条件的会以 null 进行填充。

所以,大家进行多表联合查询的时候一定要分清哪个是主表。

select p.tour_id,p.tour_groupno,l.tour_gid,l.tour_ysmoney,h.tour_date 
from tour_group p 
left join tour_groupcompanybill l on p.tour_id=l.tour_gid 
left join tour_groupsearch h on h.tour_id=p.tour_id
where tour_start between '2019-09-26'  and '2019-09-26' 

神奇的事情来了,大家看下inner join内连接和left join左外连接查询的区别:

大家注意下,在实际查询中到底以哪张表为主连接表是关系到查询结果的,仔细一点是没有什么问题的。

大家在查询表的时候,可能遇到数据库表里显示的是数字,而项目要求显示出来是汉字或者其他代表性的标识之类的情况,

在这分享下我的做法。


select 
p.tour_id,p.tour_groupno,l.tour_gid,l.tour_ysmoney,h.tour_date,
(CASE h.tour_type WHEN 0 THEN '云南' WHEN 1 THEN '泰国' WHEN 2 THEN '贵州' ELSE 'null' END) as tour_type 
from
tour_group p 
inner join tour_groupcompanybill l on p.tour_id=l.tour_gid 
inner join tour_groupsearch h on h.tour_id=p.tour_id
where tour_start between '2019-09-26'  and '2019-09-26' 

大家可以看到,表里tour_type字段是用0,1,2...来表示的,而老板要求显示成文字,所以我采用了这种方法来处理。

当然还有其他方法来处理这种情况,比如枚举类,在这里不作过多解释,有空再分享出来。

今天的分享希望能帮到各位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值