SQLの結合について教えてください。


<emp表>
EMPNO DEPNO
----- -----
10000 AAAAA
10001 AAAAA

<dept表>
DEPNO COMMENT
------ -----
AAAAA あ
AAAAA い

上記のような2つの表があります。
これに対し以下のようなSQLを実行すると…

select empno, depno, comment from emp natural join dept

このような↓になるのでしょうか?

EMPNO DEPNO COMMENT
----- ----- --------

10000 AAAAA あ
10000 AAAAA い
10001 AAAAA あ
10001 AAAAA い

回答の条件
  • 1人3回まで
  • 登録:2006/03/27 02:31:19
  • 終了:2006/03/30 11:49:45

回答(3件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数752006/03/27 03:13:29

ポイント40pt

一部誤りがあります。

select empno, depno, comment from emp natural join dept

ではなく

SELECT empno, deptno, comment
FROM emp
NATURAL JOIN dept
ORDER BY empno, comment

と修正(depno->deptno、ORDER BYでソート処理を追加)すれば想定している結果になります。

ご存知かもしれませんが、COMMENTはデータベースオブジェクトに関するコメントを保存するのに使ったりしますので、列名としてはあまりふさわしくないと思います。

(動作上は問題ありません。)

また、使い方にもよると思いますが、deptnoのような項目はPrimary Keyとして設定し、not null、uniqueにしておいた方が良いでしょう。

世代管理をして過去のcommentも残しておきたいような場合は、dept表に列を追加し、世代番号、あるいは有効区分などを持つべきだと思います。

参考になると幸いです。

id:bonlife No.2

回答回数421ベストアンサー獲得回数752006/03/27 09:54:59

ポイント10pt

私が豪快に間違えてました。

deptnoではなく、depnoが正しかったのですね。

混乱させてしまい申し訳ありません。

(よくあるdept表にあるのはdeptnoであるため、思い込みで読み間違ってしまいました。)

質問中にあるSQLで結合自体は問題なくできますが、ORDER BYで並び替えの指定をしておかないと出力順は想定している結果のようにはならないことが多いです。

id:pxb12663 No.3

pxb12663回答回数395ベストアンサー獲得回数142006/03/27 11:49:56

ポイント30pt

私ならこうしますが

SELECT emp.empno,emp.deptno,dept.comment

FROM emp

LEFT JOIN dept

ON emp.deptno=dept.deptno

ORDER BY emp.empno,dept.comment


テーブル(表)名もキチンと付記しておいたほうがトラブルが出る可能性もなくなると思います。

  • id:nil55
    bonfileさん、pxbl2663さん御返信ありがとうございます!


    当方SQL勉強中の身で、結合に自信がなかったので
    質問させていただきました!

    とても勉強になりました。本当にありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません