SQL 连接:它们是什么、它们如何工作以及存在多少种类型

在本文开始前,先给大家分享几个好用的IDEA激活码

这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:

2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)

2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新)

2022和2023Webstorm激活码,Webstorm稳定专属激活码(持续更新)

2022和2023Phpstorm激活码,Phpstorm稳定专属激活码(持续更新)

2022和2023Goland激活码,Goland稳定专属激活码(持续更新)

 

你有没有需要加入两个表?SQL Join语句允许您访问来自多个源的数据——SQL 中的表。  

您可能会问,“什么是 SQL?” 或/和“什么是 SQL 连接?” 取决于您在 SQL 路径上有多远,我们会说这是一个公平的问题。虽然它是一个众所周知的首字母缩略词,但它是数据库管理系统 (DBMS) 的重要组成部分。SQL 管理从大型公司数据库到小型本地数据库的所有内容。 

可以这样想;如果我们必须为每种类型的数据编写代码和程序,因为没有任何专门的工具来帮助我们这样做,我们就会淹没在数据混乱中。如果您正在创建网页或发送电子邮件,并且有数以百万计的不同选项可用,那么您想要的是能够使所有信息更易于阅读和使用的东西——而不是更难!这就是 SQL 为您所做的。 

SQL(结构化查询语言)管理关系数据库管理系统 (RDBMS) 中的数据。了解 SQL 的开发人员可以编写代码来创建、修改和检索存储在数据库中的数据。

SQL是世界上使用最广泛的数据库语言。对于使用数据库存储信息的网站或应用程序的任何人来说,这是一项基本技能。

除了直接使用 SQL 命令之外,大多数数据库应用程序还允许您通过图形用户界面或向导输入 SQL 语句。

在这篇博文中,我们将通过示例讨论SQL 连接,以展示如何使用此技术来改进查询。

SQL 连接的类型

SQL从两个(或多个)表中根据它们之间相同的关键数据点选择数据Join;SQL连接语句的前4种类型如下: 

  1. 交叉连接

交叉连接是两个或多个表的笛卡尔积。交叉联接可以将来自多个表的数据合并到一个结果集中。例如,如果您有一个名为 Employees 的表,其中包含员工姓名和电话号码,您可以与另一个名为 Phones 的表交叉联接以获取每个员工的电话号码。

交叉连接的语法如下:

SELECT * FROM [表名 1] CROSS JOIN [表名 2]

看看下面清晰的交叉连接示例。

表 1:Car_model

汽车模型
1个 花冠
2个 崇拜
3个 凯美瑞

表 2:Color_name

颜色名称
1个 黑色的
2个
3个 红色的

要获得所有可能的汽车和颜色组合,您需要执行以下代码:

从汽车 c 中选择
c.Car_model
,c1.Color_name CROSS JOIN Colors c1

这将生成上述 2 个表的所有可能值的笛卡尔积。

汽车模型 颜色名称
1个 花冠 黑色的
2个 崇拜 黑色的
3个 凯美瑞 黑色的
4个 花冠
5个 崇拜
6个 凯美瑞
7 花冠 灰色的
8个 崇拜 灰色的
9 凯美瑞 灰色的
  1. 内部联接

内部联接是一种联接类型,它根据列中的匹配值联接两个表。内部联接的结果包含两个表中的所有行,两个表中的匹配行链接在一起。

要在 SQL 中使用内部联接,请使用以下语法:

SELECT * FROM table1 INNER JOIN table2 

ON table1.column_name = table2.column_name; 

以下是这段代码的工作原理:

表 1:食物

物品编号  项目名 ITEM_UNIT 项目 公司编号
1个 芝士粉 16
6个 奶酪吧 15
2个 饼干 15
3个 蒙克 17

表 2:公司

公司编号 公司名称 公司_城市
18 雀巢 伦敦
15 杰克食品 波士顿
16 吃货 美国
17 阿卡斯食品 澳大利亚

您需要执行以下代码才能通过内部联接获得所需的结果:

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_UNIT 项目 公司名称 公司_城市
芝士粉 雀巢 伦敦
奶酪吧 杰克食品 波士顿
饼干 吃货 美国
蒙克 阿卡斯食品 澳大利亚
  1. 自助加入

自连接允许将表连接到自身。要使用自连接,表必须包含一个用作主键的列(我们称之为 X)和另一列(我们称之为 Y),其中包含可以与列 X 中的值匹配的值。 

对于任何给定行,X 列和 Y 列不需要具有相同的值,Y 列甚至可以为空。

这是成员及其管理的说明。让我们检查一下成员表:

每个成员都有一个唯一的标识符,我们称之为“Column X”。Teamlead Id 列包含成员或团队负责人的 Id;这是我们的“Y 列”。如果这些列用于监控此表中的成员-团队领导关系:

表:客户

ID  全名 薪水 TeamleadId
1个 奇尔斯海姆斯沃斯 200000 5个
2个 汤姆荷兰 250000 5个
3个 本·阿弗莱克 120000 1个

您需要执行以下代码:

选择
    成员。Id,
        member.FullName,
        member.teamleadId,
        teamlead.FullName as teamleadName
FROM members member
JOIN 成员 teamlead
ON member.teamleadId = teamlead.Id

这将向您显示以下输出:

