RDB/SQL復習①からの続きです。
サブクエリ
sample1.sql
①マイケルの得点数を取得する
SELECT goals
FROM players
WHERE name = "マイケル";
sample2.sql
②取得した結果を自分で入力する
SELECT name
FROM players
WHERE goals > 20;
サブクエリを使った場合、以下のようにまとめることができる。
SQL
# サブクエリが実行された後に外側にあるクエリが実行される
SELECT name
FROM players
WHERE goals > (
SELECT goals
FROM players
WHERE name = "マイケル"
);
AS
ASを使うことで、カラム名などに別名を定義できる
SQL
SELECT goals AS "マイケルの得点数"
FROM players
WHERE name = マイケル";
JOIN
複数のテーブルを一つに結合したい時にJOINを使う。
ONで条件を指定して、テーブルAにテーブルBを結合する
SQL
SELECT *
FROM テーブルA
JOIN テーブルB
ON 結合条件;
SQL
SELECT *
FROM players (テーブルA)
JOIN countries (テーブルB)
ON players.country_id = countries.id; (テーブルA.カラム名 = テーブルB.カラム名)
JOINの実行順序
SQL
SELECT * #②結合された後にSELECTが実行される
FROM players
JOIN countries #①まずは最初にテーブルを結合する
ON players.country_id = countries.id;
複数テーブルでのカラムの指定
SQL
SELECT players.name, countries.name #テーブル名を指定することで取得するカラムを指定できる
FROM players
JOIN countries
ON players.country_id = countries.id;
SQL
SELECT *
FROM players
JOIN countries
ON players.country_id = countries.id
WHERE players.name = "マイケル" #WHEREでもテーブル名を指定することで、取得するカラムを指定できる
全体の実行順序
①テーブルの指定 FROM ②テーブルの結合 ON JOIN ③取得条件 WHERE ④グループ化 GROUP BY ⑤関数 COUNT,SUM,AVG,MAX,MIN ⑥HAVING ⑦検索 SELECT,DISCINCT ⑧順序 ORDER BY ⑨LIMITLEFT JOIN
LEFT JOINを使うと、FROMで取得したテーブルのレコードを全て取得する。
外部キーがNULLのレコードもNULLのまま、実行結果に表示される。
SQL
SELECT *
FROM players
LEFT JOIN teams #LEFT JOINを使うと、もととなるテーブルのレコードを全て取得する
ON players.previous_team_id = teams.id;
複数テーブルのJOIN
SQL
# JOINを複数回使用しても、FROMは一度だけ書けばOK
SELECT *
FROM players
JOIN countries
ON players.country_id = countries.id
LEFT JOIN teams
ON players.previous_team_id = teams.id;
INSERT
テーブルにレコードを挿入したい時、INSERTを使う
SQL
INSERT INTO students (id, name, course)
VALUES (8, "Taro", "Ruby");
AUTO INCREMENT
多くの場合、idカラムにはAUTO INCREMENTという機能が使われる。 AUTO INCREMENTのカラムは省略可能SQL
#id はAUTO INCREMENTであり、省略可能
INSERT INTO students (name, course)
VALUES ("Taro", "Ruby");
UPDATE
UPDATEでデータの更新ができる。複数変更したいカラムがある場合は、コンマで区切る。 WHEREで更新するレコードを指定しないとカラム内の全データが更新されてしまうので、注意!SQL
UPDATE students
SET name = "Michael", course = "JavaScript"
WHERE id = 5; #更新するレコードをWHEREで指定する
DELETE
DELETEでレコードの削除ができる。 WHEREで削除するレコードを指定しないとテーブル内の全レコードが削除されてしまうので、注意!SQL
DELETE FROM students
WHERE id = 9; #削除するレコードをWHEREで指定する
CREATE TABLE
SQL
CREATE TABLE テーブル名();
RDB/SQL復習以上