前言

现实中有这么一种需求,有时候我们需要查询的数据是在多个表中的,那么如何从多个表中查询数据

呢?这就需要通过表的连接来实现查询了。

笛卡尔积

在定义连接之前我们需要简单的了解一下笛卡尔积,笔者不会纠结与其定义,只是看看其实际效果

其实笛卡尔积就是没有连接条件或者连接条件无效的连接,例如:

        select *from emp ,dept;--其结果倾向于一个巨大的记录数,无实际意义

上面可以看出笛卡尔积得出的是一个巨大的无意义的记录集合,我们可以通过在where子句中使用

有效的连接来避免这种情况,使之具有实际意义。

连接定义

就是在笛卡尔积的基础上使用连接条件,例如根据两个表的相同列进行连接。若果要进行n个表的

连接那么就的添加n-1个连接条件。例如:

       select *from emp ,dept where emp.deptno = dept.deptno;

连接类型

连接主要有两种类型等值连接、非等值连接.

还包括一些其他的连接方式:多连接、自连接、 定置运算符

等值连接

上面已经使用过了,即是表连接的where条件是一个表的列等于另一个表的列,通常情况下是主键和

外键的判等连接。

         select *from emp ,dept where emp.deptno = dept.deptno;

Tips:因为deptno在两个表中都存在,所以要使用表.字段的形式,否则oracle认为其歧义

等值连接中同样还可以添加约束条件

        select *from emp ,dept where emp.deptno = dept.deptno and emp.ename ='CLARK';          --结果只取一条记录  

同样可以定义标的别名,不过需要注意的是定义了别名之后,必须通过别名访问字段,不能通过

表明来访问了

        select *from emp e ,dept d where e.deptno = d.deptno and e.ename ='CLARK';

非等值连接

通过观察scott用户下的emp表和salgrade表,可以知道的是他们之间没有直接的对应项,而是

emp的sal列的值在salgrade表中的LOSAL和HISAL之间,他们不是等值连接。

            select * from emp e,salgrade s where e.sal between s.losal and s.hisal;

外连接

使用外连接,返回连接两边有一边为NULL的记录,外连接的运算符是(+)

外连接运算符可以在左边也可以在右边,但是不能同时在左边和右边,

有(+)的一边表示这边的值要么等于另一边,要么为NULL

例子:

         select *from emp e ,dept d where e.deptno(+) = d.deptno ;          --表明e.deptno可以为NULL 


               同理,右边的情况是一样的,这里就不演示了

右外连接

以连接右边的表为基准对齐,不足内容补位空值

           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);            select *from emp e,dept d where e.deptno = d.deptno(+);

可以看出哪边补位,(+)就在哪边!

全外连接

通俗的讲:左边,右边都可以出现NULL(但是不可能同时出现)

虽然(+)不能同时添加到两边,但是从9i之后可以使用下面的方式进行

           select *from emp e   full outer join dept d on(e.deptno =d.deptno);  

这种方式查出来的记录相较于前面的一般会多一些

自连接

有的时候需要对表进行自连接。实际上自连接只是等值连接的一种特例情况而已,通过

不同的别名区别成了不同的表而已。

例子:查询员工的关系,上一级关系

               select e.ename ||' works for  '|| NVL(m.ename,'himself') as                     relations  from emp e,emp m where e.mgr = m.empno(+) ; 

根据上面的学习同样可以写成下面的一种形式

              select e.ename ||' works for  '|| NVL(m.ename,'himself') as                    relations  from emp e left outer join emp m  on (e.mgr=m.empno) ;

看看其查询到的结果吧:

对于从多个表中查询数据,以及对于连接就到这儿了!Over!

转载于:https://blog.51cto.com/kiritor/1226736

