2013-02-27 67 views
0

我試圖從MySQL員工示例數據庫中查詢所有數據。 (structurerow counts查詢MySQL員工示例數據庫中的所有數據

我試圖以保留所有表之間的關係的方式做到這一點,但我從來沒有必須最後查詢數據庫,說實話,我迷路了加入等等。我真的很感激任何幫助。

謝謝!


編輯:SQL:

SELECT * 
FROM 
    `employees` 
    LEFT JOIN `salaries` 
     ON `employees`.`emp_no` = `salaries`.`emp_no` 
    LEFT JOIN `dept_manager` 
     ON `employees`.`emp_no` = `dept_manager`.`emp_no` 
    LEFT JOIN `titles` 
     ON `employees`.`emp_no` = `titles`.`emp_no`, 
    JOIN 
     `departments` on `departments` 
     ON `departments`.`dept_no` = `dept_emp`.`dept_no` 

LIMIT 50; 
+0

對不起,迷惑 - 你說說提取數據,然後約聯接。爲什麼不只是獨立拉桌子? – 2013-02-27 15:23:26

+1

只需使用:http://dev.mysql.com/doc/refman/5.1/en/mysqldump。html – 2013-02-27 15:23:33

+0

除非你有一個特定的原因,否則你可以用mysqldump來做這件事,因爲@BenjaminM已經提到過了。 – Raad 2013-02-27 15:24:55

回答

1

試試這個:

SELECT * from -- you can specify fields instead of * 
employees e 
join salaries s on e.emp_no = s.emp_no, 
join titles t on e.emp_no = t.emp_no, 
join dept_emp de on e.emp_no = de.emp_no,depts, 
join departments d on d.emp_no = t.emp_no, 
join dept_manager dm on d.dept_no = dm.dept_no, 
join employees edm on dm.emp_no = edm.emp_no -- second instance of employees to join employee who is a dept manager 
+0

獲取「ERROR 1064(42000):你的SQL語法錯誤;查看與你的MySQL服務器版本相對應的手冊,查看正確的語法,以便在'連接標題t'附近使用e.emp_no = t.emp_no, 加入e.emp_no = de.emp_no,'在第4行'dept_emp de – jrdn 2013-02-27 16:44:19

+0

這是導致錯誤的逗號。但是,部門沒有emp_no - 它有一個dept_id,它與dept_emp表上的dept_id有關。 – jrdn 2013-02-27 16:49:58

+0

並且在改變查詢的部門部分之後它的工作原理!歡呼!非常感謝您的幫助。 – jrdn 2013-02-27 16:51:49

2

我試圖解釋加入簡單越好。假設我們必須存儲一些關係信息:人員(姓名,姓氏)和少量分配給人的電子郵件。

首先 - 我們將人員信息保存在表格人員中。我們需要唯一的行標識符personId,這將使我們能夠將人確切地指向個人數據庫。

table persons 
personId, name, surname 
     1, John, Foo 
     2, Mike, Bar 

當我們有這樣的表格時,我們可以將其他人的電子郵件存儲在其他表中。在這種情況下,創建唯一的行標識符不是必需的,但在所有表中存儲這些行標識符是一種很好的做法。 PersonId字段告訴我們什麼人擁有該電子郵件。

table emails 
emailId, personId, address 
     1,  1, [email protected] 
     2,  1, [email protected] 
     3,  2, [email protected] 
     4,  2, [email protected] 

現在我們可以選擇連接數據。

SELECT persons.Name, persons.Surname, emails.address 
FROM 
    persons 
    join 
    emails 
ON 
    persons.personId = emails.personId 

該查詢將返回數據(地址分配給他們的人)。

John, Foo, [email protected] 
    John, Foo, [email protected] 
    Mike, Bar, [email protected] 
    Mike, Bar, [email protected] 

這是明確的嗎?

如果連接不清楚 - 也許訪問phpcademy.org或newboston.org - 他們有很多關於很多語言和技術的教程,包括SQL。


後來補充:

您也可以加入多個表,就像這樣:

SELECT primarykey, key1,key2, other, fields, detail_t_1.something 
FROM 
    master_t 
JOIN 
    detail_t_1 on detail_t_1 
    ON master_t.key1 = detail_t_1.key1, 

    detail_t_2 on detail_t_2 
    ON master_t.key2 = detail_t_2.key2 

後來補充:

如果有多個 「細節」 行(就像我的例子中的2封電子郵件) - 返回的數據將包含多個人,每個電子郵件地址。

在SQL返回的數據總是以表格的形式,而不是樹形。

+0

謝謝。但是,如果像在這個數據庫中一樣,我有一個僱員表(key:emp_no),薪水錶(key:emp_no),dept_emp(key:emp_no,dept_no)和部門(dept_no),我將如何去加入他們?這是給我最大的麻煩。 – jrdn 2013-02-27 15:38:46

+0

哦,並且dept_emp表可能有許多同一名僱員的條目,如果這有什麼區別的話。 – jrdn 2013-02-27 15:41:38

+0

@jrdnhannah我添加了一些關於多個連接的信息。你問的另外一件事:如果一個「主」行有許多「細節」行 - 你會得到許多重複的主值的行,但不同的細節(見我的「返回數據」的電子郵件 - 有約翰富2次,有兩個不同的電子郵件 – Kamil 2013-02-27 15:46:46