join查询

6.3 Join Query

-- 初始化表
create table loc (id int primary key, name varchar2(20));
create table person (name varchar2(20), locid references loc);

-- 初始化数据
insert into gp values (1, '和平', '万岁');
insert into gp values (2, '自由', '很好');
insert into gp values (3, '民主', '爱国');
insert into gp values (4, '敬业', '友善');
insert into loc values (11, '广东');
insert into loc values (22, '山东');
insert into loc values (33, '湖南');
insert into loc values (44, '江西');
insert into person values ('王新炜', 33);
insert into person values ('吴英平', 33);
insert into person values ('杜志海', 44);
insert into person values ('范锐', 11);
commit;

select * from person;
select * from loc;

-- 查询就是一个逐步过滤的过程
-- 叉乘,内部杂交,虚拟表,16条数据
select * from person, loc;
-- 过滤掉不符合条件的数据。即完成一次外连接。
-- 即:增一表,加一条件。
select * from person, loc where person.locid = loc.id;
-- 其他条件,即在上面的基础上继续过滤
select * from person, loc where person.locid = loc.id and person.name like '王%';


-- 增加另一个表
create table gp (id int primary key, name varchar2(20), logo varchar2(10)); 
alter table person add  (gpid int references gp);
-- 修改每个人的 group
-- update ..

select * from gp;
select * from loc;
select * from person;

update loc set name='中华人民共和国湖南省' where id=33;
commit;

select * from person p, loc l, gp g;
-- 将不符合的排除掉
select * from person p, loc l, gp g
  where p.locid = l.id
    and p.gpid = g.id
    -- and   l.name = '江西'
    and g.name='和平'
    and p.name like '王%';

-- 
-- oracle 写法,非标准
select * from person p, loc l, gp g
  where p.locid = l.id and p.gpid = g.id;

-- ansi sql 写法,join 默认是 inner join
select * from person p
   join loc l on p.locid = l.id
   join gp g on p.gpid = g.id;


-- 增加一个没有地区的人
insert into person values ('黄秀', null, null);
commit;

-- 显示所有人,并将其地区信息查询出来。
-- 需要使用外连接,将即使不匹配的人也查询出来
-- oracle 写法
select * from person, loc
  where person.locid = loc.id(+);
-- 标准写法
select * from person p
  left outer join loc l on p.locid = l.id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值