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日

相关文章

  • MongoDB GridFS(二进制数据存储)使用方法详解

    什么是GridFS? MongoDB是一款文档型数据库,存储的数据是以BSON格式保存的。由于文档型数据库的特点,它适合存储小型的数据块,但对于大型的二进制数据,如音频、视频等文件,存储时可能需要分成多个文档进行存储。这种情况下,MongoDB提供了GridFS这个存储引擎。 GridFS是一个存储二进制数据(如图片、音频、视频等)的规范,它将大文件拆分成多…

    MongoDB 2023年3月14日
    00
  • MySQL中Like概念及用法讲解

    MySQL中Like概念及用法讲解 Like的概念 Like是MySQL中的一种用于模糊匹配的关键字,可以对字符串进行模糊查询。它通常和模式匹配符一起使用,以实现更加精确的查询。 常用的模式匹配符包括: % 代表匹配任意个任意字符(包括0个),例如 %cat% 可以匹配 scattered、category、cat 等字符串。 _ 代表匹配单个任意字符,例如…

    database 2023年5月22日
    00
  • Oracle 计算时间格式平均值的sql 语句

    Oracle 计算时间格式平均值的 SQL 语句的攻略分为以下三个部分: 1.转换时间格式 在计算时间格式平均值前,需要将时间字符串转换为时间类型,然后进行计算。可以使用 Oracle 提供的 to_date 函数将字符串类型的时间转换为时间类型。 例如,假设数据表中的 time_column 字段存储的是时间字符串类型的数据,格式为 ‘YYYY-MM-DD…

    database 2023年5月21日
    00
  • mysql 实现添加时间自动添加更新时间自动更新操作

    实现 MySQL 添加时间自动添加更新时间自动更新的方式有两种:使用 DEFAULT 属性和使用 TRIGGER 触发器。下面将分别介绍这两种方法的具体实现步骤: 使用 DEFAULT 属性 使用 DEFAULT 属性可以在插入新记录时自动添加创建时间,通过修改记录时的 SQL 语句来实现更新时间自动更新。下面是具体步骤: 在创建数据表时,在相应字段的定义中…

    database 2023年5月22日
    00
  • MySQL数据备份方法的选择与思考

    MySQL数据备份方法的选择与思考 前言 数据备份在数据库使用过程中是非常重要的,一旦数据发生错误或者被损坏,备份数据可以帮助我们快速恢复数据,避免了数据的丢失和业务停顿的时间。 MySQL提供了多种数据备份方案,不同的备份方案有着不同的优点和缺点,我们应该根据具体情况选择最适合自己的备份方案。本文将介绍MySQL数据备份的常用方案和优缺点,以及如何进行备份…

    database 2023年5月21日
    00
  • mysql主键,外键,非空,唯一,默认约束及创建表的方法

    MySQL是一种非常流行的关系型数据库,主键、外键、非空、唯一和默认值是MySQL中常用的约束,以保证数据的准确性和完整性。下面将对这些约束及创建表的方法进行详细讲解。 MySQL主键 在MySQL中,主键是一种用于唯一标识表中每一条记录的字段或一组字段。每一张表都必须有一个主键,主键可以是单个字段或多个字段的组合。主键的值必须唯一,不允许为空。我们一般可以…

    database 2023年5月18日
    00
  • MySQL 事务autocommit自动提交操作

    MySQL是一种常用的关系型数据库管理系统,提供了多种机制来确保数据的完整性和一致性。其中,事务机制是一种常用的机制,可以确保一组操作作为原子单元执行,要么全部成功,要么全部失败,保证数据的一致性。 事务的自动提交操作是MySQL中的一个重要特性,称为autocommit。当开启autocommit时,每个SQL语句都将作为一个单独的事务提交到数据库中。反之…

    database 2023年5月21日
    00
  • 淘宝客赚钱故事 大三做淘宝客月入10w

    淘宝客赚钱故事:大三做淘宝客月入10万完整攻略 背景 淘宝客是一种通过推广淘宝商品并获得佣金的方式,很多淘客年收入达到数十万甚至上百万。然而,对于很多刚刚接触淘宝客的人来说,如何开始做淘宝客并获得收益有些困难。因此,本文将介绍一名大三学生如何成功做出月入10万元的淘宝客案例,以及他的具体操作方法和技巧,希望能帮助想要尝试淘宝客的新手。 案例分析 这位学生通过…

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