テーブルを結合する
内部結合ともいう
SELECT 取得するカラム名
FROM テーブル名A
JOIN テーブル名B
ON テーブル名A.カラム名 = テーブル名B.カラム名;例
landmarkテーブルとprefuctureテーブルがあるとして2つのテーブルを結合する


SELECT *
FROM landmark //テーブル名Aと
JOIN prefecture //テーブル名Bを
ON landmark.pre_id = prefecture.id //landmarkのpre_idとprefectureのidを基準に結合する
;こんなイメージ

テーブルを結合した際に同じ名前のカラムがあるとエラーになるので“テーブル名.カラム名”でカラム名の前にテーブル名を指定する(WHEREやGROUP BYを使うときも)
サブクエリ
以下のようなテーブルから平均点以上の人のデータを取り出す場合があったとする
| id | name | points |
|---|---|---|
| 1 | 佐藤 | 78 |
| 2 | 鈴木 | 94 |
| 3 | 伊藤 | 87 |
| 4 | 田中 | 71 |
| 5 | 山本 | 90 |
| 6 | 高橋 | 85 |
今までのやり方だとこんな感じで①平均点を出す、②算出した平均点以上のデータを取り出す
/* ①平均点を出す */
SELECT AVG(points) FROM list;
//pointsの平均を出す(平均は84.1667)
/* ②算出した平均点以上のデータを取り出す */
SELECT * FROM list WHERE points>=84.667;
//84.1667点以上のデータを取り出す| id | name | points |
|---|---|---|
| 2 | 鈴木 | 94 |
| 3 | 伊藤 | 87 |
| 5 | 山本 | 90 |
| 6 | 高橋 | 85 |
それを一つの式でやってしまおうというのがサブクエリ
サブクエリはクエリの中で使うクエリのことで、どんどんつなげられるが長いと重くなる
SELECT *
FROM list
WHERE points>=(
SELECT AVG(points)
FROM list
)
;WHEREの中だけでなくSELECTやFROMの中でも使うことができる

コメント