2017-03-04 60 views
1

我使用MySQL工作台进行选择,我有以下问题:MySQL的加入,并从多个表

使用的员工数据,创建选择查询,将提供以下信息: 员工展示什么名单部门他们在

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

我有两个报表时提供完全相同的回报,但它是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; 
+1

第二种方法是正确的。第一个是古老的,喜欢用中古英语写你的疑问。 –

+0

两者都是正确的,但第二种方法更具可读性。 – jordanwillis

回答

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 & id_dep表emp_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

两者都是相同的。然而,如果数据量很大,第二个数据会更快,但在小型表格上并不重要。