【せれくとぶん】

SELECT文 とは?

💡 データベースから「データを取り出す」ための基本SQL
📌 このページのポイント
SELECT文 ― SQLによるデータ取得 SELECT name, age FROM users WHERE age >= 20; ↑ 条件に合うデータを取得 実行 usersテーブル id name age ... 1 田中 25 2 鈴木 15 3 佐藤 30 4 高橋 20 取得結果(3件) 田中 25 佐藤 30 高橋 20 SELECT文の構文 SELECT 取得する列 FROM 対象テーブル WHERE 絞り込み条件 ORDER BY, GROUP BY, JOIN なども組み合わせ可
SELECT文のイメージ
ひよこ ひよこ

SELECT文の基本的な書き方を教えて!

ペンギン先生 ペンギン先生

一番シンプルなのは「SELECT * FROM users」で、usersテーブルの全カラム・全行を取得する。特定のカラムだけ欲しいなら「SELECT name, age FROM users」、条件を絞るなら「SELECT * FROM users WHERE age >= 20」みたいに書くよ。

ひよこ ひよこ

SELECT *って使っていいの?

ペンギン先生 ペンギン先生

開発中にデータを確認するときは便利だけど、本番のアプリケーションでは避けたほうがいい。不要なカラムまで取得するとデータ転送量が増えるし、テーブルカラムが追加されたとき想定外のデータが混ざるリスクもある。必要なカラムだけ明示的に指定するのがベスト。

ひよこ ひよこ

SQLの実行順序ってSELECTが最初じゃないの?

ペンギン先生 ペンギン先生

実はSELECTは最後のほうに実行される。書く順番は「SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY」だけど、実行順序は「FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY」。だからWHERE句ではSELECT句で付けたエイリアスは使えない(MySQLは例外的に一部許可している)。

ひよこ ひよこ

DISTINCTって重複排除で便利そうだけど注意点ある?

ペンギン先生 ペンギン先生

DISTINCTは結果から重複行を除去するんだけど、これが必要になる時点でテーブル設計かJOINの書き方を見直したほうがいい場合が多い。JOINの条件ミスで意図せず行が増えているのにDISTINCTで誤魔化すのは危険。そもそもDISTINCTは内部でソートや比較が走るから大量データだと遅い。「なぜ重複しているのか」を先に突き止めるのが正しいアプローチなんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
SELECT文って出てきたら「データベースからデータを取り出すための基本SQL、WHEREで条件を絞ってORDER BYで並べ替え」と思えばだいたいOK!
📖 おまけ:英語の意味
「SELECT」 = 選択する
💬 英語の「select(選ぶ)」そのまま。テーブルから必要なデータを選んで取り出すイメージ
← 用語集にもどる