Mysql中Join的使用实例详解

MySQL 中 JOIN 的使用实例详解

什么是 JOIN

在 MySQL 中,JOIN 操作是将两个或多个表连接起来,通过某些关联条件来获取数据的过程。JOIN 操作是所有 SQL 查询中最常用和最重要的操作之一。MySQL 支持不同类型的 JOIN,包括 INNER JOIN,LEFT JOIN,RIGHT JOIN 等等。

JOIN 的语法

MySQL JOIN 的语法如下:

SELECT column1, column2, ...
FROM table1
JOIN table2 ON condition

其中,condition 是一个逻辑表达式,用于将 table1 和 table2 之间的关联列进行匹配。可以在 condition 中使用 =<><<=>>= 等逻辑操作符。

JOIN 的类型

MySQL 中支持多种类型的 JOIN,包括 INNER JOIN,LEFT JOIN,RIGHT JOIN 和 FULL OUTER JOIN。下面分别对这些 JOIN 操作进行详细的介绍。

INNER JOIN

INNER JOIN 也被称为等值连接操作,它是通过一个条件表达式在两个或多个表之间进行连接。这个条件表达式可以是任意逻辑操作符,但通常使用等号操作符。

SELECT column1, column2, ...
FROM table1
INNER JOIN table2 ON condition

LEFT JOIN

LEFT JOIN 操作返回左表中的所有记录,以及右表中符合条件的记录。如果右表中没有匹配的记录,则会填充 NULL 值。

SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON condition

RIGHT JOIN

RIGHT JOIN 与 LEFT JOIN 相反,返回右表中的所有记录,以及左表中符合条件的记录。如果左表中没有匹配的记录,则会填充 NULL 值。

SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2 ON condition

FULL OUTER JOIN

FULL OUTER JOIN 返回两个表中的所有记录,如果有不匹配的记录,则会在另一个表中填充 NULL 值。

SELECT column1, column2, ...
FROM table1
FULL OUTER JOIN table2 ON condition

JOIN 的示例

示例一

假设有两个表 studentsscores,其中 students 表包含学生的基本信息,scores 表包含学生的考试成绩。

CREATE TABLE students (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(25),
  gender VARCHAR(10),
  age INT
);

INSERT INTO students (name, gender, age)
VALUES
  ('Tom', 'male', 19),
  ('Lucy', 'female', 18),
  ('Lily', 'female', 20),
  ('John', 'male', 22);

CREATE TABLE scores (
  id INT AUTO_INCREMENT PRIMARY KEY,
  student_id INT,
  course_name VARCHAR(25),
  score INT
);

INSERT INTO scores (student_id, course_name, score)
VALUES
  (1, 'Math', 80),
  (1, 'English', 75),
  (2, 'Math', 90),
  (2, 'English', 85),
  (3, 'Math', 85),
  (3, 'English', 90),
  (4, 'Math', 75),
  (4, 'English', 70);

现在需要查询 students 表和 scores 表中的数据,并将它们组合在一起,以便于分析每个学生的成绩。具体的 SQL 如下:

SELECT students.name, students.gender, students.age, scores.course_name, scores.score
FROM students
LEFT JOIN scores
ON students.id = scores.student_id;

运行以上 SQL 语句,我们就可以看到每个学生的基本信息以及他们参加的考试和成绩。

+------+--------+-----+------------+-------+
| name | gender | age | course_name | score |
+------+--------+-----+------------+-------+
| Tom  | male   |  19 | Math       |    80 |
| Tom  | male   |  19 | English    |    75 |
| Lucy | female |  18 | Math       |    90 |
| Lucy | female |  18 | English    |    85 |
| Lily | female |  20 | Math       |    85 |
| Lily | female |  20 | English    |    90 |
| John | male   |  22 | Math       |    75 |
| John | male   |  22 | English    |    70 |
+------+--------+-----+------------+-------+

示例二

假设现在有两个表 orderscustomers,其中 orders 表记录客户的订单信息,customers 表记录客户的基本信息。现在需要查询每个订单的信息,并将订单信息与客户信息进行关联,以便于分析客户的消费情况。具体的 SQL 如下:

CREATE TABLE orders (
  id INT AUTO_INCREMENT PRIMARY KEY,
  customer_id INT,
  total_amount DECIMAL(10, 2),
  purchase_date DATE
);

INSERT INTO orders (customer_id, total_amount, purchase_date)
VALUES
  (1, 100.00, '2021-01-01'),
  (2, 200.00, '2021-01-03'),
  (3, 300.00, '2021-01-05'),
  (4, 150.00, '2021-01-10'),
  (1, 50.00, '2021-01-15'),
  (3, 250.00, '2021-01-20'),
  (2, 300.00, '2021-01-25');

CREATE TABLE customers (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(25),
  gender VARCHAR(10),
  age INT
);

