MySQL 连接查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL 连接查询



连接查询

连接查询也叫多表查询,常用于查询表头来自于多张表,通过不同连接方式把多张表重新组成一张新的临时表,再对临时表做数据处理。

命令格式:

SELECT 表头名 FROM 表1 as 别名 INNERJOIN 表2 as 别名 ON 连接条件

[WHERE 筛选条件][GROUP BY 分组]|[HAVING 分组后筛选]|[ORDER BY排序]|[limit 分页];

内连接:

等值连接:

使用相等判断做连接条件:表里必须有存储相同数据的表头

格式:

SELECT 表头名列表 FROM 表1 as别名 INNERJOIN 表2 as别名 ON 连接条件                   [WHERE 筛选条件] | [GROUP BY 分组]|[HAVING 分组后筛选] | [ORDER BY 排序列表]  

非等值连接:

不使用相等判断做连接条件据的表头时使用:适合表里没有存储相同类

格式:

SELECT 字段列表 FROM 表1 as别名 INNERJOIN 表2 as别名 ON 连接条件                                  [WHERE 筛选条件] | [GROUP BY 分组 [HAVING 分组后筛选] | [ORDER BY 排序列表

外连接:

左连接:

格式:

表名 LEFT JOIN 表名ON 连接条件

结果:

左表表头记录全显示,右表表头只显示与条件匹配的记录,右表比左表少的记录使用NULL匹配

右连接:

格式:

表名 RIGHT JOIN 表名ON 连接条件

结果:

右表表头记录全显示,左表表头只显示与条件匹配的记录,左表比右表少的记录使用NULL匹配

全外连接:

也称联合查询,用来合并查询结果可以合并同一张的表的查询记录(不同表的查询记录也可合并要求查询时,多个select语句查询表头个数必须一样UNION关键字默认去重,可以使用UNI0N ALL包含重复项

格式:

(SELECT语句) UNION (SELECT语句); 去重

(SELECT语句) UNION  ALL (SELECT语句); 不去重

练习

表联系图:

1.编写 SQL 语句以从 Customers 表中返回客户名称 (cust_name) 并从 Orders 表中返回相关订单号 (order_num),然后按客户名称和订单号对结果进行排序。尝试两次,一次使用简单的 equijoin 语法,一次使用 INNER JOIN。

mysql> SELECT cust_name, order_num
    -> FROM customers, orders
    -> WHERE customers.cust_id = orders.cust_id
    -> ORDER BY cust_name, order_num;
+----------------+-----------+
| cust_name      | order_num |
+----------------+-----------+
| Coyote Inc.    |     20005 |
| Coyote Inc.    |     20009 |
| E Fudd         |     20008 |
| Wascals        |     20006 |
| Yosemite Place |     20007 |
+----------------+-----------+
5 rows in set (0.00 sec)
mysql> SELECT cust_name, order_num
    -> FROM customers INNER JOIN orders
    ->  ON customers.cust_id = orders.cust_id
    -> ORDER BY cust_name, order_num;
+----------------+-----------+
| cust_name      | order_num |
+----------------+-----------+
| Coyote Inc.    |     20005 |
| Coyote Inc.    |     20009 |
| E Fudd         |     20008 |
| Wascals        |     20006 |
| Yosemite Place |     20007 |
+----------------+-----------+
5 rows in set (0.00 sec)

2.除了返回客户名称和订单号外,还可以添加名为 OrderTotal 的第三列,其中包含每个订单的总价。有两种方法可以做到这一点,可以使用 OrderItems 表上的子查询创建 OrderTotal 列,也可以将 OrderItems 表联接到现有表并使用聚合函数。这里有一个提示,请注意需要使用完全限定列名称的位置。

mysql> SELECT cust_name,
    ->        order_num,
    ->        (SELECT Sum(item_price*quantity)
    ->        FROM orderitems
    ->        WHERE orders.order_num=orderitems.order_num) AS ordertotal
    -> FROM customers, orders
    -> WHERE customers.cust_id = orders.cust_id
    -> ORDER BY cust_name, order_num;
+----------------+-----------+------------+
| cust_name      | order_num | ordertotal |
+----------------+-----------+------------+
| Coyote Inc.    |     20005 |     149.87 |
| Coyote Inc.    |     20009 |      38.47 |
| E Fudd         |     20008 |     125.00 |
| Wascals        |     20006 |      55.00 |
| Yosemite Place |     20007 |    1000.00 |
+----------------+-----------+------------+
5 rows in set (0.00 sec)
mysql> SELECT cust_name,
    ->        orders.order_num,
    ->        Sum(item_price*quantity) AS ordertotal
    -> FROM customers, orders, orderitems
    -> WHERE customers.cust_id = orders.cust_id
    ->  AND orders.order_num = orderitems.order_num
    -> GROUP BY cust_name, orders.order_num
    -> ORDER BY cust_name, order_num;
+----------------+-----------+------------+
| cust_name      | order_num | ordertotal |
+----------------+-----------+------------+
| Coyote Inc.    |     20005 |     149.87 |
| Coyote Inc.    |     20009 |      38.47 |
| E Fudd         |     20008 |     125.00 |
| Wascals        |     20006 |      55.00 |
| Yosemite Place |     20007 |    1000.00 |
+----------------+-----------+------------+
5 rows in set (0.00 sec)

3.编写一个 SQL 语句,用于检索订购产品 BR01 的日期,但这次使用 join 和简单的 equijoin 语法。

mysql> SELECT cust_id, order_date
    -> FROM orders, orderitems
    -> WHERE orders.order_num = orderitems.order_num
    ->  AND prod_id = 'TNT2'
    -> ORDER BY order_date;
+---------+---------------------+
| cust_id | order_date          |
+---------+---------------------+
|   10001 | 2023-09-01 00:00:00 |
|   10004 | 2023-09-30 00:00:00 |
+---------+---------------------+
2 rows in set (0.00 sec)
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
SQL 缓存 监控
MySQL缓存机制:查询缓存与缓冲池优化
MySQL缓存机制是提升数据库性能的关键。本文深入解析了MySQL的缓存体系,包括已弃用的查询缓存和核心的InnoDB缓冲池,帮助理解缓存优化原理。通过合理配置,可显著提升数据库性能,甚至达到10倍以上的效果。
|
2月前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
4月前
|
SQL 人工智能 关系型数据库
如何实现MySQL百万级数据的查询?
本文探讨了在MySQL中对百万级数据进行排序分页查询的优化策略。面对五百万条数据,传统的浅分页和深分页查询效率较低,尤其深分页因偏移量大导致性能显著下降。通过为排序字段添加索引、使用联合索引、手动回表等方法,有效提升了查询速度。最终建议根据业务需求选择合适方案:浅分页可加单列索引,深分页推荐联合索引或子查询优化,同时结合前端传递最后一条数据ID的方式实现高效翻页。
212 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL的查询操作语法要点
储存过程(Stored Procedures) 和 函数(Functions) : 储存过程和函数允许用户编写 SQL 脚本执行复杂任务.
178 14
|
2月前
|
SQL 关系型数据库 MySQL
MySQL的查询操作语法要点
以上概述了MySQL 中常见且重要 的几种 SQL 查询及其相关概念 这些知识点对任何希望有效利用 MySQL 进行数据库管理工作者都至关重要
81 15
|
2月前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
2月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
87 13
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
705 11
|
2月前
|
SQL 关系型数据库 MySQL
排除通过IP访问MySQL时出现的连接错误问题
以上步骤涵盖了大多数遇到远程连接 MySQL 数据库时出现故障情形下所需采取措施,在执行每个步骤后都应该重新尝试建立链接以验证是否已经解决问题,在多数情形下按照以上顺序执行将能够有效地排除并修复大多数基本链接相关故障。
254 3
|
2月前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
282 11

推荐镜像

更多
下一篇
开通oss服务