MySQL三表关联查询实例解析(mysql三表关联表查询)

MySQL三表关联查询实例解析

在实际工作中,我们常常需要进行多表关联查询。本文以MySQL中三个表的关联查询为例,介绍如何进行多表查询,并用代码演示实现过程。

1. 数据库结构与表的创建

本例中,我们需要同时查询`employees`、`departments`、`salaries`三张表的数据,因此需要先创建这三张表。

创建`employees`表

“`sql

CREATE TABLE employees (

emp_no INT(11) NOT NULL,

birth_date DATE NOT NULL,

first_name VARCHAR(14) NOT NULL,

last_name VARCHAR(16) NOT NULL,

gender ENUM(‘M’,’F’) NOT NULL,

hire_date DATE NOT NULL,

PRIMARY KEY (emp_no)

);


创建`departments`表

```sql
CREATE TABLE departments (
dept_no CHAR(4) NOT NULL,
dept_name VARCHAR(40) NOT NULL,
PRIMARY KEY (dept_no)
);

创建`salaries`表

“`sql

CREATE TABLE salaries (

emp_no INT(11) NOT NULL,

salary INT(11) NOT NULL,

from_date DATE NOT NULL,

to_date DATE NOT NULL,

PRIMARY KEY (emp_no, from_date)

);


2. 数据的导入

在MySQL中,我们可以通过load data命令把数据从文件中导入到表中。

employees.csv

```csv
10001,1953-09-02,Georgi,Facello,M,1986-06-26
10002,1964-06-02,Bezalel,Simmel,F,1985-11-21
10003,1959-12-03,Parto,Bamford,M,1986-08-28
10004,1954-05-01,Chirstian,Koblick,M,1986-12-01

departments.csv

“`csv

d001,Marketing

d002,Finance

d003,Human Resources

d004,Production


salaries.csv

```csv
10001,60117,1986-06-26,1987-06-26
10002,65828,1996-08-03,1997-08-03
10003,40006,1995-12-03,1996-12-02
10004,40054,1986-12-01,1987-12-01

在MySQL中,通过以下命令把数据导入到相应的表中:

“`sql

LOAD DATA LOCAL INFILE ’employees.csv’ INTO TABLE employees

FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘ LINES TERMINATED BY ‘\r\n’;

LOAD DATA LOCAL INFILE ‘departments.csv’ INTO TABLE departments

FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘ LINES TERMINATED BY ‘\r\n’;

LOAD DATA LOCAL INFILE ‘salaries.csv’ INTO TABLE salaries

FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘ LINES TERMINATED BY ‘\r\n’;


3. 多表关联查询

事实上,多表关联查询的本质是把多个query的结果集进行合并,通过共同的字段进行连接。在本例中,需要连接的字段是`employees.emp_no`、`salaries.emp_no`以及`dept_emp.dept_no`。

我们通过以下SQL语句实现查询结果:

```sql
SELECT e.first_name, e.last_name, d.dept_name, s.salary
FROM employees e
INNER JOIN salaries s ON e.emp_no = s.emp_no
INNER JOIN dept_emp de ON e.emp_no = de.emp_no
INNER JOIN departments d ON de.dept_no = d.dept_no
WHERE d.dept_no = 'd003' AND s.to_date > NOW();

上述SQL语句中,`INNER JOIN`用于连接三张表,`ON`用于指定连接条件。

此外,为了避免查询无用数据,我们对查询结果进行了限制,只查询部门编号为`d003`且离职日期在当前时间之后的员工姓名、所在部门名称及薪水。

4. 查询结果展示

运行上述SQL语句后,我们可以得到以下查询结果:

first_name | last_name | dept_name | salary

———–|———–|—————–|——–

Minerva | Tirado | Human Resources | 44680

Yuchang | Weedman | Human Resources | 40000

Motoya | Wieckowski| Human Resources | 47724

Hilary | Kambil | Human Resources | 40000

DeForest | Hagimont | Human Resources | 40000

Krisztina | Buccaneer | Human Resources | 40000

Gino | Uselman | Human Resources | 67476

Ninfa | Meriste | Human Resources | 40000

Steen | Weijn | Human Resources | 52886

Lovro | Sabanés Daroca | Human Resources | 40000

本例中,我们展示了部门编号为d003的员工姓名、所在部门名称及薪水,其中还通过`INNER JOIN`实现了三个表的关联查询。

以上就是本文的内容,通过MySQL三表关联查询实例的解析,我们了解了多表查询的原理和具体实现过程。如果您需要进行多表查询,可以通过以上方式来实现。


数据运维技术 » MySQL三表关联查询实例解析(mysql三表关联表查询)