アットウィキロゴ

DB基礎⑨(テーブル結合・クエリ整形)

▼テーブル結合▼

▼①単純結合(クロス結合 = 掛け算)※全レコードを連結する


SELECT FROM テーブル1,テーブル2

  ※テーブル1のレコード数×テーブル2のレコード数が表示。
    ⇒左から順に表示されていく

例:「staff」テーブルと「section」テーブルを単純結合させよ

SELECT * FROM staff, section;

以下のように表示、

  ⇒単純結合.bmp


▼②等価結合 ※特定キーでレコードを連結(指定したフィールドが同じだったものだけを結合させる)


SELECT FROM テーブル1, テーブル2 WHERE テーブル1. フィールド1 = テーブル2. フィールド2

例:「staff」テーブルの部署番号と、「section」テーブルの部署番号が同じレコードだけを結合させる。

  SELECT * FROM section, staff WHERE staff. section_id = section. section_id;

以下のように表示、

  ⇒等価結合.bmp


▼③内部結合 ※等価結合を性格に記述したもの(INNER JOIN は省略できる)


SELECT * FROM テーブル1 INNER JOIN テーブル2 ON  テーブル1. フィールド1 = テーブル2. フィールド2;

例:「staff」テーブルの部署番号と、「section」テーブルの部署番号が同じレコードだけを結合させる。

  SELECT * FROM staff INNER JOIN section ON staff. section_id = section. section_id;

以下のように表示、

  ⇒等価結合.bmp


▼④外部結合 ※内部結合と違い、等しくないデータ(NULLのデータ)も表示(NULLは、対応するデータがない場合に使用)

   また、左右どちらのテーブルを基準させるかを指示できる。

   ・左を基準にした場合 ※基本的にこちらがスタンダード。
SELECT * FROM staff LEFT JOIN section ON  staff. section_id = section. section_id;

   ・右を基準にした場合
SELECT * FROM staff RIGHT  JOIN section ON  staff. section_id = section. section_id;


例:例:「staff」テーブルの部署番号と、「section」テーブルの部署番号が同じレコードだけを結合させる。
以下のように表示、

  ⇒外部結合.bmp

●クエリ整形

クエリは[[PHP]]、HTML同様少ない文字数でわかりやすく書いたほうが良い。
そのため以下を参考に。

  クエリ整形1 :*(全フィールドを意味する)はSELECT直後に置くと、
      テーブルが二つあった場合は、*のみでテーブル二つ分の全フィールドを指定する。
  SELECT * FROM staff INNER JOIN section ON staff. section_id = section. section_id;
  ※上記の*はstaffとsectionの2テーブルを指定している

  クエリ整形2 :クエリ整形1と同じ結果を表示
  SELECT staff. *, section. * FROM staff INNER JOIN section ON staff. section_id = section. section_id;

  クエリ整形3 :FROMの後のテーブルをAS(エイリアス指定)で簡単なものにし、
	  そのエイリアスを文中のフィールドを指定する際に使用できる。
  SELECT T. *, E. * FROM staff AS T INNER JOIN section AS E ON T. section_id = E. section_id;

  クエリ整形4 :
  SELECT
T. staff_id,
T. name,
T. kana,
T. enter_date,
T. salary,
E. name
  FROM staff AS T
  INNER JOIN section AS E
ON T. section_id = E. section_id;



    • クエリ整形5
SELECT
T. staff_id,
T. name,
T. kana,
T. enter_date,
T. salary,
E. name AS section_name
FROM staff AS T
INNER JOIN section AS E
ON T. section_id = E. section_id;
最終更新:2012年01月19日 23:24
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。