Oracle连接总结

本文最后更新于:2 年前

@TOC

结构导图
在这里插入图片描述

一、建表SQL语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
create table TEST1
(
id VARCHAR2(8),
name VARCHAR2(64),
age NUMBER,
address VARCHAR2(256)
)

create table TEST2
(
id VARCHAR2(8),
name VARCHAR2(64),
age NUMBER,
address VARCHAR2(256)
)

create table TEST3
(
id VARCHAR2(8),
name VARCHAR2(64),
age NUMBER,
address VARCHAR2(256)
)

insert into test1 values('1001','xiaoxue',24,null);
insert into test1 values('1002','zhangsan',24,null);
insert into test1 values('1003','lisi',19,null);
insert into test1 values('1005','zhaoliu',25,null);

insert into test2 values('1001','xiaoxue',24,null);
insert into test2 values('1002','zhangsan',24,null);
insert into test2 values('1004','wangwu',18,null);
insert into test2 values('1006','sakura',24,null);

insert into test3 values('1001','xiaoxue',24,null);
insert into test3 values('1003','lisi',19,null);
insert into test3 values('1004','wangwu',18,null);
insert into test3 values('1007','yuma',28,null);

二、单表查询!

1.查询test1表

1
select * from test1;

在这里插入图片描述

2.查询test2表

1
select * from test2;

在这里插入图片描述

3.查询test3表

1
select * from test3;

在这里插入图片描述

三、两个表联合查询

1、SQL-92标准方式查询两个表
1)笛卡尔积
如果不加查询条件(where),就会产生笛卡尔积
笛卡尔积:全排列,将A表和B表中的数据一一对应一次,得到一个新的结果集表
特点:结果集表中有符合要求的数据也有垃圾数据

1
2
select t1.*, t2.*
from test1 t1, test2 t2

在这里插入图片描述
2)等值筛选:有筛选条件

1
2
3
select t1.*, t2.*
from test1 t1, test2 t2
where t1.id = t2.id;

在这里插入图片描述
3)非等值筛选
4)自查询
5)外连接查询

2.多表联合查询(重点)–99方式
1)交叉连接(Cross join)
换算两张表的笛卡尔积

1
2
3
select t1.*, t2.*
from test1 t1
cross join test2 t2;

在这里插入图片描述
2)自然连接(Natural join)
作用:底层自动的按照联合查询的表的所有相同字段名进行等值筛选
注意:
–按照所有的相同字段名进行筛选,联合查询的表中必须存储相同字段名
–进行的是等值筛选

1
2
3
select *
from test1 t1
natural join test2 t2;

在这里插入图片描述
3)内连接(Inner Join/Join)

  • using关键字

      语法:select * from 表名 别名 inner join 表名 别名 using(字段名,字段名....)
      作用:
           --使用指定的相同字段进行联合查询的等值筛选
        注意:
           --联合的表中必须存在using指定的字段
    
1
2
3
4
select *
from test1 t1
inner join test2 t2
using(id);

在这里插入图片描述

  • on关键字
1
2
3
4
select t1.*,t2.*
from test1 t1
inner join test2 t2
on t1.id = t2.id;

在这里插入图片描述

4)自查询

1
2
3
4
select t1.*,t2.*
from test1 t1
inner join test1 t2
on t1.id = t2.id;

在这里插入图片描述

5)外连接查询(outer join)

  • 左外连接(left outer join / left join)
1
2
3
4
5
6
7
8
9
10
select t1.*,t2.* from
test1 t1
left outer join test2 t2
on t1.id = t2.id;

等同于(下同):
select t1.*,t2.* from
test1 t1
left join test2 t2
on t1.id = t2.id;

在这里插入图片描述

  • 右外连接(right outer join / right join)
1
2
3
4
select t1.*,t2.* 
from test1 t1
right outer join test2 t2
on t1.id = t2.id;

在这里插入图片描述

  • 全外连接(full outer join / full join)
1
2
3
4
select t1.*,t2.*
from test1 t1
full outer join test2 t2
on t1.id = t2.id;

在这里插入图片描述

四、多表联合查询

1.三个表内连接查询
只查询出三个表共有的数据

1
2
3
4
5
6
select * 
from test1 t1
inner join test2 t2
on t1.id = t2.id
inner join test3 t3
on t1.id = t3.id;

在这里插入图片描述

2.三个表外连接查询

1
2
3
4
5
6
select * 
from test1 t1
full outer join test2 t2
on t1.id = t2.id
full outer join test3 t3
on t1.id = t3.id;

在这里插入图片描述


Oracle连接总结
https://chris-z-su.github.io/2022/11/08/数据库/Oracle连接总结/
作者
Chris
发布于
2022年11月8日
许可协议