ORACLE SQL 多变查询

本文介绍了在Oracle SQL中如何进行多表连接查询,包括等价连接、非等值连接、外连接(左外、右外)、交集、自然连接以及如何避免笛卡尔集。通过WHERE子句加入有效连接条件、使用ON和USING子句提高查询效率和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迪卡尔集
笛卡尔集会在下面条件下产生:
省略连接条件
连接条件无效
所有表中的所有行互相连接
为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。

使用连接多表连接查询
在 where字句写加入连接条件
在表中有相同列事,在表名之前加上表名前缀
等价连接

select e.department_id,d.department_id,l.city
from employees e,departments d,locations l
where e.department_id = d.department_id
      and l.location_id = d.location_id;

非等值连接:
两个表没有外键的连接事就用费等价连接来查询

    select e.last_name, e.salary, j.grade_level
    from   employees e, job_grades j
    where  e.salary 
    between j.lowest_sal and j.highest_sal;

外连接

  1. 使用外连接可以查询不满足连接条件的数据
  2. 外连接的符号是 (+)。
    右外连接
    左外连接(+)在右边
SELECT e.last_name, e.department_id, d.department_name,d.department_id
FROM   employees e, departments d
WHERE  e.department_id(+) = d.department_id ;

交集
使用CROSS JOIN 子句使连接的表产生叉集。
叉集和笛卡尔集是相同的。

SELECT last_name, department_name,employee_id
FROM   employees cross join departments --不能写on

自然连接
NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。
在表中查询满足等值条件的数据。

SELECT department_id, department_name,location_id, city
FROM   departments natural join locations

使用using

    SELECT e.employee_id, e.last_name, d.location_id
    FROM   employees e join departments d
    USING (department_id)

使用ON 子句创建连接(常用)
自然连接中是以具有相同名字的列为连接条件的。
可以使用 ON 子句指定额外的连接条件。
这个连接条件是与其它条件分开的。
ON 子句使语句具有更高的易读性。

select e.employee_id, e.last_name, e.department_id, 
       d.department_id, d.location_id
from   employees e join departments d
on     (e.department_id = d.department_id);

使用 ON 子句创建多表连接

select employee_id,city,department_name,l.location_id
from employees e join departments d
   on e.department_id = d.department_id
   join locations l
   on d.location_id = l.location_id

满外连接

--两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,
--这种连接称为满外连接
SELECT e.last_name, e.department_id, d.department_name
FROM   employees e
FULL OUTER JOIN departments d
ON   (e.department_id = d.department_id) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值