Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 86

Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 105

[SQL基本]テーブル結合の使い方

mysql, データベース


Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 86

Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 105

今回複雑なSQL文を使う機会があり、サブクエリ・テーブル結合など様々なSQLの構文を書くことになりました。実装の段階で基本的なSQL文の知識しかありませんでした。調べて作ることができたものの理解が不十分であると実感していますので、調べてまとめようと思います。

以前SQLについて記事を書きましたので、そちらも参考にしてもらえると良いと思います。
mysqlの初期設定
mysqlユーザ追加
mysqlの仕組み
mysqlの仕組み(1)
mySQLのEXPLAINについて調べた

内部結合(INNER JOIN)

結合する2つのテーブルから指定したカラムの値が一致するレコードのみを結合する方法が内部結合になります。

SELECT テーブル.列名1... 
FROM テーブル1
JOIN テーブル2
ON テーブル1.カラム=テーブル2.カラム

deviceList

iddevicecompanyId
1mac1
2iphone1
3xperia2
desktop pc3

companyList

idcompanyIdname
11Apple
22Sony
SELECT deviceList.device,deviceList.companyId,companyList.name
FROM deviceList
INNER JOIN companyList
ON deviceList.companyId = companyList.Id;

連結キーで2つのテーブルを結合して、共通に存在する列のみを出力しています。

devicecompanyIdname
mac1Apple
iphone1Apple
xperia2Sony

外部結合 (OUTER JOIN)

外部結合では、2つのテーブルを結合してレコードを取得します。指定したそれぞれのテーブルのカラムの値が一致するデータだけではなく、片方のテーブルにだけ値が存在する場合も含めて取得することになります。

左外部結合、右外部結合、全外部結合

外部結合では、左外部結合や右外部結合や全外部結合が存在しています。それぞれ優先度から使い分けが必要となる。

左外部結合(LEFT JOIN)

select * from table1 left join table2 on...

上のようなSQL文が存在している時に、left joinを基準にして、左側のテーブルにあたる”table1″が優先となり、table1の行は全て出力されることになる。

右外部結合

select * from table1 right join table2 on...

上のSQLの場合、right joinを基準にして、右側のテーブルに当たる”table2″が優先となり、table2の上が全て出力されることになる。

まとめ

これまで、内部結合、外部結合を使ったことは何回かありましたが、しっかり理解せずに使っていた部分があったので、今後使う機会がたくさんあると思いますので、しっかり理解した上で使っていきたいと思います。