我正在使用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;
答案 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)
两者都是一样的。然而,在给定大量数据的情况下,第二个会更快,但在小型桌子上无关紧要。