多表【左右内混合】连接查询

不多说,直接上语句,看效果:
CREATE TABLE person (
id int4,
name varchar(12)
);
INSERT INTO person (id, name) VALUES(1, 'zhang san1');
INSERT INTO person (id, name) VALUES(3, 'zhang san3');
INSERT INTO person (id, name) VALUES(4, 'zhang san4');
INSERT INTO person (id, name) VALUES(2, 'zhang san2');
INSERT INTO person (id, name) VALUES(9, 'zhang san9');


CREATE TABLE person_aihao (
id int4,
aihao varchar(12)
);
INSERT INTO person_aihao (id, aihao) VALUES(3, 'aihao3');
INSERT INTO person_aihao (id, aihao) VALUES(5, 'aihao5');
INSERT INTO person_aihao (id, aihao) VALUES(2, 'aihao2');
INSERT INTO person_aihao (id, aihao) VALUES(4, 'aihao4');
INSERT INTO person_aihao (id, aihao) VALUES(1, 'aihao1');


CREATE TABLE person_banji (
banji varchar(12),
banji_name varchar(12)
);
INSERT INTO person_banji (banji, banji_name) VALUES('8', '88');
INSERT INTO person_banji (banji, banji_name) VALUES('2', '22');
INSERT INTO person_banji (banji, banji_name) VALUES('1', '11');


CREATE TABLE person_properties (
name varchar(12),
age varchar(12),
banji varchar(12) 
);
INSERT INTO person_properties (name, age, banji) VALUES('zhang san3', '3', '3');
INSERT INTO person_properties (name, age, banji) VALUES('zhang san2', '2', '2');
INSERT INTO person_properties (name, age, banji) VALUES('zhang san6', '6', '6');
INSERT INTO person_properties (name, age, banji) VALUES('zhang san1', '1', '1');


select t.* from person t; --id name
select t.* from person_aihao t;--id aihao
select t.* from person_banji t;-- banji  banji_name
select t.* from person_properties t;--name age banji


select t.*,  t1.* from person_aihao t left join person t1 on t.id =  t1.id ;
select t1.*, t2.* from person t1 left join person_properties t2 on t2.name = t1.name;
select t.*,  t1.*, t2.*  from person_aihao t left join person t1 on t.id =  t1.id left join person_properties t2 on t2.name = t1.name;
select t.*,  t1.*, t2.* , t3.* from person_aihao t left join person t1 on t.id =  t1.id left join person_properties t2 on t2.name = t1.name left join person_banji t3 on t3.banji = t2.banji ;
select t.*,  t1.*, t2.* , t3.* from person_aihao t left join person t1 on t.id =  t1.id left join person_properties t2 on t2.name = t1.name inner join person_banji t3 on t3.banji = t2.banji ;
select t.*,  t1.*, t2.* , t3.* from person_aihao t left join person t1 on t.id =  t1.id left join person_properties t2 on t2.name = t1.name right join person_banji t3 on t3.banji = t2.banji ;



在进行左右混合连接的时候,一个一个进行连接,后一个连接都是在前面一大坨的基础上进行连接,类似于java中的编译一样,如果在left/right/inner join时,后面的table在之前没有出现过,那么就错了!!![如下,t2表在没有声明出来时,就已经开始使用,语法存在问题]
select t.*,  t1.*, t2.* , t3.* from person_aihao t left join person t1 on t.id =  t1.id right join person_banji t3 on t3.banji = t2.banji  left join person_properties t2 on t2.name = t1.name;
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值