oracle数据库关联查询
数据库范式(3种)
关联查询:
1外链接:
(1)左外链接
(2)右外连接
(3)全连接
2内连接:
create table T_class(
classid integer primary key,
className varchar2(255),
studentcount integer
)
insert INTO T_class
values
(5,'班级5',56)
CREATE table T_student(
stuid integer primary key,
stuName varchar2(255),
stuScore float,
classid integer
)
INSERT INTO t_student(stuid,stuName,stuScore)
values
(5,'小明',88)
--插入后,班级5没有人,小明没有班级:下面我们开始查询
--当我们在查询学生信息时,如果也想查询到他的所在班级信息,我们就需要将这两个表关联起来,就是我们的:关联查询
select * FROM T_class
select * FROM t_student
--外连接(左外连接,右外连接,全连接)
--左外连接:通过left 和join关键字,left表示关键字的左边是主表,右边是附表,无论两边的id是不是对应,
--主表信息都展示出来,附表只展示ID能对应起来的数据,其他不能对应起来的数据都展示为null
select * FROM t_student t1 LEFT JOIN t_class c1 on t1.classid=c1.classid
--左外连接另一种写法:
select * FROM t_student t1, t_class c1 WHERE t1.classid= c1.classid(+)
--右外连接:通过right 和join关键字,right表示关键字右边是主表,左边是附表,
select * FROM t_student t1 RIGHT join t_class c1 ON t1.classid=c1.classid
--右外连接另一种写法:
select * FROM t_student t1,t_class c1 where t1.classid(+)=c1.classid
--全连接:通过full和join关键字连接,相当于两个表都是主表,所有信息都展示,全连接没有简写方式
select * FROM t_student t1 full join t_class c1 on t1.classid=c1.classid
--上面的方式classid都显示了两次,下面的方法可以自定义显示内容
select t1.*,c1.className,c1.studentcount FROM t_student t1 full join t_class c1 on t1.classid=c1.classid
--内连接:只查询两个表通过id能对应起来的数据(相当于两个都是附表)
select * FROM t_student t1 inner join t_class c1 on t1.classid=c1.classid
--内连接简写:
select * FROM t_student t1, t_class c1 WHERE t1.classid= c1.classid