SQL第12课——联结表

三点:什么是联结?为什么使用联结?如何编写使用联结的select语句

12.1 联结

SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的select能执行的最重要的操作。

在使用联结前,需要了解关系表和关系数据库设计的一些基础知识。

12.1.1 关系表

例子:

一个产品目录的数据库表,一类物品占一行,每一行对物品的介绍包含:产品描述,价格,以及生产该产品的供应商。

现在有同一供应商生产的多种物品,那么在何处存储供应商名,地址,联系方式等供应商信息?

产品信息与供应商信息分开存储的理由:

1. 同一供应商生产的每个产品,其供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间;

2. 当供应商信息发生变化,例如供应商迁址或电话号码变动,只需要修改一次就行;

3. 当有重复数据,很难保证每次输入该数据的方式都相同。不一致的数据在报表中就很难利用。

关系数据库设计的基础:相同的数据出现多次决不是一件好事。

关系表的设计把信息分解成多个表:一类数据一个表,各个表通过某些共同的值互相关联。

此例中可以建立两个表:一个存储供应商信息,另一个存储产品信息。

Vendors表包含所有供应商信息,每个供应商占一行,具有唯一的标识,此标识称为主键(primary key).可以是供应商ID或任何其他唯一值。

Products表只存储产品信息,除了存储供应商ID(Vendors表的主键)外,不存储其他有关供应商的信息。

Vendors表的主键将Vendors表和Products表关联。

好处:

1. 供应商信息不重复,不会浪费时间和空间;

2. 当供应商信息变动时,只需要更新Vendors表中的单个记录,相关表中的数据不用改动。

3. 由于数据不重复,数据显然是一致的,使得处理数据和生成报表更简单。

关系数据可以有效地存储,方便地处理。关系数据库的可伸缩性更好。

可伸缩(scale):

能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称为可伸缩性好。

12.1.2 为什么使用联结

将数据分解为多个表能更有效地存储,更方便的处理,并且可伸缩性更好。

使用联结,联结是一种机制,用来在一条select语句中关联表。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。

12.2 创建联结

指定要联结的所有表,并关联它们的方式。

vend_name来自一个表;prod_name, prod_price来自一个表。

要匹配的两列指定为:venders.vend_id和products.vend_id。

这里需要这种完全限定列名,一条select语句返回了两个不同表中的数据

12.2.1 where子句的重要性

where子句作为过滤条件,只包含那些匹配给定条件(这里是联结条件)的行。没有where子句,第一个表中的每一行将与第二个表中的每一行配对,而不管它们逻辑上是否能配在一起。

笛卡儿积(cartesian product):没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。返回笛卡儿积的联结,也称叉联结(cross join)

从上面的输出可以看出来,相应的笛卡儿积不是我们想要的,返回的数据用每个供应商匹配了每个产品,包括了供应商不正确的产品(即使供应商根本就没有产品)

所有联结都必须有where子句!!!

12.2.2 内联结

目前为止使用的联结成为等值联结(equijoin),基于两个表之间的相等测试,也称为内联结(inner join).

联结条件用特定的on子句而不是where子句给出。传递给on的实际条件与传递给where的相同

12.2.3 联结多个表

SQL不限制一条select语句中可以联结的表的数目。

创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。

where子句定义两个联结条件,第三个联结条件用来过滤出订单20007中的物品。

!!!不要联结不必要的表,联结的表越多,性能下降越厉害。

执行复杂的select操作的两种方法:第11课中的子查询和第12课中的联结:

子查询:返回订购产品rgan01的顾客列表:

联结:

!!!联结的列名,在上述的例子中名字都是一样的,但是列名相同并不是必需的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/441171.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费高可用软件

高可用软件是指那些能够提供高可用性、高可靠性的软件,它们在各种应用场景下都能确保系统的稳定运行。以下是四款免费的高可用软件,它们在不同领域都表现出色,能够满足各种高可用性需求。 一、PanguHA PanguHA是一款专为Windows平台设计的双…

使用正则表达式删除文本的奇数行或者偶数行

用智谱清言和kimi搜出来的结果都没法在notepad生效,后面在overflow上找到的答案比较靠谱。 查找:^[^\n]*\n([^\n]*) 替换:\1 删除偶数行 查找:^([^\n]*)\n[^\n]* 替换:\1 代码解释 ^:这个符号代表字符…

RabbitMQ 集群

文章目录 集群搭建使用 Docker-Compose 镜像队列搭建步骤工作原理镜像策略主从同步 同步延迟 集群搭建 参考: docker中安装并启动rabbitMQ Docker中搭建RabbitMQ集群 使用 Docker-Compose 这里提供一个脚本来使用 docker-compose 完成RabbitMQ集群的配置及启动…

机器学习-树模型算法

机器学习-树模型算法 一、Bagging1.1 RF1.2 ET 二、Boosting2.1 GBDT2.2 XGB2.3 LGBM 仅个人笔记使用,感谢点赞关注 一、Bagging 1.1 RF 1.2 ET 二、Boosting 2.1 GBDT 2.2 XGB 2.3 LGBM LightGBM(Light Gradient Boosting Machine) 基本算法原理…

基于单片机的烧水壶系统设计

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC单片机,采用四个按键,通过DS18B20检测温度,开机显示实时温度 第一个按键为切换功能按键,按下后,可以设置烧水温度的大小&…

五子棋双人对战项目(6)——对战模块(解读代码)

