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

来源:互联网 发布:js关闭微信内置浏览器 编辑:程序博客网 时间:2024/05/22 03:20

# 数据准备

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;

  

原创粉丝点击