1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

複数のテーブルからデータを取り出す

Last updated at Posted at 2020-11-06

はじめに

SQLの学習を始めるにあたって、備忘録として学習内容を書いていきます

テーブル結合

2つ以上のテーブルからあるカラムの値を基にしてテーブルを連結して、1つの結果として取り出す事をテーブル結合という

テーブル結合には以下のような種類がある

  • 直積結合
  • WHERE句を使用した結合
  • 内部結合
  • 外部結合

カラム名を修飾する

テーブルとテーブルを結合する際に、あるカラムを基に結合するため、少なくとも1つは共通のカラムが存在する必要がある

異なるテーブルだけれど、同じ名前のカラム名を以下のような書き方で示す。

テーブル名.カラム名

テーブルに別名をつける

テーブルを結合する際に「Aテーブル.id」「Aテーブル.name」のようにSQL文を書くと長いテーブル名だと手間がかかり大変

なので、テーブルに別名をつけるとこのデメリットは解消される

FROM句のテーブル名の後ろに半角空白を入力して、テーブルの別名を記述する

直積結合

直積結合とは、各テーブルに存在するレコードの組み合わせ全てを取り出す結合

SELECT カラム名 FROM テーブル名1 CROSS JOIN テーブル名2;

実際に使う場面はほぼない。結合の基礎を知る上では大切

WHERE句を使って結合する

直積結合にWHERE句を追加するとWHERE句に設定した条件の結合を行う事ができる

SELECT カラム名 FROM テーブル名1,テーブル名2 WHERE 結合条件;

書き方としては古い表現ではあるが、現在でも使われている結合方法である

最近ではJOIN句を使って表現する事が多い

条件を満たした行を結合する(内部結合)

WHERE句を使った結合と同様に、指定した結合条件に一致するレコードのみを取り出して結合する方法が内部結合

SELECT カラム名 FROM テーブル名1 (INNER) JOIN テーブル名2 ON 結合条件 (WHERE 取得したいレコードの条件);

条件を満たしていない行も結合する(外部結合)

テーブル名1またはテーブル名2のどちらか一方にしかないレコードも取り出す

SELECT カラム名 FROM テーブル名1 LEFT OUTER JOIN (RIGHT OUTER JOIN) テーブル名2 ON 結合条件 (WHERE 取得したレコードの条件);

基本的に3つ以上のテーブル結合を行う場合は、左側のテーブルを基準に結合していくため、それに適したLEFT OUTER JOINを使う方が良い

自己結合

テーブルには自分自身、つまり同じ名前のテーブルを結合する事ができる。これを自己結合という

この場合はASを用いて別名をつける必要がある。(テーブルに同じな名前のテーブルを結合するので、単純に実行するとカラム名が2つ表示されてしまい、識別できないのでエラーになる)

SELECT カラム名 FROM テーブル名 AS 別名1 JOIN テーブル名 AS 別名2;

自己結合は順位付けを行なう時に有効である

上のSQL文に続けてした文を記述すると
WHERE 別名1.カラム名<=別名2.カラム名 group by 別名1.主キー
で順位が表示される

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?