0
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.

SQL基本まとめ②(サブクエリ、JOIN、データの挿入・更新・削除)

Last updated at Posted at 2021-06-16

はじめに

Progateで学習したSQLの基本を自分なりにまとめておく。

サブクエリ

2つ以上のクエリを1つにまとめることができる。
サブクエリを含むクエリの場合、サブクエリから実行される。

-- クエリ1 (     -- ()でサブクエリを囲む
--    クエリ2
-- );

SELECT name  -- ウィルより多いゴール数のプレイヤーの名前を取得するクエリ
FROM players
WHERE goals > (
  SELECT goals  -- ウィルのゴール数を取得するサブクエリ
  FROM players
  WHERE name = "ウィル"
);

AS

カラム名に別名を定義できる。

-- カラム名 AS "名前"

SELECT name AS "身長180cm以上の選手"
FROM players
WHERE height >= 180;

JOIN

テーブルを紐づけるために、外部キーと主キーが用意されたカラムを用意する。
同じ数字が入っているレコード同士を紐づける。

JOINを用いて、複数のテーブルを1つに結合する。
JOINを含んだクエリでは、はじめにJOINが実行される。

-- SELECT *
-- FROM テーブルA
-- JOIN テーブルB
-- ON 結合条件
--
-- 結合条件は
-- ON テーブル名.カラム名(外部キー) = テーブル名.カラム名(主キー)
-- で指定する

SELECT *
FROM players
JOIN countries
ON players.country_id = countries.id;

複数テーブルでのカラムの指定

テーブルごとにガラム名が重複している可能性がある。
テーブル名.カラム名
とすることで、同名のカラムでも個別に指定することができる。

SELECT countries.name, SUM(goals)
FROM players
JOIN countries
ON players.country_id = countries.id
GROUP BY countries.name;

LEFT JOIN

通常、外部キーがNULLのレコードは実行結果に表示されない。
LEFT JOINを用いると、FROMで指定したテーブルのレコードを全て取得し、外部キーがNULLでもNULLのまま実行結果に表示される。

SELECT players.name AS "選手名", teams.name AS "前年所属していたチーム"
FROM players
LEFT JOIN teams -- teamsテーブルにはNULLが含まれている
ON players.previous_team_id = teams.id;

3つ以上のテーブルの結合

FROMは一つで、JOINを複数使用して3つ以上のテーブルを結合する。

-- SELECT *
-- FROM テーブルA
-- JOIN テーブルB
-- ON 結合条件
-- JOIN テーブルC
-- ON 結合条件

SELECT *
FROM players
JOIN countries
ON players.country_id = countries.id
LEFT JOIN teams
ON players.previous_team_id = teams.id;

全体の実行順序

  1. テーブルの指定: FROM
  2. 結合: JOIN, ON
  3. 取得条件: WHERE
  4. グループ化: GROUP BY
  5. 関数: COUNT, SUM, AVG, MAX, MIN
  6. HAVING: HAVING
  7. 検索: SElECT, DISTINCT
  8. 順序: ORDER BY
  9. 制限: LIMIT

データの取得・挿入・更新・削除

SELECT(取得)

-- SELECT カラム名1, カラム名2
-- FROM テーブル名;

SELECT name
FROM purchases;

INSERT(挿入)

多くの場合、idカラムにはAUTO INSERT(自動挿入)と呼ばれる機能が使われるため、その値は省略できる。

-- INSERT INTO テーブル名 (カラム名1, カラム名2, カラム名3)
-- VALUES (値1, 値2, 値3); -- 順番通りに挿入される

INSERT INTO students ( name, course)
VALUES ( "Kate", "Java");

UPDATE(更新)

※注意
WHEREで指定しないと、カラム内の全データが更新されるので注意。

  1. SELECT で操作するデータを確認する。
  2. UPDATE でデータを更新する、実行後にデータを戻すことができない。
-- UPDATE テーブル名
-- SET カラム名1 = 値1, カラム名2 = 値2 -- 指定カラムを新しい値にする
-- WHERE カラム名 = 値; -- 更新するレコードをWHEREで指定する

UPDATE students
SET name = "Jordan", course = "HTML"
WHERE id = 6;

DELETE(削除)

レコード を削除する。
※注意
WHEREで指定しないと、カラム内の全データが削除されるので注意。
実行後はレコードを元に戻せない。

-- DELETE FROM テーブル名
-- WHERE カラム名 = 値;

DELETE FROM students
WHERE id = 7;

おわりに

主なやつは大体まとめられたと思う。
次回からは現在勉強しているRuby on Railsチュートリアルについてまとめていきたいと思う。

◀️ SQL基本まとめ① (基本形、集計関数等)

0
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
0
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?