Oracle表关联

目录

--内连接

--外连接

-- 左外连接 LEFT JOIN

 -- 全外连接 

--自关联

--不等值关联

-- 关联总结:

-- *子查询


-- 表关联 
-- 连接查询/多表关联查询:使用多张表连接起来进行查询,拿到我们想要的结果
-- 分为: 内连接和 外连接

--内连接

查询结构只显示两表有关联字段的结果

--语法结构:
SELECT 
要查询的字段
FROM 表1 
INNER JOIN 表2
ON 关联的字段 -- 表1和表2有联系的字段,关联起来
AND 过滤条件


-- ORACLE 独有的 WHERE 进行内关联
-- 内关联
SELECT 
*
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND  D.LOC='DALLAS';
--外连接
-- 左外连接 LEFT JOIN

--左外连接是取得主表的所有信息,外加从表的数据,
--主表的数据就算不满足关联条件,也可以以筛选出来.
--从表不够用的话,就用 NULL 补全剩余的行数

语法结构:
SELECT 
要查询的字段
FROM 表1
LEFT JOIN 表2
ON 关联字段 
AND 过滤条件

SELECT 
*
FROM DEPT D --主表
LEFT JOIN EMP E --从表
ON E.DEPTNO=D.DEPTNO
 -- 全外连接 

取得两张表全部信息,对于连接表不匹配的行,设置每一列的值为null 。

SELECT 
E.*,
D.*
FROM EMP E
FULL JOIN DEPT D
ON E.DEPTNO=D.DEPTNO

-- ORACLE 独有的使用 WHERE 进行左关联
SELECT 
* FROM EMP E,DEPT D
WHERE E.DEPTNO(+)=D.DEPTNO -- (+)在哪里,哪个表就是从表 
--自关联

表可以根据表的自身字段进行关联

SELECT 
* 
FROM EMP E1
JOIN EMP E2
ON E1.DEPTNO=E2.DEPTNO
--不等值关联
SELECT * FROM SALGRADE;

-- 根据工资范围,进行关联薪资等级
SELECT 
*
FROM EMP E
JOIN SALGRADE S
ON E.SAL >= S.LOSAL
AND E.SAL <=S.HISAL
-- 关联总结:

连接查询分为:
1.内连接:取两张表的交集,没有主从表之分

2.外连接:
a.左外连接: 关键字 LEFT ,左边的表是主表,显示主表的所有信息,以及从表关联部分的信息,不足的用 NULL 显示
b.右外连接: 主表和上面相反
C.全外连接: 显示两张表的相同信息,不同的部分互相用 NULL 做补充.

-- *子查询
子查询是在查询内部嵌套另一个查询,子查询的结果可以作为外部查询的一部分来处理.

--写法1
SELECT * FROM (SELECT * FROM EMP); -- 将一个查询的结果集,作为数据源来查询

--写法2
WITH T1 AS 
(SELECT 
 * 
 FROM EMP)

SELECT * FROM T1;

你可能感兴趣的:(Oracle基础,sql,数据库)