MySQL七种Join详解让你轻松搞定数据表连接(mysql七种join)

MySQL七种Join详解——让你轻松搞定数据表连接

在SQL语言中,Join操作是进行多表联合查询的重要技巧之一。MySQL中提供了七种不同的join类型,分别是inner join、left join、right join、full outer join、cross join、self join和union join。本文将对这七种Join类型进行详细解释和演示。

1. inner join

inner join又称为等值连接,它是根据两个表中的某个共同的列,将两个表中的数据连接起来。在inner join中,只有两个表中的共同部分会显示,其余没有共同的数据将被忽略掉。如下面的两个表:

表1:employees

| emp_id | first_name | last_name | job_title | salary |

|——-|————|———–|—————-|——–|

| 1 | John | Doe | Manager | 5000 |

| 2 | Jane | Smith | Sales Associate| 3000 |

| 3 | Tom | Jones | Sales Manager | 6000 |

表2:departments

| dept_id | dept_name |

|———|————-|

| 1 | HR |

| 2 | Sales |

| 3 | Operations |

要将这两个表通过emp_id连接起来,可以使用下面的SQL语句:

SELECT *
FROM employees
INNER JOIN departments ON employees.emp_id = departments.emp_id;

2. left join

left join也叫左连接,它会显示左表中的所有记录,并且只显示右表中与左表有共同记录的数据。如果右表中没有与左表匹配的记录,则该部分为空值。如下面的两个表:

表1:employees

| emp_id | first_name | last_name | job_title | salary |

|——-|————|———–|—————-|——–|

| 1 | John | Doe | Manager | 5000 |

| 2 | Jane | Smith | Sales Associate| 3000 |

| 3 | Tom | Jones | Sales Manager | 6000 |

表2:departments

| dept_id | dept_name |

|———|————-|

| 1 | HR |

| 2 | Sales |

要将这两个表通过dept_id连接起来,可以使用下面的SQL语句:

SELECT *
FROM employees
LEFT JOIN departments ON employees.dept_id = departments.dept_id;

3. right join

right join也叫右连接,它与left join正好相反,会显示右表中的所有记录,并且只显示左表中与右表有共同记录的数据。如果左表中没有与右表匹配的记录,则该部分为空值。如下面的两个表:

表1:employees

| emp_id | first_name | last_name | job_title | salary |

|——-|————|———–|—————-|——–|

| 1 | John | Doe | Manager | 5000 |

| 2 | Jane | Smith | Sales Associate| 3000 |

| 3 | Tom | Jones | Sales Manager | 6000 |

表2:departments

| dept_id | dept_name |

|———|————-|

| 2 | Sales |

| 3 | Operations |

要将这两个表通过dept_id连接起来,可以使用下面的SQL语句:

SELECT *
FROM employees
RIGHT JOIN departments ON employees.dept_id = departments.dept_id;

4. full outer join

full outer join也叫全外连接,它会把左右两个表中的所有记录都显示出来,并在没有匹配的记录处填充空值。如下面的两个表:

表1:employees

| emp_id | first_name | last_name | job_title | salary |

|——-|————|———–|—————-|——–|

| 1 | John | Doe | Manager | 5000 |

| 2 | Jane | Smith | Sales Associate| 3000 |

表2:departments

| dept_id | dept_name |

|———|————-|

| 2 | Sales |

| 3 | Operations |

要将这两个表通过dept_id连接起来,可以使用下面的SQL语句:

SELECT *
FROM employees
FULL OUTER JOIN departments ON employees.dept_id = departments.dept_id;

5. cross join

cross join也叫笛卡尔积查询,它是将两个表中的所有数据进行全排列的方式进行连接。如下面的两个表:

表1:employees

| emp_id | first_name | last_name | job_title | salary |

|——-|————|———–|—————-|——–|

| 1 | John | Doe | Manager | 5000 |

| 2 | Jane | Smith | Sales Associate| 3000 |

表2:departments

| dept_id | dept_name |

|———|————-|

| 2 | Sales |

| 3 | Operations |

要将这两个表进行cross join连接,可以使用下面的SQL语句:

SELECT *
FROM employees
CROSS JOIN departments;

6. self join

self join也叫自连接,它主要是用于连接同一个表的不同记录。假如有一个表,里面有一个字段包含了另一个字段的所有值,此时可以使用self join来查询这个表。如下面的表:

表:employee

| emp_id | first_name | last_name | manager_id | salary |

|——-|————|———–|—————-|——–|

| 1 | John | Doe | 3 | 5000 |

| 2 | Jane | Smith | 3 | 3000 |

| 3 | Tom | Jones | -1 | 6000 |

| 4 | Bob | Johnson | 1 | 4000 |

要对这个表进行self join操作,可以使用下面的SQL语句:

SELECT *
FROM employee e1, employee e2
WHERE e1.manager_id = e2.emp_id;

7. union join

union join也叫联合查询,它是将两个或多个查询结果合并成一个结果集合。如下面的两个表:

表1:employees

| emp_id | first_name | last_name | job_title | salary |

|——-|————|———–|—————-|——–|

| 1 | John | Doe | Manager | 5000 |

| 2 | Jane | Smith | Sales Associate| 3000 |

表2:suppliers

| supplier_id | supplier_name | city |

|————-|—————|———|

| 1 | A | London |

| 2 | B | New York|

要将这两个表进行union join操作,可以使用下面的SQL语句:

SELECT first_name, last_name, job_title AS type
FROM employees
UNION
SELECT supplier_name AS first_name, city AS last_name, 'supplier' AS type
FROM suppliers;

总结

MySQL提供了七种不同的Join类型,分别是inner join、left join、right join、full outer join、cross join、self join和union join。掌握这些Join的使用方法,可以让我们轻松搞定数据表连接,提高数据查询效率,同时也能让我们更好地处理数据分析和处理工作。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《MySQL七种Join详解让你轻松搞定数据表连接(mysql七种join)》
文章链接:https://zhuji.vsping.com/182825.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。