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`表
```sqlCREATE 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
```csv10001,1953-09-02,Georgi,Facello,M,1986-06-26
10002,1964-06-02,Bezalel,Simmel,F,1985-11-2110003,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
```csv10001,60117,1986-06-26,1987-06-26
10002,65828,1996-08-03,1997-08-0310003,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语句实现查询结果:
```sqlSELECT e.first_name, e.last_name, d.dept_name, s.salary
FROM employees eINNER JOIN salaries s ON e.emp_no = s.emp_no
INNER JOIN dept_emp de ON e.emp_no = de.emp_noINNER 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三表关联查询实例的解析,我们了解了多表查询的原理和具体实现过程。如果您需要进行多表查询,可以通过以上方式来实现。