SQL内连接详解及图解

JSON 2024-02-14 19:48:48 434

一、什么是 SQL 中的内部连接?

只要列之间匹配,INNER JOIN 就会从两个参与表中选择所有行。SQL INNER JOIN 与 JOIN 子句相同,将两个或多个表中的行组合在一起。

SQL Inner Join 的图示:


语法:

SELECT * 
FROM table1 INNER JOIN table2 
ON table1.column_name = table2.column_name; 

或者:

SELECT * 
FROM table1
JOIN table2 
ON table1.column_name = table2.column_name; 

SQL 中的 INNER JOIN 使用比较运算符根据特定条件的匹配来连接两个表。

语法图 - INNER JOIN


示例:两个表之间的 SQL INNER JOIN

下面是两个表之间的 SQL 内部联接示例。

foods 样品表:食品

 ITEM_ID  ITEM_NAME  ITEM_UNIT  COMPANY_ID
 1 Chex Mix  Pcs   16
 6  Cheez-It  Pcs  15
 2  BN Biscuit  Pcs  15
 3  Mighty Munch Pcs   17
 4  Pot Rice  Pcs  15
 5  Jaffa Cakes  Pcs  18
 7  Salt n Shake  Pcs  

company 示例表:公司
 COMPANY_ID COMPANY_NAME COMPANY_CITY
 18 Order All Boston
 15 Jack Hill Ltd London
 16 Akas Foods Delhi
 17  Foodies. London
 19 sip-n-Bite. New York

要连接物料名称、食物表中的物料单位列和公司名称、公司表中的公司城市列,条件如下:

1.食物和公司餐桌的company_id必须相同,可以使用以下 SQL 语句:

SELECT foods.item_name,foods.item_unit,
company.company_name,company.company_city 
FROM foods 
INNER JOIN company 
ON foods.company_id =company.company_id;

输出结果:

ITEM_NAME                 ITEM_ COMPANY_NAME              COMPANY_CITY
------------------------- ----- ------------------------- --------------
Chex Mix                  Pcs   Akas Foods                Delhi
Cheez-It                  Pcs   Jack Hill Ltd             London
BN Biscuit                Pcs   Jack Hill Ltd             London
Mighty Munch              Pcs   Foodies.                  London
Pot Rice                  Pcs   Jack Hill Ltd             London
Jaffa Cakes               Pcs   Order All                 Boston

使用 JOIN 关键字的 SQL INNER JOIN 示例

要从食物表中获取项目名称、项目单位列和公司名称,从公司表中获取公司城市列,在连接这些提到的表后,条件如下

1.食品公司ID和公司表公司ID必须相同,可以使用以下 SQL 语句:

SELECT foods.item_name,foods.item_unit, 
company.company_name,company.company_city 
FROM foods 
JOIN company 
ON foods.company_id =company.company_id;
ITEM_NAME                 ITEM_ COMPANY_NAME              COMPANY_CITY
------------------------- ----- ------------------------- -------------
Chex Mix                  Pcs   Akas Foods                Delhi
Cheez-It                  Pcs   Jack Hill Ltd             London
BN Biscuit                Pcs   Jack Hill Ltd             London
Mighty Munch              Pcs   Foodies.                  London
Pot Rice                  Pcs   Jack Hill Ltd             London
Jaffa Cakes               Pcs   Order All                 Boston

公司和食物表的 SQL 内部联接的图形表示:


二、所有列的 SQL INNER JOIN

加入后从食物和公司表中获取所有列,条件如下

1.食品公司ID和公司表公司ID必须相同,可以使用以下 SQL 语句:

SELECT * 
FROM foods 
JOIN company 
ON foods.company_id =company.company_id;

输出结果:

ITEM_ID  ITEM_NAME                 ITEM_ COMPAN COMPAN COMPANY_NAME              COMPANY_CITY
-------- ------------------------- ----- ------ ------ ------------------------- -------------
1        Chex Mix                  Pcs   16     16     Akas Foods                Delhi
6        Cheez-It                  Pcs   15     15     Jack Hill Ltd             London
2        BN Biscuit                Pcs   15     15     Jack Hill Ltd             London
3        Mighty Munch              Pcs   17     17     Foodies.                  London
4        Pot Rice                  Pcs   15     15     Jack Hill Ltd             London
5        Jaffa Cakes               Pcs   18     18     Order All                 Boston

三、JOIN 和 INNER JOIN 之间的区别

1.JOIN 返回一个表的键记录等于另一个表的键记录的表中的所有行。

2.只要列之间匹配,INNER JOIN 就会从两个参与表中选择所有行。SQL INNER JOIN 与 JOIN 子句相同,将两个或多个表中的行组合在一起。

3.内部联接使用比较运算符,根据每个表的公共列中的值来匹配两个表中的行。例如,检索学生表和课程表的学生标识号相同的所有行。

