ゼロから始めるPHP講座Vol34 データベースの結合〜内部結合〜


ゼロから始めるPHP講座Vol34 データベースの結合〜内部結合〜
目次
  1. ゼロから始めるPHP講座 データベースの結合〜内部結合〜
  2. 内部結合

ゼロから始めるPHP講座 データベースの結合〜内部結合〜

内部結合

正規化により複数のテーブルに分けましたが、共通の値を持つカラムをキーにすることで、リレーショナルデータベースの大きな特徴の1つである、テーブル結合をすることができます。

結合にはいくつ方法があり、次に示すのは内部結合という方法です。php_DB_combination1-639 ONに、2つのテーブルを結びつけるキーとなるカラムを指定します。またカラムを指定する際は、「テーブル名.カラム名」と、間に「.」(ピリオド)を付けて表現します。

例として「order_table」と「customer_table」を「顧客番号(customer_id)」をキーにしたテーブル結合のSQLを次に示します。 php_DB_combination2-639

最初は全レコード選択のほうが理解しやすいため*(アスタリスク)を使用していますが、本来アスタリスクは非推奨です。

phpMyAdminにて実行し、結果を確認してみましょう。php_DB_combination3-639

「order_table」と「customer_table」という2つのテーブルを結合し、レコードを一覧で見ることができました。次にテーブル結合の具体的な内容について、図に示します。

php_DB_combination4-639

「customer_id」の値が一致するレコード同士を結合しています。

order_tableにはcustomer_idが[1]のレコードが2つありますが、どちらもcustomer_tableのcustomer_idが[1]のレコードと結合します。

テーブル結合をすると、結合したテーブルの両方のカラムが、1つのテーブルという扱いになります。

では次に、結合したテーブルから選択するカラムを指定してみましょう。

同じくorder_tablecustomer_tableを顧客番号(customer_id)をキーにして結合し、「注文日(order_date)、名前(customer_name)、支払方法(payment)」を取得する場合のSQLは以下となります。

php_DB_combination5-639

取得するカラムも「テーブル名.カラム名」と「.」(ピリオド)を付けてどちらのテーブルのカラムなのか指定する必要があります。
phpMyAdminにて実行し、結果を確認してみましょう。

php_DB_combination6-639

php_DB_combination7-639

「注文日(order_date)、名前(customer_name)、支払方法(payment)」のみ選択して表示しました。 このように結合したテーブルを1つのテーブルとみなし、取得するカラムを指定します。

次に今回利用した内部結合という方法の具体的な特徴について説明します。

内部結合は「ONの条件に指定したカラムの値が等しいレコードのみ取得」を指定した2つのテーブルから行います。

具体的な理解のため、goods_tableとorder_detail_tableを結合するSQLを作成し、phpMyAdminより実行してみましょう。

php_DB_combination8-639

次に今回行ったテーブル結合の詳細を図に示します。

php_DB_combination9-639

「goods_idに紐づくレコードのみ取得」が内部結合により行われ、結果は6レコードとなりました。

good_idが[3]のレコードは結合テーブルには存在しません。これはorder_detail_tableにgoods_idが[3]のレコードが存在せず「カラム値が等しい」という条件に一致しないためです。

これが内部結合の特徴となります。

NEXT LESSON ☛ データベースの結合〜外部結合〜

PREV LESSON ☛ データベースの設計〜正規化②


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp