笛卡尔集
笛卡尔集会在下面条件下产生:

  • 省略连接条件

  • 连接条件无效

  • 所有表中的所有行互相连接

为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。


Oracle 连接
使用连接在多个表中查询数据。

SELECT    table1.column, table2.columnFROM    table1, table2WHERE    table1.column1 = table2.column2;
  • 在 WHERE 子句中写入连接条件。

  • 在表中有相同列时,在列名之前加上表名前缀

等值连接示例

SELECT    employees.employee_id,    employees.last_name,    employees.department_id,    departments.department_id,    departments.location_idFROM    employees,    departmentsWHERE    employees.department_id = departments.department_id;

  • 多个连接条件与 AND 操作符

区分重复的列名

  • 使用表名前缀在多个表中区分相同的列。

  • 在不同表中具有相同列名的列可以用表的别名加以区分。

表的别名

  • 使用别名可以简化查询。

  • 使用表名前缀可以提高执行效率。

SELECT    e.employee_id,    e.last_name,    e.department_id,    d.department_id,    d.location_idFROM    employees e,    departments dWHERE    e.department_id = d.department_id;

连接多个表

  • 连接 n个表,至少需要 n-1个连接条件。例如:连接三个表,至少需要两个连接条件。

非等值连接
EMPLOYEES表中的列工资应在JOB_GRADES表中的最高工资与最低工资之间
示例

SELECT    e.last_name,    e.salary,    j.grade_levelFROM    employees e,    job_grades jWHERE    e.salary BETWEEN j.lowest_sal AND j.highest_sal;

内连接和外连接

  • 内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行

  • 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL). 外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+).

  • 在SQL: 1999中,内连接只返回满足连接条件的数据

  • 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右) 外连接。

  • 两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满 外连接。

外连接语法

  • 使用外连接可以查询不满足连接条件的数据。

  • 外连接的符号是 (+)。

//右外连接SELECT    table1.column, table2.columnFROM    table1, table2WHERE    table1.column(+) = table2.column;//左外连接SELECT    table1.column, table2.columnFROM    table1, table2WHERE    table1.column = table2.column(+);

示例

SELECT    e.last_name,    e.department_id,    d.department_nameFROM    employees e,    departments dWHERE    e.department_id (+) = d.department_id;

自连接
示例

SELECT    worker.last_name    || ' works for '    || manager.last_nameFROM    employees worker,    employees managerWHERE    worker.manager_id = manager.employee_id;

1999 语法连接

SELECT    table1.column, table2.columnFROM    table1[CROSS JOIN table2] |[NATURAL JOIN table2] |[JOIN table2 USING (column_name)] |[JOIN table2  ON(table1.column_name = table2.column_name)] |[LEFT|RIGHT|FULL OUTER JOIN table2  ON (table1.column_name = table2.column_name)];

使用ON 子句创建连接

  • 自然连接中是以具有相同名字的列为连接条件的。

  • 可以使用 ON 子句指定额外的连接条件。

  • 这个连接条件是与其它条件分开的。

  • ON 子句使语句具有更高的易读性

示例

SELECT    e.employee_id,    e.last_name,    e.department_id,    d.department_id,    d.location_idFROM    employees e    JOIN departments d ON ( e.department_id = d.department_id );

使用 ON 子句创建多表连接
示例

SELECT    employee_id,    city,    department_nameFROM    employees e    JOIN departments d ON d.department_id = e.department_id    JOIN locations l ON d.location_id = l.location_id;

左外连接
示例

SELECT    e.last_name,    e.department_id,    d.department_nameFROM    employees e    LEFT OUTER JOIN departments d ON ( e.department_id = d.department_id );

右外连接
示例

SELECT    e.last_name,    e.department_id,    d.department_nameFROM    employees e    RIGHT OUTER JOIN departments d ON ( e.department_id = d.department_id );

满外连接

SELECT    e.last_name,    e.department_id,    d.department_nameFROM    employees e    FULL OUTER JOIN departments d ON ( e.department_id = d.department_id );

码上加油站

一起来加油

长按扫码关注

记得点个在看哦!