Oracle数据库之SQL连接查询相关推荐

  1. Oracle数据库多表连接查询操作以及查询操作的补充

    文章目录 一.查询语句概述 1.查询语句基本语法格式 2.伪表和伪劣 二.单表查询 1.select子句 2.FROM子句 3.WHERE子句 4.DISTINCT关键字 5.GROUP BY子句与聚 ...

  2. oracle查询数据都是问号,Oracle数据库PL/SQL Developer查询结果显示问号乱码的解决方法...

    PL SQL Developer,查询结果中的中文变成了一堆问号,SQL语句中的中文被提示invalid character,不能识别. 解决方法: 执行,select userenv('langua ...

  3. Oracle数据库常用SQL语句查询

    查询第一条记录 where语句后面跟上  and rownum=1 2.日期所相差分钟数 ceil((LOGOUT_TIME - LOGIN_TIME) * 24 * 60) 3.group by分组 ...

  4. oracle数据库元数据SQL查询

    oracle数据库经典SQL查询 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size fro ...

  5. Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作

    Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...

  6. java访问oracle集群,JAVA查询Oracle数据库集群连接字符串

    下载必备最新排行装机分类.游戏手机驱动源码LinuxMac小游戏.商城招聘百科知道软件盒子论坛3G版 本站搜索 新闻资讯 软件下载 当前位置: 网站首页 > 编程开发 > 编程语言 > ...

  7. oracle 查询当年数据_查询ORACLE数据库TOP SQL使用情况

    使用BOOST和ORACLE::OCCI查询ORACLE数据库TOP SQL使用情况 /topsql.h#ifndef TOPSQL_H#define TOPSQL_H#include#include ...

  8. ArcGIS——数据库空间SQL(一、oracle中使用sql空间查询及st_astext等函数出错问题)

    一.引言 将shp文件导入oracle中就想着直接用sql进行普通查询和空间查询,这样直接通过webserver发布就可以不用arcgis server直接进行接口调用了,感觉这样比较接触底层些,所以 ...

  9. Oracle数据库之多表查询

    oracle安装参照: Oracle数据库之安装教程 Oracle数据库总结: Oracle数据库之基本查询 Oracle数据库之单行函数 Oracle数据库之多行函数 Oracle数据库之多表查询 ...

最新文章

  1. asp.net客户端脚本验证小技巧
  2. 用css网站布局之十步实录~
  3. 政府安全资讯精选 2017年第六期 车联网和移动安全可能成为未来监管重点
  4. 2012年初的10个绝对让你惊喜的jQuery插件
  5. php对象序列化总出错false
  6. 滑动窗口最大值—leetcode239
  7. 2016电大计算机网考,2016年电大-电大计算机网考题库[].doc
  8. 二维有限体积 matlab,二维有限体积法计算热传导及源码.pdf
  9. blob没权限 ie_vuerouter 源码和动态路由权限分配
  10. 机器学习(一)绪论、算法总结
  11. Myeclipse错误:Errors occurred during the build. 解决方法
  12. ERROR 1356 (HY000): View 'information_schema. SCHEMATA'
  13. 八,分隔符,其他符号和数据的讲解
  14. CORS跨域-Nginx使用方法(Access-Control-Allow-Origin错误提示)
  15. python字符串转负数_python 字符串 步进 负数
  16. Python-nan,NaN,NAN
  17. JAVA实现贪吃蛇游戏
  18. 雪鹰领主手游战力提升辅助攻略 雪鹰领主手游脚本工具介绍
  19. vue打开新的标签页
  20. 【期末复习笔记】知识产权法——著作权、专利法、商标权

热门文章

  1. 嵌入式Linux的Qt
  2. C++实现array left rotation数组左旋转(附完整源码)
  3. C++Eratosthenes埃氏筛法获取素数列表的实现算法(附完整源码)
  4. C语言十六进制数转八进制(十进制作为中介)(附完整源码)
  5. QT的QSpinBox类的使用
  6. C++后台开发需要什么?
  7. 1.18.2.10 解释表:Table.explain、物理执行计划等
  8. 18_clickhouse副本同步与高可用功能验证,分布式表与集群配置,数据副本与复制表,ZooKeeper整合,创建复制表,副本同步机制,数据原子写入与去重,负载平衡策略,案例(学习笔记)
  9. 什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)
  10. argsort()返回数据从小到大的“索引值”