ID 全名 团队负责人 ID 团队负责人姓名
1个 奇尔斯海姆斯沃斯 5个 盖尔·加尔多
2个 汤姆荷兰 5个 盖尔·加尔多
3个 本·阿弗莱克 1个 奇尔斯海姆斯沃斯
5个 盖尔·加尔多 4个 克里斯蒂安·贝尔
  1. 外连接

外连接从一个或两个表返回匹配和不匹配的值。

外部连接又细分为三个子类别:

  1. 左外连接
  2. 右外连接
  3. 全外连接 

这些类别取决于表中包含的行:左侧、右侧和两者。假设所有这些外部连接类型的 Pets 表和 Owner 表的示例。

表 1:宠物

ID 宠物名 所有者.ID
1个 内格尔 1个
2个 贝拉 2个
3个 小雪 2个
4个 老虎 3个
5个 威奇 0

表 2:所有者

ID 所有者.姓名
1个 斯蒂芬
2个 强尼
3个 查理
4个 薇琪
  • 左外连接

左外部联接是一种将两个表联接在一起的方法。只有在LEFT OUTER JOIN子句之前命名的表中未在目标表中找到的行才会包含在输出中。

SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
LEFT JOIN owners
ON pets.owner_id = owners.id;

你会得到它:

宠物名字 所有者
内格尔 斯蒂芬
贝拉 强尼
小雪 强尼
老虎 查理
威奇 无效的
  • 右外连接

右连接(或外连接)与左外连接类似,只是表处理方式相反。 

让我们用右连接做同样的查询:

SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
RIGHT JOIN owners
ON pets.owner_id = owners.id;

在这种情况下,我们保留所有者表中的所有相关行,如果 pets 中的任何列需要值但没有值,我们将替换为 NULL。

宠物名字 所有者
内格尔 斯蒂芬
贝拉 强尼
小雪 强尼
老虎 查理
无效的 薇琪
  • 全外连接

该类别(全外连接)结合了左右(外连接)的应用效果。 

完整的外部连接表行中没有匹配项;看起来它会认为结果集对于每个缺少匹配行的表列都具有 NULL 值。 

单行将为具有某些匹配可能性的那些(行)产生结果。

这是对此的查询:

SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
FULL JOIN owners
ON pets.owner_id = owners.id;

它将产生以下结果:

宠物名字 所有者
内格尔 斯蒂芬
贝拉 强尼
小雪 强尼
老虎 查理
威奇 无效的
无效的 薇琪

如何使用SQL Join 从多个表中选择数据?

您可以根据需要从任意多个表中获取信息,根据表中的任何数据指定条件,并在数据库设计和链接正确的情况下以您选择的任何顺序显示结果。

让我们举个例子:

表 1:产品

ID 姓名 价格 类别_ID
1个 桌子 200 2个
2个 椅子 120 3个
3个 砖块 150 2个
4个 沙发 50 1个
5个 20 1个
6个 玩具车 100 2个

表 2:类别

ID 类别
1个 材料
2个 家具
3个 玩具

您需要以下代码才能获得所需的结果:

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id;

执行后,您将获得以下输出:

产品名称 类别
桌子 家具
椅子 家具
砖块 材料
沙发 家具
材料
玩具车 玩具

SQL 连接的用例

SQL Join的基本应用是从很多表中选择数据,如上图。但是,它可以应用于解决不同的任务。SQL 连接的一些最常见的使用场景是:

  • 关系层次结构:如果表之间存在多层关系,例如祖父、父亲、儿子关系或用户、城市和州关系,则使用联接。
  • 多对多连接:当一个表中的许多项目与第二个表中的许多项目有关系时,就会出现这种情况。例如,学生注册了多个课程,课程被分配给多个学生。就像客户订阅不同的产品,而产品由客户共享一样。
  • 用于数据分析的 SQL 连接:从商业智能 (BI) 的角度来看,SQL 连接分析数据以制作图表和构建仪表板。
  • 数据库规范化:在规范化中,较大的表被组织成较小的表,以消除任何数据冗余和异常。然后使用 SQL 连接从这些较小的表中获取相关数据。 

使用 Sololearn 学习 SQL 连接

作为一种声明性语言,SQL 需要连接语句才能从高度结构化的数据库中提取相关数据。. 它们可能会造成混淆,尤其是如果您不熟悉 SQL,但它们值得学习。我们为您提供了不同的命令来帮助您编写查询并围绕您的数据库重新创建它们。因此,要了解更多 SQL 连接或关系数据库,您必须从基本的初学者程序开始。

发布者:admin,转转请注明出处:https://www.ajihuo.com/soft/5281.html

(0)
上一篇 2023年2月13日 上午8:40
下一篇 2023年2月15日 上午8:32

相关推荐

  • 成为一名软件工程师是什么感觉?

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年1月7日
    00
  • 什么是响应式网页设计?

    PS: 本教程最新更新时间: 2022年12月18日~ 在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023…

    2022年12月18日
    00
  • 通过示例学习 JDBC、Java Servlet 和 JSP

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年4月11日
    00
  • 如何像程序员一样思考

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年1月9日
    00
  • Typescript、Angular 和 Nest JS 概述

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022Webstorm激活码,Webstorm稳定专属激活码(持续更新) 2022Phpst…

    2022年10月28日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注