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的顾客列表:

联结:

!!!联结的列名,在上述的例子中名字都是一样的,但是列名相同并不是必需的。
相关文章:
SQL第12课——联结表
三点:什么是联结?为什么使用联结?如何编写使用联结的select语句 12.1 联结 SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的select能执行的最重要的操作。 在使用联结前,需要了解关系表…...
CentOS7 虚拟机操作系统安装及相关配置教程
1、安装虚拟机 在VMware《主页》界面中点击《创建新的虚拟机》按钮: 选择你准备好的ISO文件,点击下一步: 然后填写虚拟机的名称以及虚拟机将来保存的位置: 再次下一步,填写虚拟机磁盘大小: 继续下一步&…...
『网络游戏』窗口基类【06】
创建脚本:WindowRoot.cs 编写脚本: 修改脚本:LoginWnd.cs 修改脚本:LoadingWnd.cs 修改脚本:ResSvc.cs 修改脚本:LoginSys.cs 运行项目 - 功能不变 本章结束...
04_23 种设计模式之《单例模式》
文章目录 一、单例模式基础知识单例模式有 3 个特点: 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式通常用于管理共享资源,如…...
视频加字幕用什么软件最快?12款工具快速添加字幕!
对于大多数同学来讲,剪辑中比较头疼的就是如何给视频加字幕和唱词啦,特别是用Pr或者FCXP等专业剪辑软件,加字幕也是特别费时的,哪怕是有批量添加的功能orz... 虽然关于这方面的内容已经很多啦,但是真正全面的内容还特…...
C++:string (用法篇)
文章目录 前言一、string 是什么?二、C语法补充1. auto2. 范围for 三、string类对象的常见构造1. Construct string object2. String destructor3. operator 四、string迭代器相关1. begin与end1)begin2)end3)使用 2. rbegin 与 r…...
力扣随机题
最接近原点的K个点 题目 973. 最接近原点的 K 个点 - 力扣(LeetCode) 思路 这就是一道排序题,直接根据公式排序,然后返回对应范围的数组就行了 代码 public int[][] kClosest(int[][] points, int k) {Arrays.sort(points, n…...
CSS样式基础样式选择器(案例+代码实现+效果图)
目录 1.css样式的规则 2.引入css样式的方式 1)行内式 2)内嵌式 3)外链式 1-link导入 2-import导入 4)总 3.css基础选择器 1)标签选择器 案例:使用标签选择器编写一个圆 1.代码 2.效果 2)类选择器 案例:使用类选择器为div添加背景色 1.代码 2.效果 3)id…...
Linux系统编程—I/O缓冲区(C语言实现)
I/O缓冲区 进程的I/O缓冲区机制是计算机操作系统中一个重要的概念,它涉及到数据在内存和外设之间的传输。以下是关于进程的I/O缓冲区机制的详细解释: 1.定义与作用 定义:I/O缓冲区是指在内存里开辟的一块区域,用来存放接收用户输…...
MySQL多表查询:行子查询
先看我的表数据 dept表 emp表 行子查询 子查询返回的结果是一行(可以是多列), 这种子查询称为行子查询 常用的操作符: , <>, IN, NOT IN 例子1. 查询与“张无忌” 的薪资及直属领导相同的员工信息 拆解成两个问题 a. 查询"张无忌"…...
.NET CORE程序发布IIS后报错误 500.19
发布IIS后浏览时报错误500.19,同时配置文件web.config的路径中也存在问号“?”。 可能原因:没有安装运行时...
Qt 6 相比 Qt 5 的主要提升与更新
自从 Qt 6 发布以来,作为 Qt 框架的一个重大版本更新,它在多个核心方面进行了深度优化和改进。与 Qt 5 相比,Qt 6 不仅提升了性能,还改进了对现代硬件和图形 API 的支持,并增强了开发者的工作流程。本文将详细介绍 Qt …...
【数据结构】介绍
介绍数据结构 数据结构是计算机科学中重要的概念,是指组织和管理数据的方式。它涉及到数据的存储、操作和访问等操作。数据结构可以分为线性结构、树形结构和图形结构等。 线性结构是最简单的数据结构之一(本玄也是这样觉得(* ̄▽ ̄*))&#…...
论医疗类系统全国运营推广策略
一、线上推广 搜索引擎优化(SEO)- 重点策略 持续更新网站内容,包括系统功能介绍、成功案例、行业新闻等,提高网站的权重和流量。进行搜索引擎优化(SEO),确定与医疗机构辅助系统相关的关键词&a…...
Redis入门第一步:认识Redis与快速安装配置
认识Redis与快速安装配置🍃 Redis是什么🐲 1.Redis的背景🎍 Redis(Remote Dictionary Server)译为"远程字典服务",它是一款基于内存实现的键值型 NoSQL 数据库, 通常也被称为数据结…...
ES postman操作全量修改,局部修改,删除
全量修改 修改需要调用的url 地址是http://192.168.1.108:9200/shopping/_doc/1001,调用方法使用put 只修改指定的需求的内容的请求方式 post方式就是局部修改 http://192.168.1.108:9200/shopping/_update/1001,请求方式post 上图是只修改id 为1001数…...
社区交流礼仪 | 提问的艺术
唠唠闲话 2021 年通过 Julia 社区了解到开源,自此开始融入开源社区,学习和体验这种独特的协作模式与交流文化,受益良多。本篇文章为开源新手必读,文章中探讨的交流模式,不仅对参与开源项目的协作有所帮助,…...
极客兔兔Gee-Cache Day5
HTTPPool 既可以是服务端,也可以是客户端,这取决于特定的使用场景和上下文: 作为客户端:当本地缓存没有找到需要的数据时,HTTPPool 需要作为客户端,通过 httpGetter (实现了 PeerGetter 接口&am…...
【IPv6】IPv6地址格式及地址分类(组播、单播、任播)整理
IPv6地址格式 IPv6 地址从 IPv4 地址的 32 bits 扩展到 128 bits,IPv6 地址的表示、书写方式也从 IPv4 的点分十进制,修改16进制的冒号分割 IPv4 点分格式(.) 192.168.11.11 IPv6 冒号分割(:) 2408:8459:3032:0000:0000:0000:0001:a9fd IPv6 的规范…...
Linux数据备份
1、Linux服务器中哪些数据需要备份 1)Linux系统重要数据: ①/root/目录,管理员家目录 ②/home/目录,普通用户家目录 ③/etc/目录 ,系统重要的配置文件保存目录 2)安装服务的数据:例apache①…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
