美文网首页
oracle使用(四)_关联查询

oracle使用(四)_关联查询

作者: 李moumou | 来源:发表于2021-11-04 23:27 被阅读0次

---关联查询
/**
等值连接:关联表中存在相同列

非等值连接:表中没有相同的列名,但是一个表中列,在另外表中存在某种关系,比如在范围内

外连接:左外连接(左边显示全部记录)和右外连接(右边显示全部记录)

自连接:自己关联自己查询
*/

select * from emp;

select * from dept;

-- 笛卡尔积
select * from emp,dept;

-- 关联查询
select * from emp,dept where emp.deptno = dept.deptno;

-- 查询雇员的名称和部门的名称
select ename,dname from emp,dept where emp.deptno = dept.deptno;

select * from salgrade;

--查询雇员名称和薪水等级
select e.ename,g.grade from emp e,salgrade g where e.sal between g.losal and g.hisal;

-- 需要将雇员表中的数据全部显示,利用等值连接,只能把关联到的数据显示出来,这就需要外连接

select * from emp e,dept d where e.deptno = d.deptno; --等值连接

select * from emp e,dept d where e.deptno = d.deptno(+); --左外连接(左数据要显示全,右表补空)

select * from emp e,dept d where e.deptno(+) = d.deptno; --右外连接(右数据要显示全,左表补空)

-- 自连接,把一张表自己关联自己

-- 将雇员和他的经理查出来 e表示雇员表,m也表示雇员表 匹配的e.mgr的经理是哪个雇员
select e.ename,m.ename from emp e,emp m where e.mgr = m.empno;

-- 不加任何连接条件 笛卡尔积
select * from emp e,dept d;

--以上是sql 92语法问题

-- 关联查询条件放到where子句中,而where语句还负责对结果集进行条件过滤,

-- 意味着将连接条件和过滤条件写在一起,可读性差,不符合单一职责

多余两个表的连接

sql 99 语法

cross join 等价 92语法笛卡尔积

select * from emp cross join dept;

select * from emp cross join dept;

-- natural join 相当于等值连接,但是不需要等值条件,会做动找相同列左连接
-- 如果两表中没有相同列,相当于笛卡尔积

-- 有相同的列,会自动做等值连接
select * from emp e natural join dept d;

-- 没有相同的列,相当于笛卡尔积
select * from emp e natural join salgrade;

--on 子句,添加连接条件

-- on子句等值连接,相连接当于92语法等值连接
select * from emp e join dept d on e.deptno = d.deptno;

--on 子句非等值连接,相当于92语法非等值连接
select * from emp e join salgrade sg on e.sal between sg.losal and sg.hisal;

-- left outer join ,其中outer可省略 99语法左外连接 会把左表记录显示全,右表无对应记录,显示空
select * from emp e left outer join dept d on e.deptno = d.deptno;

-- 92语法 左外连接
select * from emp e,dept d where e.deptno = d.deptno(+);

-- right outer join ,其中outer可省略 99语法右外连接
select * from emp e right outer join dept d on e.deptno = d.deptno;

-- 92语法 右外连接
select * from emp e,dept d where e.deptno = d.deptno;

-- full outer join 99语法独有相当于同时满足左外连接和右外连接
select * from emp e full outer join dept d on e.deptno = d.deptno;

-- inner join 就是表连接
select * from emp e inner join dept d on e.deptno = d.deptno;
-- 省略inner
select * from emp e join dept d on e.deptno = d.deptno;

--using,除了使用on作为连接条件,也可使用using作为连接条件
--此时查出的deptno不属于任何一张表
select * from emp e join dept d using(deptno);

-- 发现会出现两列deptno,分别属于两张表
select * from emp e join dept d on e.deptno = d.deptno;

99语法和92语法,实际开发中都可使用,建议使用99语法,可读性更强

-- 检索雇员名字、所在单位、薪水等级
select e.ename,d.loc,sg.grade from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;

相关文章

  • oracle使用(四)_关联查询

    ---关联查询/**等值连接:关联表中存在相同列 非等值连接:表中没有相同的列名,但是一个表中列,在另外表中存在某...

  • ORACLE性能优化之SQL语句优化

    #1 使用EXISTS代替IN Oracle通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到...

  • 关联查询、子查询与分页查询

    关联查询 关联关系分为一对一,一对多,多对多关系关联查询就是从多张表中查询数据,当我们使用n张表使用关联查询,至少...

  • oracle基本操作

    oracle基础部分:基本使用;用户管理;表管理 oracle高级部分:oracle表的查询;oracle的权限、...

  • MySQL的多表关联查询

    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是...

  • 关联关系查询(第一讲)

    关联查询 当查询内容涉及到具有关联关系的多个表时,就需要使用关联查询。根据表与表之间的关联关系的不同,关联查询分为...

  • oracle语句

    with…as… 不同于MySQL,Oracle不能直接使用as来为子查询获得的表命名,在Oracle中要为子查询...

  • Oracle和mySQL关联表查询的区别

    在oracle里我们查询表T1和表t2,比如按照SFZH号码关联,取并集。可以使用下面的语句。 select a....

  • MySql语句转Oracle的坑啊

    1.模糊查询 Mysql Oracle Oracle里面也有concat函数,如果要使用CONCAT函数的话,我们...

  • MySQL 子查询

    什么是子查询 为什么要使用子查询 子查询的分类 怎样使用子查询 关联子查询 要使用的数据表 1. 什么是子查询? ...

网友评论

      本文标题:oracle使用(四)_关联查询

      本文链接:https://www.haomeiwen.com/subject/gvslzltx.html