oracle函数 的 Oracle Inner Join(多表连接)

在本教程中,您将学习Oracle INNER JOIN子句以从表中检索具有其他表的匹配行的行。

Oracle INNER JOIN语法简介

在关系数据库中,数据分布在许多相关的表中。例如,在样本数据库中,销售订单数据主要存储在orders和order_items表中。参考以下ER图结构 -

orders表存储订单的标题信息,order_items表存储订单购买货物的明细。

订单(orders)表通过order_id列链接到order_items表。这意味着对于orders表中的每一行,我们都可以在order_items表中,通过order_id列中找到具有相同值的一个或多个行数据。

要从两个或多个相关表中查询数据,请使用INNER JOIN子句。 以下语句说明如何连接两个表T1和T2。

SELECT

*

FROM

T1

INNER JOIN T2 ON join_predicate;

下面让我们仔细地来看看上面的语句:

首先,在这种情况下,在FROM子句之后的T1是指定的主表。

其次,在INNER JOIN子句中指定条件join_predicate。上面语句中的连接表是T2。

第三,连接谓词指定了连接表的条件。只有满足连接谓词的行记录才会包含在结果集中。

查询通过基于连接谓词组合表T1和T2的列值来返回结果集。它将表T1的每一行与表T2的行进行比较,以查找满足连接谓词的所有行记录。只要通过匹配非NULL值来满足连接谓词,则T1和T2表的每对匹配行的列值就会被合并到结果集中的一行中。

1. Oracle INNER JOIN示例

以下查询使用INNER JOIN子句从orders表和order_items表中检索数据:

SELECT

*

FROM

orders

INNER JOIN order_items ON

order_items.order_id = orders.order_id

ORDER BY

order_date DESC;

在这个例子中,连接谓词(条件)是 -

order_items.order_id = orders.order_id

查询将orders表中的每一行与order_items表中的行进行比较。当两个表中的行在order_id列中具有相同的值时,查询将两个表的行中的列值合并到结果行中,并将其包含在结果集中。

所以,执行上面查询语句,得到以下结果 -

2. 使用USING子句的Oracle INNER JOIN示例

除ON子句外,还可以使用USING子句指定在连接表时要测试哪些列的相等性。

下面用USING子句说明INNER JOIN的语法。

SELECT

*

FROM

T1

INNER JOIN T2 ON( c1, c2, ... );

请注意,USING子句中列出的列(如c1和c2)必须在T1和T2表中都存在(可用)。

以下示例使用INNER JOIN和USING子句从orders表和order_items表中检索数据:

SELECT

*

FROM

orders

INNER JOIN order_items USING( order_id )

ORDER BY

order_date DESC;

执行上面示例代码,得到以下结果 -

3. INNER JOIN多表连接示例

内部联接子句可以联接两个以上的表。 在实践中,应该限制连接表的数量来提高性能。 以下语句显示如何连接三个表:

以下语句显示如何连接三个表:orders,order_items和customers, 为了保证查询语句的效率,超过三个表连接慎用。

SELECT

name,

order_id,

order_date,

item_id,

product_id,

quantity,

unit_price

FROM

orders

INNER JOIN order_items

USING(order_id)

INNER JOIN customers

USING(customer_id)

ORDER BY

order_date DESC,

order_id DESC,

item_id ASC;

执行上面查询语句,得到以下结果 -

以下示例说明如何连接四个表:orders,order_items,customers和products。参考以下查询语句 -

SELECT

name AS customer_name,

order_id,

order_date,

item_id,

product_name,

quantity,

unit_price

FROM

orders

INNER JOIN order_items

USING(order_id)

INNER JOIN customers

USING(customer_id)

INNER JOIN products

USING(product_id)

ORDER BY

order_date DESC,

order_id DESC,

item_id ASC;

执行上面示例查询语句,得到以下结果 -

在本教程中,您已学习如何使用Oracle内部联接从表中检索具有其他表的匹配行的数据记录。

