表から指定した列や行を取り出すSQLの問合せ文。
SELECT 文とは、表から指定した列や行を取り出す SQL の問合せ文のことです。SQL(=データベースを操作する言語)の中でも、データを読み出すときに最もよく使う命令です。
身近な例で考えると、会員名簿から必要な人だけを書き写す作業に似ています。名簿全体(元の表)はそのまま残し、「営業部の人の名前だけ」のように欲しい部分をコピーして新しいリスト(結果表)を作ります。元データを壊さないのが特徴です。
上のツールで▶ボタンを押すと、FROM で表を決め、WHERE で行を絞り、SELECT で列を取り出して結果表ができるまでの流れを順番に確認できます。
SELECT 文の基本の形は、次の3つの部品でできています。
SELECT 列 FROM 表 WHERE 条件
それぞれの役割は次のとおりです。
・SELECT 列:取り出したい列の名前を並べる(すべての列なら * と書く)
・FROM 表:どの表から取り出すかを指定する
・WHERE 条件:取り出す行の条件を書く(省略すると全行が対象)
書く順番は SELECT → FROM → WHERE ですが、コンピュータが内部で処理する順番は FROM → WHERE → SELECT です。先に表を決めて行を絞り、最後に列を取り出す、と覚えると上のツールの流れと一致します。
SELECT 文は、他のさまざまな句を組み合わせることでより細かい問合せができます。代表的なものは次のとおりです。
・WHERE 句:条件に合う行だけに絞り込む(例:WHERE 年齢 >= 30)
・ORDER BY 句:結果を並び替える(昇順 ASC ・降順 DESC)
・GROUP BY 句:同じ値ごとにまとめて集計する(合計や件数を出す)
・HAVING 句:GROUP BY でまとめた後のグループに条件をつける
これらは FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY の順に処理されます。たとえば「営業部の社員を年齢の高い順に並べる」なら、WHERE で営業部に絞ってから ORDER BY で並べ替える、というように組み合わせます。
SELECT 文の操作は、大きく「選択」と「射影」の2つに分けられます。
・選択(行を絞り込む):WHERE 句が担当。「営業部の行だけ」のように、条件に合う行だけを取り出す操作
・射影(列を取り出す):SELECT 句が担当。「名前列と部署列だけ」のように、必要な列だけを取り出す操作
なぜ「射影」という言葉を使うのか。元の表を「スクリーンに映す」とき、不要な列を映さないでおくイメージから来ています。光を当てて一部だけ通すフィルターに似ています。
上の図の例では、元の表(4行×3列)に対して「営業部」で選択し(2行に減る)、「名前・部署」だけを射影した(2列に減る)結果、2行×2列の表が得られています。両方をセットで使うことで、大きな表から本当に必要な部分だけを切り抜けます。
SELECT 文は「書く順番」と「実際に処理される順番」が違います。文法上は SELECT → FROM → WHERE の順で書きますが、コンピュータ内部での処理は逆に近い順番で行われます。
なぜこの順番で処理するのか。まず「どの表から(FROM)」「どの行を(WHERE)」を決めてからでないと、「どの列を取り出すか(SELECT)」を計算できないからです。材料(FROM)を用意して、不要な分を切り落とし(WHERE)、最後に盛り付け(SELECT)するイメージです。
・① FROM:どの表を使うか決める
・② WHERE:行を絞り込む
・③ SELECT:列を取り出す(別名・計算もここ)
・④ ORDER BY:並び替え(最後。SELECT の結果を並べる)
この順番を知っておくと、「なぜ WHERE の中で SELECT の別名が使えないのか」(まだ列を取り出す前だから)といった疑問が自然と解けます。上のツールで▶を押すと、FROM → WHERE → SELECT の流れで表が変化していく様子を確認できます。