MySQL连接并从多个表中进行选择

时间:2017-03-04 18:35:33

标签: mysql

我正在使用MySQL Workbench,我有以下问题:

使用员工数据,创建将提供以下信息的选择查询: 显示员工列表以及他们所在的部门

  • 列:员工姓名,部门名称

我有两个语句提供完全相同的返回,但它是1000行!我这样做“加入”了吗?

SELECT 
    departments.dept_name, employees.last_name, employees.first_name 
FROM 
    departments, employees
WHERE 
    departments.dept_name = employees.departments.dept_name;

SELECT
    dept_name, last_name, first_name
FROM
    departments
INNER JOIN
    employees
ON
    departments.dept_name = employees.departments.dept_name;

3 个答案:

答案 0 :(得分:2)

表员工和部门总是多对多。因此,我们需要它们之间的输入表,它具有列id_emp和id_dep或更多通常为4列,id_emp,id_dep,from,to。在那之后,你的问题很明确,我们可以谈论。

实施例: 表:

employees                     emp_dep                     departments
id_emp   first_name           id  id_emp  id_dep          id_dep   name
1        John                  1   1        1               1      Finacial
2        Elsa                  2   2        2               2      Human res

注意:id_emp&表emp_dep中的id_dep不能组成主键,因为每个员工可以在同一个部门再次工作多次。

查询3表:

SELECT  e.first_name, 
        d.name
FROM    (employees e
        INNER JOIN emp_dep ed ON e.id_emp = ed.id_emp)
INNER JOIN departments d ON ed.id_dep = d.id_dep;

输出:

first_name     name
John           Financial
Elsa           Human res

用于创建此数据库和表的SQL:

CREATE DATABASE employees_dep;
CREATE TABLE employees (id_emp INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(10));
CREATE TABLE departments (id_dep INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10));
CREATE TABLE emp_dep (id int AUTO_INCREMENT PRIMARY KEY, id_emp INT, id_dep INT);

答案 1 :(得分:1)

两者都是正确的,但第二种更好。

答案 2 :(得分:1)

两者都是一样的。然而,在给定大量数据的情况下,第二个会更快,但在小型桌子上无关紧要。