簡體   English   中英

MySQL聯接並從多個表中選擇

[英]MySQL joins and selecting from multiple tables

我正在使用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;

表員工和部門總是很多對很多。 因此,我們需要它們之間的輸入表,該表具有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

注意:表emp_dep中的id_emp和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);

兩者都是正確的,但第二個更好。

兩者都一樣。 但是,考慮到海量數據,第二種方法會更快,但對於小型表而言則無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM