1

MySQLEmployeesサンプルデータベースからすべてのデータをクエリしようとしています。(構造行数

すべてのテーブル間の関係を維持する方法でこれを実行しようとしていますが、これまでデータベースにクエリを実行する必要はありませんでした。正直なところ、結合などで迷子になっています。助けていただければ幸いです。

ありがとう!


編集: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;
4

2 に答える 2

2

結合をできるだけ簡単に説明するようにしています。

いくつかの関係情報を保存する必要があるとしましょう: 個人 (名前、姓) と個人に割り当てられたいくつかの電子メール。

まず、person 情報を table person に保存します。一意の行識別子が必要ですpersonId。これにより、人物データベース内の正確な人物を指すことができます。

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

このようなテーブルがある場合、他のテーブルに個人のメールを保存できます。この場合、一意の行識別子を作成する必要はありませんが、これらの行識別子をすべてのテーブルに格納することをお勧めします。PersonId フィールドは、その電子メールの所有者を示しています。

table emails
emailId, personId, address
      1,        1, john.foo@company.com
      2,        1, john.foo@goomail.com
      3,        2, mike.bar@company.com
      4,        2, mike.bar@yaaho.com

これで、join を使用してデータを選択できます。

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

そのクエリはデータ (住所が割り当てられた人物) を返します。

  John, Foo, john.foo@company.com
  John, Foo, john.foo@goomail.com
  Mike, Bar, mike.bar@company.com
  Mike, Bar, mike.bar@yaaho.com

それは明らかですか?

ジョインがよくわからない場合は、phpcademy.org または thenewboston.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 つの電子メールのように)、返されるデータには、各電子メール アドレスを持つ 1 人の人物が複数回含まれます。

SQL では、返されるデータは常にツリーではなくテーブルの形式です。

于 2013-02-27T15:34:27.117 に答える
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
于 2013-02-27T16:34:03.113 に答える