zoukankan      html  css  js  c++  java
  • oracle 多表查询

    1、等值连接:取关系列相同的记录
    select * from emp e,dept d where e.deptno=d.deptno;
    查出emp、dept表中deptno列相同的记录

    2、非等值连接:取关系列不相同的记录
    select * from emp e,dept d where e.deptno>d.deptno;
    查出emp表中deptno大于dept表中的记录
    3、外连接:左左外连接以左表为主,右外连接以右表为主
    右连接,以右表为主,右表所有记录多查询出来,左表只查出复合条件的记录
    select * from emp e,dept d where e.deptno(+)=d.deptno;
    select * from emp e right outer join dept d on e.deptno=d.deptno;

    左连接,以左表为主,左表所有记录多查询出来,右表只查出复合条件的记录
    select * from emp e,dept d where e.deptno=d.deptno(+);
    select * from emp e left outer join dept d on e.deptno=d.deptno;

    全连接 ,所有记录来自于两张表,用null值来匹配缺失值
    select * from emp e full join dept d on e.deptno=d.deptno;

    4、自连接:特殊等值连接,取同一张表不同角度看待的记录
    select e1.ename || ' 领导是' || e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;

    5、交叉连接产生一个笛卡尔积 cross join
    笛卡尔积:多表查询时,查询记录的行数等于所有表行数的乘积,列数等于所有表列数之和
    select * from emp ,dept;
    select * from emp cross join dept;

    6、自然连接 natural join (注)所有相同列等值连接
    natural join 子句是基于两个表中列名完全相同的列产生连接,查询连接列的值相等的记录,不保留重复的属性。
    natural join 子句中的列不能使用表别名做前缀。如:e.deptno='10' 或 d.deptno='10'

    查出两表中相同列值相同的记录
    select * from emp e natural join dept d;

    查出两表中指定列值相同的记录
    select * from emp e natural join dept d where deptno='10';

    7、using(X)创建连接
    using子句引用的列在sql任何地方都不能使用表名或别名做前缀

    查出两表中相同列值相同的记录
    select * from emp e join dept d using(deptno);

    查出两表中指定列值相同的记录
    select * from emp e join dept d using(deptno) where deptno='30';

    8、join on 创建连接 ,不同于自然连接,使用join on 可以指定连接列和设置任意的连接条件

    select * from emp e join dept d on e.deptno=d.deptno where e.deptno='10';

    join on 可以进行两张以上的表连接查询
    select * from emp e join dept d on e.deptno=d.deptno join salgrade s on e.sal between s.losal and s.hisal where e.deptno='10';

  • 相关阅读:
    Oracle对表解锁
    写txt文件在AIX5.3系统中乱码
    Spring Data JPA初使用
    简单流水号生成
    Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COER
    install Tcl8.5.10
    centOS下开机自启动apache、mysql、samba、svn等服务的最简单方法
    UNIX_SOCKET 进程间通信
    Linux(CentOS 5.5) Redis 安装及RedisPHP拓展安装应用
    python 返回 字典型结果集
  • 原文地址:https://www.cnblogs.com/dyfbk/p/7649581.html
Copyright © 2011-2022 走看看