【学習メモ】MySQL(テーブルの結合、サブクエリ)

スポンサーリンク

テーブルを結合する

内部結合ともいう

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を使うときも)

スポンサーリンク

サブクエリ

以下のようなテーブルから平均点以上の人のデータを取り出す場合があったとする

idnamepoints
1佐藤78
2鈴木94
3伊藤87
4田中71
5山本90
6高橋85
listテーブル

今までのやり方だとこんな感じで①平均点を出す、②算出した平均点以上のデータを取り出す

/* ①平均点を出す */
SELECT AVG(points) FROM list;
//pointsの平均を出す(平均は84.1667)

/* ②算出した平均点以上のデータを取り出す */
SELECT * FROM list WHERE points>=84.667;
//84.1667点以上のデータを取り出す
idnamepoints
2鈴木94
3伊藤87
5山本90
6高橋85
listテーブル

それを一つの式でやってしまおうというのがサブクエリ

サブクエリはクエリの中で使うクエリのことで、どんどんつなげられるが長いと重くなる

SELECT * 
FROM list
WHERE points>=(
  SELECT AVG(points)
  FROM list
  )
;

WHEREの中だけでなくSELECTやFROMの中でも使うことができる

コメント