oracle中inner函数,Oracle Inner Join(多表连接)相关推荐

  1. oracle中各种函数,oracle中常用函数大全

    1.数值型常用函数 函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 s ...

  2. oracle中lead函数,oracle lead()函数 | 学步园

    ead()是一个分析函数,适用于oracle 8i以后的版本, 使用这个函数,你可以一次性从表中查询多条记录, 而不需要进行表的自连接. 返回值:返回与当前行偏离offset行的列值. 语法: lea ...

  3. oracle中转换函数,Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

  4. oracle中嵌套函数,Oracle的嵌套函数语法

    Oracle的嵌套函数语法 单行函数可以嵌套任意层: 嵌套函数从最深层开始执行. 通用函数: BFILENAME(directory,file_name) 返回操作系统中与物理文件 file_name ...

  5. oracle中treat函数,Oracle 函数概览

    -- Start Oracle 内置的函数真的是很多,要精通每个函数几乎是不可能的,所以本文并不打算介绍每个函数的具体用法,而是提供一个概览,让您了解每个函数的功能,这样,当你感觉你需要某些功能的函数 ...

  6. oracle中execute函数,Oracle 动态SQL execute immediate写法 zt

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者.试验步骤如下: 1. DDL 和 DML/*** DDL ***/ begin EXEC ...

  7. oracle中错位函数,Oracle中的一些函数

    select initcap(ename) from emp;  该语句能够使 ename 列的首字母大写. select concat('hello ','world') from dual;   ...

  8. oracle 中 split函数,Oracle Split功能函数

    在pl/sql时经常会碰到将某些特定的符号转换成行,这功能相当于split.以前在网上收集的split函数如下: CREATE OR REPLACE TYPE DJ_STR_SPLIT IS TABL ...

  9. oracle中execute函数,oracle Execute Immediate(sql语句)

    慕尼黑的夜晚无繁华 Example 1:Output:ABCDECLARE TYPE var_typ IS TABLE OF VARCHAR2(4000); cVars var_typ; cVar V ...

最新文章

  1. mysql行锁和表锁
  2. #pragma once与#ifndef的区别?
  3. WinAPI: 钩子回调函数之 HardwareProc
  4. 按 结构记录的 相关字段 快速排序
  5. 构建SpringBoot第一个Demo
  6. margin-top失效的解决办法
  7. 百度文库下载器Python实现
  8. 行政区域村级划分数据库_最新行政区划 省市区三级 街道乡镇四级 社区/村五级 每月更新(2020年12月版)...
  9. 制作U盘启动盘--win7系统
  10. 忘记网站服务器密码怎么办,忘记远程服务器的密码怎么办
  11. 网络通 浏览器 无法上网
  12. 阿里大数据平台MaxCompute初窥
  13. PHP函数计算中英文字符串长度的方法
  14. ServU 11 以上版本的数据库用户关联 密码加密原理
  15. 英文歌曲:A place nearby (天堂若比邻)
  16. Spark创建空的DataFrame
  17. 动态获取织梦CMS最新更新 利于收录的SiteMap.php文件
  18. 01组团队项目-Beta冲刺-3/5
  19. Mac上鼠标滚轮方向是和Win相反的,系统中设置后触摸板的方向又跟着变了
  20. 忘记密码照样查看QQ聊天记录

热门文章

  1. 基于盛大云IaaS部署CloudFoundry平台
  2. 词袋BOW与CBOW的区别
  3. ssh 远程连接方式总结
  4. 【深度学习基础】01激活函数:Sigmoid、Tanh、ReLU、Softmax系列及对应的变体
  5. 称霸全球云服务的他怎么了
  6. linux怎么删除virbr0网卡,CentOS7.4 删除virbr0 virbr0-nic虚拟网卡
  7. 三星s系列和note系列记录
  8. WIN7实现安装node14.15.0版本
  9. Android 基础与底层机制面试题
  10. 常数据成员和常成员函数