2017-03-04 6 views
1

ich MySQL Workbench verwenden, und ich habe folgende Frage:MySQL schließt sich und die Auswahl aus mehreren Tabellen

die Mitarbeiter Daten Erstellen Sie mit Hilfe von Auswahlabfragen, die folgenden Informationen zur Verfügung stellt: zeigt eine Liste der Mitarbeiter und was Abteilung sie sind in

  • Spalten: Mitarbeitername, Name der Abteilung

ich zwei Aussagen haben, die genau die gleiche Rendite bieten, aber es ist 1000 Zeilen! Mache ich das "Join" richtig?

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

und

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

Die zweite Methode ist korrekt. Der erste ist archaisch und schreibt Ihre Fragen in mittleres Englisch. –

+0

Beide sind korrekt, aber der zweite Ansatz ist viel besser lesbar. – jordanwillis

Antwort

2

Tabellen Mitarbeiter und Abteilungen sind immer viele zu viele. Daher brauchen wir eine Eingabetabelle zwischen ihnen, die die Spalten id_emp und id_dep oder öfter 4 Spalten, id_emp, id_dep, from, to hat. Danach ist deine Frage klar und wir können darüber sprechen.

Beispiel: Tabellen:

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 

Hinweis: id_emp & id_dep in Tabelle emp_dep können nicht zusammen Primärschlüssel sein beacause jeder Mitarbeiter oft wieder in derselben Abteilung arbeiten können.

Abfrage auf Tabelle 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; 

Ausgang:

first_name  name 
John   Financial 
Elsa   Human res 

SQL für diese Datenbank erstellen und Tabelle:

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

Beide sind richtig, aber der zweite ist besser.

1

Beide sind gleich. Bei großen Datenmengen wäre die zweite Datei jedoch schneller, spielt aber bei kleinen Tabellen keine Rolle.

Verwandte Themen