oracle 多表查询_【Oracle】多表查询相关推荐

  1. 分库分表之_分库分表 + 复杂查询

    前言 Github:https://github.com/HealerJean 博客:http://blog.healerjean.com 代码配置暂时和和分库分表之_分库分表相同.但是为了测试下面的 ...

  2. oracle锁表查询_专业解决 MySQL 查询速度慢与性能差

    Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...

  3. php mysql oracle数据库表结构图_创建数据库表

    数据库的作用:1.有结构的存储大量数据.2.有效保持数据的一致性.3.方便智能的分析,产生新的有用的信息.4.满足应用的共享和安全的要求. 关系型数据库的基本组成:一个数据库是由一组数据表(table ...

  4. mysql按照学生分组查询_将student表按照gender字段值进行分组查询,并计算每个分组中有多少名学生_学小易找答案...

    [简答题]查询student表中一共有多少条记录 [简答题]在department表和employee表之间分别使用where查询.自连接查询 [简答题]使用DESC查看学生表和班级表 [简答题]在表 ...

  5. case when 子查询_标准SQL——子查询、分组查询、多表联查

    点击上方蓝色字关注我们!❈ 一.查询子句: 1.排序子句:order by 列,列.. [asc|desc]  排序, select * from user order by account desc ...

  6. oracle之子查询_,Oracle子查询详解

    Oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询, 子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询. 使用子查询注意事项: 子查 ...

  7. jpi多表联查_数据库两表联查、多表联查,多重联查

    表连接查询 [小编用的是Oracle数据库,Oracle数据库区分表名与字段名的大小写,所以大家进行查询的时候记得注意双引号哟~] 有表 表名:AAA 字段: id name tag 表名:BBB 字 ...

  8. 增大mysql修改表空间_扩充数据库表空间

    ALTER TABLESPACE ADD DATAFILE , [REUSE] NEXT MAXSIZE <>中是你要填的内容,有|是选其一. 如:增加文件是d:\dbfs\mydatab ...

  9. mysql from多表顺序_数据库 from 表的顺序

    MY SQL语句常用集合 1个数据库通常包含一个或多个表.每个表由一个名字标识 1.SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数 ...

  10. mysql表前缀_关于数据库表前缀的认识

    mysql数据库表前缀,这个是我们区分其它表的一个方式,当我们同一个数据库中含有多个系统的的时候,表前缀就却分的唯一标识.我们使用php开源程序安装建站的时候,一般数据库表前缀都是默认设置好的,如:w ...

最新文章

  1. 第二章 序列比对——Needleman-Wunsch全局比对
  2. android第一天
  3. 1.13 总结-深度学习第五课《序列模型》-Stanford吴恩达教授
  4. Springboot mybatis逆向工程org.springframework.beans.factory.BeanCreationException: Error creating bean错误
  5. 多线程-Task、await/async
  6. MySQL Cookbook学习笔记第四章
  7. 移动网站开发——标记语言
  8. issubclass在python中的意思_python基础之类的isinstance与issubclass、反射
  9. 读博士也有技巧:如何快乐地做研究
  10. linux 命令 kps,Linux顶级命令.内存使用情况
  11. 收藏 |彻底搞懂感受野的含义与计算
  12. VC/MFC 键盘钩子,代码片断
  13. postgreSQL源码分析——索引的建立与使用——Hash索引(3)
  14. JAVA判断素数法+引用方法
  15. cad灯具图标_cad灯具图例下载
  16. docker安装gamit_gamit的安装步骤
  17. Poetry of Today3--琵琶行
  18. 广达做微软服务器,微软联手广达布局云计算 称策略是软件加服务
  19. Jzoj4745 看电影
  20. 常用数据结构和算法总结

热门文章

  1. (五)cobbler自定义系统安装
  2. should, could, would, will, be going to, may, might到底有甚麼不同,又該怎麼用?
  3. 常见音视频编码格式一览
  4. 机器学习面试题目整理
  5. c++ 读取写入txt
  6. 计算机开机无讯号,【图片】电脑突然开机没反应,显示器没信号!~【显卡吧】_百度贴吧...
  7. python百分号转义_python 转义字符、运算符、列表。。。。
  8. Win10: adb: error: remote could not create file(解决)
  9. Chrome查看Android的systrace抓取的log
  10. 一次新生代民工工友切磋经历