複数のテーブルを結合する(内部結合)
INNER JOIN句の利用
SELECT * FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.フィールド = テーブル2.フィールド;
select * from SQL注文 inner join SQL商品 on SQL注文.商品ID = SQL商品.商品ID order by 販売ID;
結合元テーブル
実行結果
INNER JOIN句による結合は、お互いのテーブルのキーとなるフィールドに共通する値を元にして行われる。
上の例では「商品ID」フィールドに共通の値を持つデータが結合される。
「SQL注文」テーブルには「11」「12」と言う値があるが、「SQL商品」テーブルには存在しない。
逆に「SQL商品」テーブルには「1」〜「10」の値があるが「SQL注文」テーブルには「4」〜「10」は存在しない。
結合結果を見ると、片方にしか存在しないデータを持つレコードは結合されていない。
このように「お互いのテーブルに存在する値を元に結合する」結合を「内部結合」という。
必要なフィールドのみを抽出する
select SQL注文.販売ID,SQL商品.商品名,SQL商品.単価,SQL注文.販売数 from SQL注文 inner join SQL商品 on SQL注文.商品ID = SQL商品.商品ID order by 1;
結合後の結果に、必要なフィールド情報のみを取得したい場合には「テーブル名.フィールド名」の様に元となるテーブル名とフィールド名を指定する。
別名を利用する
select t1.販売ID,t2.商品名,t2.単価,t1.販売数 from SQL注文 as t1 inner join SQL商品 as t2 on t1.商品ID = t2.商品ID order by 1;
フィールド指定時「テーブル名.フィールド名」とするとSQL分が見にくくなる場合は、テーブルに「別名」をつける。
別名は「テーブル AS 別名」のように指定する。
上の例では「SQL注文」テーブルに「t1」、「SQL商品」テーブルに「t2」と言う別名をつけている。
別名をつけたSQL文内では、本来のテーブル名を使用するとエラーとなる。
以下の文はエラーとなり、図のようなメッセージが表示される。
select SQL注文.販売ID,t2.商品名,t2.単価,t1.販売数 from SQL注文 as t1 inner join SQL商品 as t2 on t1.商品ID = t2.商品ID order by 1;