JOIN 子句

SELECT * FROM 
Table1 JOIN Table2 
ON Table1.column_name=Table2.column_name;

INNER JOIN 子句

SELECT * 
FROM Table1 INNER JOIN Table2 
ON Table1.column_name= Table2.column_name;

四、INNER JOIN 和 OUTER JOIN 之间的区别

INNER JOIN 就是这样一种联接类型,它从一个表的键记录等于另一个表的键记录的两个参与表中返回所有行。这种类型的联接需要比较运算符根据两个表的公共字段或列来匹配参与表中的行。

其中,OUTER JOIN 返回参与表中满足条件的所有行,以及与条件不匹配的行将出现在此操作中。此结果集可以采用三种类型的格式 。

第一个是 LEFT OUTER JOIN,在此联接中包括 JOIN 子句的左表中的所有行和右表中具有所选列的 NULL 值的不匹配行。

第二个是 RIGHT OUTER JOIN,在此联接中包括 JOIN cause 右侧的所有行和左侧表中具有所选列的 NULL 值的不匹配行。

FULL OUTER JOIN 中的最后一个,在此联接中,包括 JOIN 子句的左右表中的匹配行,以及左右表中具有所选列的 NULL 值的不匹配行。

示例:

这里有两个表 tableX 和 tableY,它们每个表中没有重复的行。在表X中,值(A,B)是唯一的,在表Y中,值(E,F)是唯一的,但值(C和D)在两个表中是通用的。


INNER JOIN 示例:

SELECT * 
FROM tableX 
INNER JOIN tableY on tableX.X = tableY.Y;

或者:

SELECT tableX.*,tableY.*  
FROM tableX,tableY 
WHERE tableX.X = tableY.Y;

输出结果:


这里只有 tableX 和 tableY 的匹配出现在结果集中。

LEFT OUTER JOIN示例:

SELECT tableX.*,tableY.*  
FROM tableX,tableY 
WHERE tableX.X = tableY.Y(+)

或者:

SELECT * 
FROM tableX 
LEFT OUTER JOIN tableY ON tableX.X= tableY.Y

输出:


这里出现了 tableX 中的所有行(即 JOIN 子句的左侧)和 tableY(即 JOIN 子句右侧)中所有具有 NULL 值的不匹配列的行。

RIGHT OUTER JOIN示例:

SELECT * FROM tableX 
RIGHT OUTER JOIN tableY ON tableX.X= tableY.Y

输出:


这里出现了 tableY(即 JOIN 子句右侧)中的所有行,以及 tableX 中(即 JOIN 子句左侧)中所有具有 NULL 值的行。

FULL OUTER JOIN示例:

SELECT * 
FROM tableX 
FULL OUTER JOIN tableY ON tableX.X= tableY.Y

 输出:


这里显示了 tableX 和 tableY 中的所有匹配行,以及两个表的 NULL 值为空的所有不匹配行。

五、INNER JOIN ON 与 WHERE 子句

WHERE 子句,所做的是将所有与 WHERE 条件匹配的记录都包含在结果集中,但 INNER JOIN 是,与 JOIN 条件不匹配的数据将从结果集中排除。

两个或多个表之间的链接应使用 INNER JOIN ON 子句完成,但对单个数据元素的筛选应使用 WHERE 子句完成。

INNER JOIN 是 ANSI 语法,而 WHERE 语法更面向关系模型。

INNER JOIN 通常被认为更具可读性,它是表的笛卡尔乘积,尤其是当您联接大量表时,但可以使用 WHERE 子句在匹配列上筛选两个表 JOIN'ed 的结果。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/499.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Unicode编码详解
详解JavaScript中splice()方法,有Demo细介绍
dns-prefetch对网站速度能提升有多少?详解dns-prefetch。
json-lib-2.4-jdk15.jar使用详解
Elasticsearch 教程,Elasticsearch 日期查询详解,Elasticsearch Date 查询Java API
IE浏览器判断,判断IE版本的HTML语句详解,如:[if lte IE 9]……[endif]
js把html转为图片的方法,最详解
SQL Server 对JSON的支持
Maven的Mirror和Repository 的细讲解
HttpClient 获取细的头信息
最新文章
XML内部实体和外部实体 90
Java面向对象编程概念 101
PHP回显语句 91
Linux—文件树 116
C语言while循环和do while循环 131
Python元组剖析 200
MySQL触发器教程 296
sql使用布尔运算符和关系运算符 241
C语言的变量和常量 296
PostgreSQL:数据库角色 123
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 681970
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674712
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 601960
免费天气API,天气JSON API,不限次数获取十五天的天气预报 576653
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 552868
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509341
Elasticsearch教程(四) elasticsearch head 插件安装和使用 479946
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 264412
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244246
Elasticsearch教程(一),全程直播(小白级别) 225520
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...