- 更新日: 2017年03月08日
- 公開日: 2015年12月08日
ゼロから始めるPHP講座Vol34 データベースの結合〜内部結合〜
ゼロから始めるPHP講座 データベースの結合〜内部結合〜
内部結合
正規化により複数のテーブルに分けましたが、共通の値を持つカラムをキーにすることで、リレーショナルデータベースの大きな特徴の1つである、テーブル結合をすることができます。
結合にはいくつ方法があり、次に示すのは内部結合という方法です。 ONに、2つのテーブルを結びつけるキーとなるカラムを指定します。またカラムを指定する際は、「テーブル名.カラム名」と、間に「.」(ピリオド)を付けて表現します。
例として「order_table」と「customer_table」を「顧客番号(customer_id)」をキーにしたテーブル結合のSQLを次に示します。
最初は全レコード選択のほうが理解しやすいため*(アスタリスク)を使用していますが、本来アスタリスクは非推奨です。
phpMyAdminにて実行し、結果を確認してみましょう。
「order_table」と「customer_table」という2つのテーブルを結合し、レコードを一覧で見ることができました。次にテーブル結合の具体的な内容について、図に示します。
「customer_id」の値が一致するレコード同士を結合しています。
order_tableにはcustomer_idが[1]のレコードが2つありますが、どちらもcustomer_tableのcustomer_idが[1]のレコードと結合します。
テーブル結合をすると、結合したテーブルの両方のカラムが、1つのテーブルという扱いになります。
では次に、結合したテーブルから選択するカラムを指定してみましょう。
同じくorder_tableとcustomer_tableを顧客番号(customer_id)をキーにして結合し、「注文日(order_date)、名前(customer_name)、支払方法(payment)」を取得する場合のSQLは以下となります。
取得するカラムも「テーブル名.カラム名」と「.」(ピリオド)を付けてどちらのテーブルのカラムなのか指定する必要があります。
phpMyAdminにて実行し、結果を確認してみましょう。
「注文日(order_date)、名前(customer_name)、支払方法(payment)」のみ選択して表示しました。 このように結合したテーブルを1つのテーブルとみなし、取得するカラムを指定します。
次に今回利用した内部結合という方法の具体的な特徴について説明します。
内部結合は「ONの条件に指定したカラムの値が等しいレコードのみ取得」を指定した2つのテーブルから行います。
具体的な理解のため、goods_tableとorder_detail_tableを結合するSQLを作成し、phpMyAdminより実行してみましょう。
次に今回行ったテーブル結合の詳細を図に示します。
「goods_idに紐づくレコードのみ取得」が内部結合により行われ、結果は6レコードとなりました。
good_idが[3]のレコードは結合テーブルには存在しません。これはorder_detail_tableにgoods_idが[3]のレコードが存在せず「カラム値が等しい」という条件に一致しないためです。
これが内部結合の特徴となります。
NEXT LESSON ☛ データベースの結合〜外部結合〜
PREV LESSON ☛ データベースの設計〜正規化②
- この記事を書いた人
- CodeCampus編集部