自己紹介
29歳。文系卒。新卒入社でWebディレクターを2年半経験。
その後は番組の字幕制作の仕事に従事。
現在はエンジニア転職を目指して勉強中。
SQLの印象
データベースを操作する言語で、SELECT文を使って情報を取得する。
そんなぼんやりとした記憶のまま臨みました。
覚えておきたいこと
今後の自分が役立ててくれることを信じて、学んだことをレッスンごとにまとめます。
レッスン1
式の末尾には必ずセミコロンが必要ですが、以降では省略します。
/* カラムの取得 */
SELECT カラム名,カラム名...
FROM テーブル名
/* 全カラムの取得 */
SELECT *
FROM テーブル名
/* 条件指定 */
/* 文字列は""で囲む */
/* 「=」以外にも「>=」などの演算子を使用可能 */
WHERE カラム名 = 条件
/* LIKE演算子 */
/* 指定した文字列を含むカラムを取得 */
/* 前後に「%(ワイルドカード)」を使用可能 */
WHERE カラム名 LIKE "文字列"
/* NOT演算子 */
/* 条件を満たさないデータを取得 */
WHERE NOT カラム名 = 条件
/* NULLの指定 */
WHERE カラム名 IS NULL
/* NULLではない指定 */
WHERE カラム名 IS NOT NULL
/* AND演算子 */
WHERE カラム名 = 条件
AND カラム名 = 条件
/* OR演算子 */
WHERE カラム名 = 条件
OR カラム名 = 条件
/* 並び替え */
/* 「ASC」 昇順*/
/* 「DESC」 降順*/
ORDER BY カラム名 並べ方
/* 必要な数だけ取得 */
LIMIT 数
レッスン2
/* 重複する値を除外*/
SELECT DISTINCT(カラム名)
FROM テーブル名
/* カラム名には四則演算(+,-,*,/)が使用可能 */
SELECT カラム名-カラム名
/* 合計値 */
SELECT SUM(カラム名)
/* 平均値 */
SELECT AVG(カラム名)
/* レコードの数 */
/* NULLはカウントされない */
SELECT COUNT(カラム名)
/* 最大値 */
SELECT MAX(カラム名)
/* 最小値 */
SELECT MIN(カラム名)
/* データのグループ化 */
/* SELECTで使えるのは、GROUP BYに指定しているカラム名と、集計関数のみ */
GROUP BY カラム名,カラム名...
/* HAVING */
/* グループ化から更に絞り込む */
GROUP BY カラム名
HAVING 条件
※実行される順番
WHERE(取得条件)
GROUP BY(グループ化)
SUM...(関数)
HAVING(絞り込み)
レッスン3
/* サブクエリ */
/* 複数のクエリを一つにまとめる */
/* ()内にセミコロンは不要 */
WHERE カラム名 条件演算子 (
クエリ
)
/* カラム名の付与 */
SELECT カラム名 AS "文字列"
/* テーブルを紐づける */
/* ONで結合条件を指定(主キー、外部キーを紐づける) */
/* 外部キーがNULLのレコードも取得するには「LEFT JOIN」を使用 */
SELECT *
FROM テーブルA
JOIN テーブルB
ON テーブルA.カラム名 = テーブルB.カラム名
JOIN... /* 3つ以上のテーブルを結合可能 */
/* 複数テーブルでのカラムの指定 */
SELECT テーブル名.カラム名
※実行される順番
FROM(テーブルの指定)
JOIN(テーブルの結合)
WHERE(取得条件)
GROUP BY(グループ化)
SUM...(関数)
HAVING(絞り込み)
SELECT(検索)
ORDER BY(順序)
LIMIT(件数)
レッスン4
/* レコードの挿入 */
/* idは自動で割り当てられる */
INSERT INTO テーブル名 (カラム名,カラム名...)
VALUES (値,値...)
/* データの更新 */
/* WHEREで更新するレコードを必ず指定する */
UPDATE テーブル名
SET カラム名 = 値,カラム名 = 値...
WHERE id = 値
/* データの削除 */
/* WHEREで更新するレコードを必ず指定する */
DELETE FROM テーブル名
WHERE id = 値
まとめ
SQLはそんなに難しくない…と思っていましたが、実際に問題を出されると手こずる部分がありました。
なんとか試行錯誤(+カンニング)して突破できましたが、基本的なことは一発でバシッと解けるようになりたいです。そのために、定期的に道場レッスンに挑戦しようと思います。DBなんてモロ丁寧に扱わないと危険な代物でしょうし、本番なら試行錯誤なんて絶対にNGですもんね。
間違いがあればご指摘いただけますと幸いです。
今後も継続して学習を続けていきたいと思います。