当前位置: 首页 > news >正文

【MySQL】MySQL 进阶之旅 · 第一篇 JOIN、子查询与嵌套查询

本篇文章将介绍 MySQL 中的高级查询操作,包括 JOIN(连接查询)、子查询嵌套查询,帮助你掌握多表数据联合查询及更复杂的查询需求。


目录

  1. JOIN 基础回顾
  2. 内连接(INNER JOIN)与外连接(LEFT JOIN/RIGHT JOIN)
  3. 子查询(Subquery)
  4. 嵌套查询(Nested Query)
  5. 优化查询性能的小技巧
  6. 小结

JOIN 基础回顾

在进行多表查询时,最常用的方式是 JOINJOIN 用来将两个或多个表的数据通过特定的条件连接起来。

常见的 JOIN 类型:

  • INNER JOIN:返回两个表中匹配的数据行。
  • LEFT JOIN / RIGHT JOIN:分别返回左表或右表中的所有数据,未匹配的数据会显示 NULL
  • FULL JOIN:返回两个表的所有数据,未匹配的数据会显示 NULL。在 MySQL 中,可以通过 UNION 来模拟。

示例:使用 JOIN 查询订单和客户数据

SELECT orders.id, customers.name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id;

上面的 SQL 语句通过 INNER JOIN 联接了 orders 表和 customers 表,查询了所有有订单的客户的姓名和订单 ID。


内连接(INNER JOIN)与外连接(LEFT JOIN / RIGHT JOIN)

1. 内连接(INNER JOIN)

INNER JOIN 返回的是 两个表中匹配的记录。如果两表之间的某一行没有匹配的记录,那么它不会出现在结果中。

语法
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

示例:查询所有客户和他们的订单

SELECT customers.name, orders.id
FROM customers
INNER JOIN orders
ON customers.id = orders.customer_id;

2. 外连接(LEFT JOIN 和 RIGHT JOIN)

LEFT JOIN 返回左表的所有记录和匹配的右表记录。如果右表没有匹配的记录,返回 NULL

RIGHT JOIN 则返回右表的所有记录和匹配的左表记录。如果左表没有匹配的记录,返回 NULL

语法
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
示例:查询所有客户及其订单(包括没有订单的客户)
SELECT customers.name, orders.id
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id;

示例:查询所有订单及其客户(包括没有客户的订单)

SELECT orders.id, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id;

子查询(Subquery)

子查询 是指在一个查询中嵌套的另一个查询。子查询可以出现在 SELECTFROMWHERE 等子句中,通常用于复杂的查询。

子查询的分类:

  • 标量子查询:返回单个值。
  • 多行子查询:返回多行结果。
  • 多列子查询:返回多列结果。

1. 标量子查询

标量子查询返回一个单独的值,可以用于 SELECTWHERE 等地方。

示例:查询订单总额大于某个值的客户姓名

在这里插入图片描述

在这里插入图片描述

SELECT name
FROM customers
WHERE id IN (SELECT customer_id FROM orders WHERE total > 1000);

在这里插入图片描述

2. 多行子查询

多行子查询返回多个值,通常与 INEXISTS 一起使用。

示例:查询订单总额大于 1000 的客户信息
SELECT * FROM customers
WHERE id IN (SELECT customer_id FROM orders WHERE total > 1000);

在这里插入图片描述

3. 关联子查询

关联子查询是指子查询依赖于外部查询中的某些列。

示例:查询每个客户的订单总额
SELECT name, (SELECT SUM(total) FROM orders WHERE customer_id = customers.id) AS total_amount
FROM customers;

在这里插入图片描述


嵌套查询(Nested Query)

嵌套查询指的是在一个查询的 WHEREFROM 子句中使用另一个查询。

语法

SELECT columns
FROM (SELECT columns FROM table WHERE condition) AS alias;

示例:嵌套查询查询订单和客户信息

SELECT * FROM customers
WHERE id IN (SELECT customer_id FROM orders WHERE total > 1000);

示例:查询订单中客户的详细信息(通过嵌套查询)

SELECT * FROM customers
WHERE id = (SELECT customer_id FROM orders WHERE id = 1);

在这里插入图片描述


优化查询性能的小技巧

  1. 避免在 WHERE 子句中使用计算:如 WHERE YEAR(date) = 2020,最好使用 WHERE date >= '2020-01-01' AND date <= '2020-12-31'
  2. 尽量避免在子查询中使用 SELECT *:在子查询中使用具体的列名比使用 SELECT * 更高效。
  3. 合理使用索引:对 JOIN 操作中的连接条件列创建索引,可以提高查询性能。
  4. 使用 EXPLAIN 分析查询执行计划:在执行查询前使用 EXPLAIN 查看查询的执行计划,发现潜在的性能瓶颈。

示例:使用 EXPLAIN 分析查询性能

EXPLAIN SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.id;

通过 EXPLAIN 可以查看查询的执行计划,找出是否存在全表扫描等低效操作。


小结

在本篇文章中,我们介绍了 MySQL 中的 JOIN子查询嵌套查询,这些是处理复杂查询时不可或缺的工具。掌握这些查询技巧,将帮助你更高效地从数据库中提取和处理多表数据。


📘 下一篇,我们将学习 MySQL 聚合函数与分组查询,深入探讨如何使用聚合函数统计数据并进行分组分析。

http://www.dtcms.com/a/408279.html

相关文章:

  • 在线考试类网站怎么做深圳建站模板购买
  • 自己做网站服务器的备案方法百度点击排名收费软件
  • css常用属性
  • 昆明企业自助建站系统苏州建设培训中心 官网
  • 招投标建设网站的网站网络优化排名培训
  • 网站配色方案 对比色企业管理系统大全免费
  • 如何做棋牌网站网站建设i rsky
  • Mybatis 基本介绍和增删改查
  • 跑流量的网站上海市建设安全协会网站特种工
  • wordpress网站特别卡wordpress批量发文章
  • 企业网站建设联系电话沈阳做网站seo
  • 建设企业网站管理系统目的扬中黄子来
  • 个人网站备案 拍照晨阳seo顾问
  • 引擎网站网站备案流程
  • 做公司标志用哪个网站wordpress全局jquery
  • 网站开发教育培训欧米茄手表官方网
  • 家具flash网站模板下载辽宁网站定制企业
  • 做铝材什么什么网站好汉中网站建设哪家好
  • 计算机应用技术与php网站开发免费注册网站哪个好
  • C++11中的列表初始化,右值引用与移动语义
  • 网站搭建免费视频教程北京网站建设官网
  • 网站建设上市公司养生网站源码下载
  • 【JLink】详细的JLink安装以及使用JLinkRTTViewer的打印调试
  • 港口建设网站WordPress二维码管理插件
  • AEDT支援命令列执行的程式简介
  • 网站qq统计邢台移动网站建设报价
  • 数据结构——静态链表(c语言笔记)
  • 高端网站建设与管理知名的集团门户网站建设费用
  • 公司做网站 优帮云网站建设完成确认书
  • 钢城网站建设医院网站改版建设方案