数据库左连接、右连接、全连接、交叉连接、自然连接

# 数据准备

create table t_group (
  group_id              number(4)      not null,
  group_name            varchar2(15)
);
create table t_person (
  person_id              number(4)     not null,
  person_name            varchar2(15),
  group_id               number(4)
);
insert into t_group(group_id, group_name) values(1, 'RESEARCH');
insert into t_group(group_id, group_name) values(2, 'SALES');
insert into t_person(person_id, person_name, group_id) values(1, 'zhangsan', 1);
insert into t_person(person_id, person_name, group_id) values(2, 'lisi', 1);
insert into t_person(person_id, person_name) values(3, 'wangwu');
commit;

# 交叉连接(cross join)
# 笛卡尔积(左表 x 右表)

select g.group_id, g.group_name, p.person_name 
from t_group g cross join t_person p;
等同于
select g.group_id, g.group_name, p.person_name 
from t_group g, t_person p;

# 自然连接(natural join)
# 自动对同名属性进行比较

select group_id, group_name, person_name 
from t_group g natural join t_person p;

# 左连接(left join == left outer join)
# 以左表为准,右表无数据时补空

select g.group_id, g.group_name, p.person_name 
from t_group g left join t_person p on g.group_id=p.group_id;

# 右连接(right join == right outer join)
# 以右表为准,左表无数据时补空

select g.group_id, g.group_name, p.person_name 
from t_group g right join t_person p on g.group_id=p.group_id;

# 全连接(full join == full outer join)
# 返回左右表的所有记录,任何一方无数据时补空

select g.group_id, g.group_name, p.person_name 
from t_group g full join t_person p on g.group_id=p.group_id;

# 内连接(join == inner join)
# 只返回相匹配的

select g.group_id, g.group_name, p.person_name 
from t_group g join t_person p on g.group_id=p.group_id;

# 等值连接(与内连接相同,只是 sql 格式不一样)

select g.group_id, g.group_name, p.person_name 
from t_group g, t_person p 
where g.group_id=p.group_id;

# 条件查询(泛指带 where 条件的查询)

select person_id, person_name, group_id from t_person where group_id is not null;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值