INSERT INTO customers (name, gender, age)
VALUES
  ('Tom', 'male', 19),
  ('Lucy', 'female', 18),
  ('Lily', 'female', 20),
  ('John', 'male', 22);

现在我们可以使用以下 SQL 语句查询订单信息以及对应的客户信息:

SELECT orders.id, customers.name, customers.gender, customers.age, orders.total_amount, orders.purchase_date
FROM orders
JOIN customers
ON orders.customer_id = customers.id;

运行以上 SQL 语句,我们将得到以下结果:

+----+-------+--------+-----+--------------+---------------+
| id | name  | gender | age | total_amount | purchase_date |
+----+-------+--------+-----+--------------+---------------+
|  1 | Tom   | male   |  19 | 100.00       | 2021-01-01    |
|  2 | Lucy  | female |  18 | 200.00       | 2021-01-03    |
|  3 | Lily  | female |  20 | 300.00       | 2021-01-05    |
|  4 | John  | male   |  22 | 150.00       | 2021-01-10    |
|  1 | Tom   | male   |  19 | 50.00        | 2021-01-15    |
|  3 | Lily  | female |  20 | 250.00       | 2021-01-20    |
|  2 | Lucy  | female |  18 | 300.00       | 2021-01-25    |
+----+-------+--------+-----+--------------+---------------+

总结

MySQL 中的 JOIN 操作对于实现表之间的关联查询非常重要,可以在表之间进行复杂的关联查询,从而更好地进行数据分析和处理。在编写 JOIN 操作时,不同的 JOIN 类型有着不同的功能和语法,需要根据具体的查询需求进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql中Join的使用实例详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL创建表操作命令分享

    MySQL是一款常用的数据库管理系统,用于存储和管理数据。创建表是MySQL数据库中的一个重要的基本操作。在此,我将分享MySQL创建表操作命令的完整攻略,包括必要的语法和示例。 语法 创建MySQL表的语法如下所示: CREATE TABLE table_name ( column1 datatype constraints, column2 dataty…

    database 2023年5月22日
    00
  • MYSQL数据库-约束

    约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。 MYSQL中,常用的几种约束: 约束类型: 主键 默认值 唯一 外键 非空 关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL ===============================================…

    MySQL 2023年4月13日
    00
  • Windows下使用Gogs搭建Git服务器

    下面是详细讲解“Windows下使用Gogs搭建Git服务器”的完整攻略。 准备环境 系统要求 Windows 系统 Git for Windows 安装Gogs 下载Gogs:在Gogs官网下载最新的Windows安装包(zip格式)。 解压Gogs:将下载好的zip包解压到想要安装的目录。 启动Gogs:双击解压目录下的gogs.exe即可启动Gogs。…

    database 2023年5月22日
    00
  • scrapy数据存储在mysql数据库的两种方式(同步和异步)

    Scrapy是一个用于爬取网页并提取数据的Python框架。在爬取数据后,我们需要把数据保存到数据库中进行后续处理,使其更方便的进行分析和应用。Scrapy支持将数据存储到多种不同类型的数据库中,其中包括MySQL。在MySQL数据库中,Scrapy数据存储的主要方式是同步和异步。 同步方式 同步方式是指将数据存储到MySQL数据库时,采用常规的同步方式,遵…

    database 2023年5月18日
    00
  • mysql运维——分库分表

    1. 介绍 问题分析: 随着互联网以及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。分库分表的中心…

    MySQL 2023年4月13日
    00
  • 也许是被忽略的update语句(update技巧)

    当我们开发网站或者其他软件时,经常需要对数据库中的数据进行修改。而更新数据最常用的方法就是使用 UPDATE 语句。但是有时候我们可能会犯一些错误,比如操作数据表时,我们可能会忽略掉 update 语句。本文将详细讲解“也许是被忽略的update语句(update技巧)”的完整攻略。 1. update 语句的作用 update 语句可以用于更新数据库表中的…

    database 2023年5月21日
    00
  • 细说MySQL死锁与日志二三事

    细说MySQL死锁与日志二三事 死锁 概念 死锁是指两个或多个事务在执行过程中,因争夺资源而相互等待,导致所有事务都无法继续执行的一种情况。 原因 死锁通常是由于多个事务同时获取了部分资源,然后等待其他事务释放资源,从而导致无法继续执行。例如,事务A获取了资源X并等待资源Y,同时事务B获取了资源Y并等待资源X,这时发生死锁。 解决方法 重启MySQL服务,这…

    database 2023年5月22日
    00
  • Nginx0.5.33+PHP5.2.5(FastCGI)搭建胜过Apache10倍的Web服务器

    欢迎来到本站,下面是搭建Nginx0.5​.33+​PHP5.2.5​(​FastCGI​)​的完整攻略: 步骤一:安装Nginx软件 安装编译工具 yum install -y gcc automake autoconf libtool gcc-c++ pcre-devel zlib-devel openssl-devel 下载并解压Nginx软件包 wg…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部