SQLはリレーショナルデータベースを操作する標準言語。SELECT・JOIN・インデックス・トランザクションを現役エンジニアが実例コード付きで解説します。
SQL(Structured Query Language)とは、リレーショナルデータベース(RDB)のデータを操作・検索・定義するための標準言語です。1970年代にIBMが開発し、現在はMySQL・PostgreSQL・SQLite・Oracle・SQL Serverなど主要なデータベースすべてで共通して使用されます。バックエンド開発・データ分析・インフラ問わず、エンジニアが必ず習得すべき基礎スキルの一つです。
SELECT name, age FROM users WHERE age >= 30 ORDER BY age DESC;
INSERT INTO users (name, age) VALUES ('田中', 28);
UPDATE users SET age = 29 WHERE id = 1;
DELETE FROM users WHERE id = 1;
JOINは複数のテーブルを結合して一度に取得する最重要機能です。技術面接で頻出します。
両テーブルに一致するレコードのみ取得。最もよく使う。
SELECT u.name, o.product
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
左テーブルの全レコード+右テーブルの一致分。注文がないユーザーも取得したい時。
SELECT u.name, o.product
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
インデックスは検索を高速化するためのデータ構造です。本の索引と同じ仕組みで、WHERE句でよく絞り込む列にインデックスを貼ると、全行スキャン(フルスキャン)なしに高速に検索できます。
インデックスの注意点:インデックスはSELECTを速くするがINSERT/UPDATE/DELETEを遅くする。すべての列に貼るのは逆効果。WHEREやJOINのON句に頻出する列を優先して設定する。
トランザクションとは複数のSQL操作をひとまとめにして、「全部成功か全部失敗か」を保証する仕組みです。銀行の振込処理(口座Aから引き落とし→口座Bへ入金)の途中でエラーが起きてもデータが壊れないようにします。
Web開発ではどちらも広く使われますが、近年はPostgreSQLの採用が増えています。SQL文法は大部分が共通なので、どちらから始めても基礎は転用できます。転職・就職を見据えるなら求人要件を確認して決めましょう。
N+1問題とは、1件のクエリで取得したN件のレコードに対してさらにN回クエリを発行してしまうパフォーマンス問題です。例えばユーザー一覧を取得(1回)→各ユーザーの注文を個別取得(N回)= 合計N+1回のクエリ。JOINやEager Loadingで解決します。
SQLインジェクションは悪意あるSQL文を入力して不正なデータ操作を行う攻撃です。対策はプレースホルダ(プリペアドステートメント)の使用が基本。ORMを使うと自動的に対策されます。ユーザー入力を直接SQL文に埋め込んではいけません。
ITエンジニア向け転職サービス2強を並行利用するのが最も効果的です。
※どちらも完全無料。登録だけで市場価値を確認できます。