Oracle 事实表,维表,多对多

-- 多对多的秘密:项目中,往往把关系分拆出一张单独表

--维表(学生维度)

create table t_stu(

   id number primary key,

   user_name varchar2(10)

);

insert into t_stu values(1,'小军');

insert into t_stu values(2,'小黄');

commit

select * from t_stu

drop table t_ke

--维表(课程维度)

create table t_ke(

   id number primary key,

   ke_name varchar2(100)

);

insert into t_ke values(1,'高等数学');

insert into t_ke values(2,'离散数学');

insert into t_ke values(3,'牛顿法');

insert into t_ke values(4,'大学英语');

insert into t_ke values(5,'马克思主义');

insert into t_ke values(6,'毛泽思想');

insert into t_ke values(7,'邓小平理论');

commit

select * from t_ke

-- 事实表

CREATE TABLE t_stu_ke(

  id NUMBER PRIMARY KEY,

  user_id NUMBER(5),

  ke_id NUMBER(5)

);

delete from t_stu_ke

insert into t_stu_ke values(1,1,1);

insert into t_stu_ke values(2,1,2);

insert into t_stu_ke values(3,1,6);

commit;

insert into t_stu_ke values(4,2,4);

insert into t_stu_ke values(5,2,6);

commit;

 

select sk.id,s.user_name,k.ke_name from t_stu_ke sk

left join t_stu s on sk.user_id =s.id

left join t_ke k on sk.ke_id=k.id

 

insert into t_stu_ke values(6,3,3);

insert into t_stu_ke values(7,2,8);

commit

 

select 

   sk.id,

   nvl(s.user_name,'未知学生:'||sk.user_id) 学生,

   nvl(k.ke_name,'未知课程:'||sk.ke_id) 选课

from t_stu_ke sk

   left join t_stu s on sk.user_id =s.id

   left join t_ke k on sk.ke_id=k.id

   

-- 站在不通的维度看世界   

   group by

转载于:https://www.cnblogs.com/sheying/p/8567841.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值