2017-03-04 57 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

兩者都是相同的。然而,如果數據量很大,第二個數據會更快,但在小型表格上並不重要。