avatar

一条在知识海洋的咸鱼

这个家伙很懒,啥也没有留下😋

  • 首页
  • Linux
  • OCJP
  • Java核心技术卷
  • J2EE相关标准
  • 深入理解Java虚拟机
  • NIO与SOcket编程技术指南
  • Java多线程编程核心技术
  • Redis开发与运维
  • Spring Cloud Alibaba 微服务原理与实践
  • DevOps
  • Docker
  • MySQL必知必会
  • AI自学路线
  • Spring Boot 编程思想(核心篇)
主页 第十五章 联结表JOIN
文章

第十五章 联结表JOIN

发表于 2021-06-30 更新于 2026-06- 10
作者 Administrator
7~9 分钟 阅读
  • 联结
    • 关系表
    • 为什么要使用联结
  • 创建联结
    • WHERE子句的重要性
    • 内部联结
    • 联结多个表
    • 多做实验

联结

SQL的强大功能就是在数据检索查询的执行中联结(JOIN)表

关系表

由于数据库设计范式的原因,往往需要一个表的外键关联另一个表的主键id,定义2个表的关系。
关系数据库的可伸缩性远比非关系数据库要好
设计良好的数据库或应用程序称之为可伸缩性好

为什么要使用联结

联结是一种机制,用来在一个SELECT语句中关联表,因此称之为联结。
可以联结多个表返回一组输出,联结在运行时关联表中正确的行。

创建联结

只需要联结的所有表以及它们如何关联即可。

SELECT
	vend_name,
	prod_name,
	prod_price 
FROM
	vendors,
	products 
WHERE
	vendors.vend_id = products.vend_id 
ORDER BY
	vend_name,
	prod_name;
  • 解释
    1.SELECT语句中的列存在于2个不同的表中
    2.FROM子句列出了2个表,为SELECT语句联结的两个表的名字
    3.使用WHERE子句正确联结
    image.png
  • 注意
    在引用的列可能出现二义性时,必须使用完全限定列名

WHERE子句的重要性

利用WHERE子句建立联结关系。在联结两个表时,将第一个表中的每一行与第二个表中的每一行配对。
WHERE子句作为过滤条件,只匹配给定条件的行,没有WHERE子句那么第一个表中的每一行将和第二个表中的每一行配对,不管逻辑上是否可行。返回的结果行数将是一个笛卡尔乘积

  • 不要忘了WHERE子句
    1.应该保证所有联结都有WHERE子句,否则MySQL将返回比想要的数据多得多的数据。
    2.保证WHERE子句的正确性,不正确的过滤条件将导致MySQL返回不正确的数据

内部联结

基于两个表之间的想等测试的联结称为等值联结也称为内部联结。
所以也可以写为

SELECT
	vend_name,
	prod_name,
	prod_price 
FROM
	vendors
	INNER JOIN products ON vendors.vend_id = products.vend_id 
ORDER BY
	vend_name,
	prod_name;

此时两表之间的关系是FROM子句的组成部分,以INNER JOIN指定。
联结条件用特定的ON子句而不是WHERE子句给出。

  • 使用哪种语法
    SQL规范首选INNER JOIN语法,这样可以确保不会忘记联结条件

联结多个表

对SELECT语句中可以联结的表的数目没有限制。先列出所有表,然后定义表之间的关系

SELECT
	prod_name,
	vend_name,
	prod_price,
	quantity 
FROM
	orderitems,
	products,
	vendors 
WHERE
	products.vend_id = vendors.vend_id 
	AND orderitems.prod_id = products.prod_id 
	AND order_num = 20005;

image.png

  • 性能考虑
    MySQL在运行时关联指定的每个表以处理联结,不要联结不必要的表。联结的表越多,性能下降越厉害

使用联结查询时,可以避免执行复杂的SELECT操作

多做实验

为执行任一给定的SQL操作,一般存在不止一种方法,很少有绝对正确或绝对错误的方法。性能可能会受操作类型、数据量、索引等其他条件影响。可对不同的选择机制进行实验,找出最适合具体情况的方法

MySQL必知必会
SQL
许可协议: 
分享

相关文章

7月 6, 2021

第二十九章 数据库维护

7月 6, 2021

第二十八章 安全管理

确保数据的安全和完整需要利用访问控制访问控制root账户不要使用root管理用户创建用户账号简单创建一个新用户账号使用GRANT或INSERT创建重命名用户账号删除用户账号设置访问权限访问控制用户需要对其数据具有适当的访问权,既不能过多,也不能过少,例如多数用户需要对表进行读写,少数用户需要创建和删

7月 6, 2021

第二十七章 全球化和本地化

MySQL处理不同字符集和语言的基础知识字符集和校对顺序校对的重要性使用字符集和校对顺序字符集和校对顺序数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索MySQL需要适应不同的字符集(字母和字符),应应不同的排序和检索数据的方法字符集:字母和符号的集合编码:某个字符集成员的

下一篇

第十六章 创建高级联结

上一篇

第十四章 使用子查询

最近更新

  • 55 异常兜底:工具失败、非法输出、空检索与超时
  • 54 Agent Memory:短期记忆、用户上下文与摘要
  • 53 Human-in-the-loop:让关键动作暂停、确认与恢复
  • 52 工单 Tool:字段校验、创建结果与失败补偿
  • 51 订单 Tool:Mock、鉴权、状态解析与脱敏

热门标签

java基础 微服务 maven Spring Tomcat DDD Linux Linux基础 SQL基础 数据结构算法

目录

©2026 一条在知识海洋的咸鱼. 保留部分权利。

使用 Halo 主题 Chirpy