目录 一、约定前后端交互接口的参数 1、房间准备就绪 (1)配置 websocket 连接路径 (2)构造 游戏就绪 的 响应对象 2、“落子” 的请求和响应 (1)“落子” 请求对象 (2)“落子…

【Git】vscode链接github拉去镜像

1.拉取别人的项目到自己的仓库 2.回到自己的仓库拉取文件到vscode里面下载 使用vscode进入虚拟机 推送到自己的仓库上面 在 github 页面将修改的内容 PR 到 Tutorial 创建一个个人仓库 代码如下 cd demo git clone https://github.com/3154067760/Tutorial.git cd Tutorial/…

UGUI(三大现成UI控件)

Rawimage 可以是任意类型的图,所以这里的泛型就更宽泛,不止sprite 相比Image唯二的不同 uvrect有点像平铺 Text suddenly come to a Free island. best fit开启后会有范围选择 Image image 组件是挂在RectTransform的ui下的,换句话说&…

域名续签申请步骤

来此加密-申请3个月使用(免费) 附上链接🔗 免费申请SSL证书,支持泛域名和多域名: 来此加密. 使用推荐码注册:E69X5K4D, 立刻获得5个积分. 访问:https://letsencrypt.osfipin.com/jump/share?codeE69X5K4D 登陆网站 https://letsencrypt.…

浅谈新能源电动汽车充电站建设与运营模式分析

摘要:电动汽车是当前新能源汽车中重要的组成部分,具有广阔的发展前景,能够实现“以电代油”,与传统的燃油汽车相比,电动汽车在噪音及废气排放量方面相对较少,具有节能环保的显著特点。而电动汽车充电站则是…

强引用、软引用、弱引用、虚引用用法

强引用、软引用、弱引用、虚引用用法 强引用弱引用弱引用虚引用 强引用 强引用是指程序中在程序代码之中类似“Object obj new Object()”的引用关系,无论任何情况下,只要强引用关系还存在,垃圾回收器就不会回收掉被引用的对象。 强引用是我…

【黑马点评】使用RabbitMQ实现消息队列——3.使用Jmeter压力测试,导入批量token,测试异步秒杀下单

3 批量获取用户token,使用jmeter压力测试 3 批量获取用户token,使用jmeter压力测试3.1 需求3.2 实现3.2.1 环境配置3.2.2 修改登录接口UserController和实现类3.2.3 测试类 3.3 使用jmeter进行测试3.4 测试结果3.5 将用户登录逻辑修改回去 3 批量获取用户…

地图可视化的艺术:深入比较Mapbox、OpenLayers、Leaflet和Cesium,不同场景下应如何选择地图库

目录 地图可视化的艺术:深入比较Mapbox、OpenLayers、Leaflet和Cesium 一、总览 二、定制地图美学的先行者——Mapbox 1、主要功能特点 2、开源情况 3、市场与应用人群 4、安装与基础使用代码 三、开源GIS地图库的全能王——OpenLayers 1、主要功能特点 2…

rabbitmq消费者应答模式

1.应答模式 RabbitMQ 中的消息应答模式主要包括两种:自动应答(Automatic Acknowledgement)和手动应答(Manual Acknowledgement)。 自动应答: 不在乎消费者对消息处理是否成功,都会告诉队列删…

ComfyUI增强图像细节只需要一个节点(附工作流),SD1.5、SDXL、FLUX.1 全支持,简单好用!

今天给小伙伴们介绍一个非常简单,但又相当好使的一个插件。 功能很简单,就是增加或者减少图像的细节,节点也很简单,就一个节点,只需要嵌入我们的 ComfyUI 的基础工作流中就可以了,随插随用。 而且该插件不…

springboot mail:如何高效管理邮件服务?

springboot mail发邮件教程?怎么实现spring发信功能? SpringBoot Mail作为Spring Boot框架的一部分,提供了一种简单而强大的方式来集成和管理邮件服务。AokSend将探讨如何高效地使用SpringBoot Mail来管理邮件服务,确保邮件发送的…

Qt实现Halcon窗口显示当前图片坐标

一、前言 Halcon加载图片的窗口,不仅能放大和缩小图片,还可以按住Ctrl键显示鼠标下的灰度值,这种方式很方便我们分析缺陷的灰度和对比度。 二、实现方式 ① 创建显示坐标和灰度的widget窗口 下图的是widget部件,使用了4个label控…

二项式定理学习

1.二项式定理 这个就是二项式定理的重要公式,我们的二项式定理的每一项的系数,代表的意思为从n个里面选出k个 ,以下是来自于百度百科上面的解释(原谅我实在不会数学定义) 因此我们可以去讨论二项式定理中的最特殊的一种…

深入解析LlamaIndex Workflows【下篇】:实现ReAct模式AI智能体的新方法

之前我们介绍了来自LLM开发框架LlamaIndex的新特性:Workflows,一种事件驱动、用于构建复杂AI工作流应用的新方法(参考:[深入解析LlamaIndex Workflows:构建复杂RAG与智能体工作流的新利器【上篇】]。在本篇中&#xff…

如何自制无人机?

自制无人机是一个既有趣又富有挑战性的项目,它涉及到电子工程、机械工程和航空航天工程等多个领域的知识。以下是一个基本的自制无人机制作步骤和所需材料概览,供您参考: 一、准备阶段 1. 明确目标 - 确定无人机的用途(如航拍、…