【2026年9月最新】SQLのSELECT文とは?データベースからのデータ取得を基礎から完全解説|WHERE・ORDER BY・GROUP BYの使い方
「SQLのSELECT文って何をするものなの?」——データベースに触れ始めると、必ず最初にぶつかるのがこの疑問です。
SELECT文は、データベースに保存されている膨大なデータの中から、必要な情報だけを取り出すための命令文です。Excelでいえば「フィルタ機能」と「並べ替え機能」を組み合わせたようなイメージに近く、条件を指定すれば一瞬で目的のデータだけを抜き出せます。
この記事では、SELECT文の基本構文から、条件を絞り込むWHERE、並べ替えるORDER BY、グループごとに集計するGROUP BYまで、実務でよく使う要素を一通り解説します。後半では、弊社(株式会社GENAI)がClaude CodeでSQLの集計・分析作業をどこまで自動化しているかの実例も紹介します。
この記事を最後まで読むと、次のことが分かります。
01 WHAT IS SELECT SELECT文とは何か?データベースの基本操作 Excelの「フィルタ」に近いイメージで理解する
SELECT文は、SQL(Structured Query Language)と呼ばれるデータベース操作専用の言語の中で、データを「取得」するために使う命令です。データベースには売上記録・顧客情報・注文履歴など、膨大な行数のデータが表(テーブル)形式で保存されており、SELECT文を使うことで、その中から必要な部分だけを瞬時に抜き出せます。
📚 用語解説
SQL(Structured Query Language):データベースに対して「データを取り出す」「追加する」「更新する」「削除する」といった操作を行うための専用言語。ExcelでいうところのVBAや関数に近い役割を、データベースの世界で担っています。
📚 用語解説
テーブル:データベース内でデータを格納する「表」の単位。Excelのシート1枚をイメージすると分かりやすく、行(レコード)と列(カラム)で構成されます。
本記事では、以下のような「顧客テーブル(customers)」を例に説明を進めます。
| id | name | department | sales |
|---|---|---|---|
| 1 | 佐藤 | 営業 | 450000 |
| 2 | 鈴木 | 広告 | 280000 |
| 3 | 田中 | 営業 | 620000 |
| 4 | 高橋 | 経理 | 150000 |
1-1. なぜExcelではなくデータベースを使うのか
少量のデータであればExcelでも十分ですが、データ量が数万〜数百万行になると、Excelでは動作が重くなり、複数人での同時編集による不整合も起きやすくなります。データベースは大量データの検索・集計を高速に処理できるよう設計されており、SELECT文はその中核となる操作です。
基本的なSELECT文は数時間の学習で読み書きできるようになります。マーケティング担当者が売上データを自分で集計したり、経営者が顧客数の推移を確認したりする用途でも、SQLの基礎知識は十分に役立ちます。
実際、弊社が業務自動化の導入支援を行う中でも、「Excelでの集計作業に毎週数時間かかっている」という相談を非常に多くいただきます。そうした業務の裏側では、データベースからExcelへ手作業でコピーしてから集計しているケースが大半で、SELECT文でデータベース側にあらかじめ絞り込み・集計をさせてしまえば、その手前の工程自体が丸ごと不要になります。
つまりSQLの基礎知識は、単なる「エンジニアの専門スキル」ではなく、日々の集計業務そのものを短縮する実務スキルとして捉え直すことができます。次の章から、具体的な構文を1つずつ見ていきましょう。
02 BASIC SYNTAX SELECT文の基本構文 「どの列を」「どの表から」取り出すかを指定する
SELECT文の最もシンプルな形は次の通りです。
| 構文 | 説明 |
|---|---|
| SELECT 列名 FROM テーブル名; | 指定した列だけを取得する |
| SELECT 列名1, 列名2 FROM テーブル名; | 複数の列をカンマ区切りで指定する |
| SELECT * FROM テーブル名; | アスタリスク(*)で全ての列を取得する |
2-1. 特定の列だけを取得する
例えば顧客テーブルから名前だけを取り出したい場合、以下のように書きます。
SELECT name FROM customers;
これで customers テーブルの name 列(佐藤・鈴木・田中・高橋)だけが一覧で返ってきます。
2-2. 複数の列を「,」で指定する
複数の列がほしい場合はカンマで区切って列挙します。SELECT name, department FROM customers;と書けば、名前と部署の2列だけが同時に取得できます。
2-3. 「*」で全列を取得する
アスタリスク(*)は「全ての列」を意味する記号です。SELECT * FROM customers;と書くと、id・name・department・salesの全列がそのまま返ってきます。データの全体像を素早く確認したいときに便利ですが、列数が多い大きなテーブルでは処理が重くなるため、必要な列だけを指定する書き方が実務では推奨されます。
本番システムの中で動くプログラムの中では、SELECT *は非推奨とされることが多いです。テーブルに新しい列が追加されたときに、想定外のデータまで取得してしまいシステムの不具合につながるためです。データを一時的に確認する用途に留めるのが安全です。
📚 用語解説
カラム(列)とレコード(行):テーブルにおいて、縦方向のまとまりを「カラム(列)」、横方向の1件分のデータを「レコード(行)」と呼びます。顧客テーブルであれば「name」はカラム、「佐藤さんの1行分の情報」がレコードです。
03 WHERE CLAUSE 「WHERE」で条件を絞り込む 欲しいデータだけをピンポイントで取得する
WHERE句を使うと、条件に合致する行だけを取得できます。SELECT文の後ろにWHERE 条件を追加するだけのシンプルな構文です。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| = | 等しい | WHERE department = '営業' |
| <>(または!=) | 等しくない | WHERE department <> '営業' |
| >, <, >=, <= | 大小比較 | WHERE sales >= 400000 |
| LIKE | あいまい検索(部分一致) | WHERE name LIKE '%田%' |
| IN | 複数候補のいずれかに一致 | WHERE department IN ('営業', '広告') |
| AND / OR | 複数条件の組み合わせ | WHERE department = '営業' AND sales >= 400000 |
例えば「営業部で、売上が40万円以上の人」を取得したい場合は以下のように書きます。
SELECT name, sales FROM customers WHERE department = '営業' AND sales >= 400000;
この条件では、佐藤(45万円)と田中(62万円)の2件が該当します。
📚 用語解説
LIKE演算子とワイルドカード(%):「%」はLIKE演算子と組み合わせて使う特殊記号で、「任意の文字列」を意味します。LIKE '%田%'は「どこかに『田』の文字を含む」という部分一致検索になります。
04 SORT AND GROUP ORDER BY・GROUP BY・ASの使い方 並べ替え・グループ集計・名前付けの3点セット
4-1. ORDER BYで並べ替える
取得したデータを特定の列順で並べ替えたい場合はORDER BY 列名を使います。昇順(小さい順)はASC、降順(大きい順)はDESCを指定し、何も指定しない場合は昇順がデフォルトです。
SELECT name, sales FROM customers ORDER BY sales DESC;
売上が高い順に、田中(62万)→佐藤(45万)→鈴木(28万)→高橋(15万)の順で並び替わります。
4-2. GROUP BYでグループごとに集計する
GROUP BYは、指定した列の値が同じ行同士をひとまとめにし、集計関数と組み合わせて使うのが基本です。代表的な集計関数には、件数を数えるCOUNT、合計を出すSUM、平均を出すAVG、最大値・最小値を出すMAX・MINがあります。
| 集計関数 | 意味 |
|---|---|
| COUNT(*) | 行数(件数)を数える |
| SUM(列名) | 数値列の合計を出す |
| AVG(列名) | 数値列の平均を出す |
| MAX(列名) / MIN(列名) | 数値列の最大値・最小値を出す |
SELECT department, SUM(sales) FROM customers GROUP BY department;
部署ごとの売上合計が一覧で表示されます(営業部門は佐藤・田中の合計で107万円)。
GROUP BYで集計した「後」の結果に対して条件を付けたい場合はWHEREではなくHAVING句を使います。WHEREはグループ化される前の個々の行に対する条件、HAVINGはグループ化・集計された後の条件という違いがあります。例:GROUP BY department HAVING SUM(sales) >= 500000(部署合計が50万円以上のグループだけ表示)。
📚 用語解説
集計関数(COUNT/SUM/AVG/MAX/MIN):複数行のデータをまとめて1つの数値に変換する関数群。GROUP BYと組み合わせることで「部署ごとの合計」「月ごとの平均」といった集計が可能になります。
4-3. ASで名前を付ける
集計結果の列名はデフォルトではSUM(sales)のような分かりにくい表示になります。ASを使うと分かりやすい別名を付けられます。
SELECT department, SUM(sales) AS total_sales FROM customers GROUP BY department;
集計結果の列名が「total_sales」という分かりやすい名前で表示されます。
個々の行を
条件で絞り込む
残った行を
グループ化する
グループごとに
SUM/COUNT等を計算
集計結果を
さらに絞り込む
最終的な順序を
並べ替える
05 JOINING TABLES 複数テーブルを結びつける「JOIN」の基礎 実務のデータベースは1つの表だけでは完結しない
ここまでは「customers」という1つのテーブルだけを扱ってきましたが、実務のデータベースでは複数のテーブルに分かれてデータが保存されているのが一般的です。例えば「顧客情報」と「注文履歴」は別々のテーブルに分けて管理し、必要なときだけ両方をつなげて参照します。このとき使うのがJOINです。
📚 用語解説
JOIN(結合):複数のテーブルを、共通する列(キー)をもとにつなげて1つの結果として取得する仕組み。テーブルを分けて管理しつつ、必要なときだけ関連するデータを一緒に見られるのがデータベース設計の基本的な考え方です。
例えば、顧客テーブル(customers)とは別に、注文テーブル(orders)が以下のように存在するとします。
| order_id | customer_id | amount |
|---|---|---|
| 101 | 1 | 80000 |
| 102 | 3 | 120000 |
| 103 | 1 | 45000 |
注文テーブルの「customer_id」は、顧客テーブルの「id」と対応しています。この共通の列を手がかりに2つのテーブルをつなげるのがINNER JOINです。
📚 用語解説
主キーと外部キー:各テーブルで1件のデータを一意に識別する列を「主キー」(customersテーブルのid)と呼び、他のテーブルの主キーを参照する列を「外部キー」(ordersテーブルのcustomer_id)と呼びます。JOINはこの主キーと外部キーの対応関係を使ってテーブル同士をつなげます。
SELECT customers.name, orders.amount FROM customers INNER JOIN orders ON customers.id = orders.customer_id;
これにより「佐藤・8万円」「田中・12万円」「佐藤・4.5万円」のように、顧客名と注文金額がセットで取得できます。
| 結合の種類 | 説明 |
|---|---|
| INNER JOIN | 両方のテーブルに一致するデータがある行だけを取得(最も基本的なJOIN) |
| LEFT JOIN | 左側のテーブルを全件残し、右側に一致がなければ空欄(NULL)で表示 |
| RIGHT JOIN | 右側のテーブルを全件残し、左側に一致がなければ空欄(NULL)で表示 |
INNER JOINは「両方に一致するデータがある行」しか表示しません。例えば一度も注文したことがない顧客は、INNER JOINの結果からは除外されてしまいます。「注文の有無に関わらず全顧客を表示したい」場合はLEFT JOINを使う必要があります。
5-1. JOINとGROUP BYを組み合わせた実務クエリ
JOINとGROUP BYを組み合わせると、「顧客ごとの注文合計金額」のような、複数テーブルにまたがる集計が可能になります。
SELECT customers.name, SUM(orders.amount) AS total FROM customers INNER JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name;
顧客ごとの注文合計金額(佐藤: 12万5千円、田中: 12万円)が一覧で取得できます。
06 DATA MODIFICATION データの追加・更新・削除 INSERT / UPDATE / DELETEの基礎
SELECT文がデータを「読む」命令であるのに対し、データを「書き換える」ための命令が INSERT・UPDATE・DELETE の3つです。まとめてDML(データ操作言語)と呼ばれます。
📚 用語解説
DML(Data Manipulation Language):データベース内のデータそのものを操作する命令群の総称。SELECT・INSERT・UPDATE・DELETEがこれに該当します。テーブルの構造(列の追加など)を変更するCREATE・ALTERなどは別カテゴリのDDL(データ定義言語)と呼ばれます。
| 命令 | 役割 | 構文の例 |
|---|---|---|
| INSERT | 新しい行を追加する | INSERT INTO customers (name, department, sales) VALUES ('山本', '営業', 300000); |
| UPDATE | 既存の行を更新する | UPDATE customers SET sales = 500000 WHERE name = '鈴木'; |
| DELETE | 行を削除する | DELETE FROM customers WHERE name = '高橋'; |
UPDATE・DELETEでWHERE句を書き忘れると、テーブル内の全ての行が更新・削除されてしまいます。実務での事故で最も多いパターンの一つなので、実行前に必ずWHERE句の有無と条件の正しさを確認してください。
本番データに対してUPDATE・DELETEを実行する前に、同じWHERE条件でSELECT文を実行し、「本当に意図した行だけが対象になっているか」を目視確認してから実行するのが安全な進め方です。
07 GENAI CASE STUDY 【独自データ】Claude CodeでSQL集計を代行させる 弊社が実際にどこまでAIエージェントへ任せているか
弊社(株式会社GENAI)ではClaude Max 20xプラン(月額$200、約30,000円)を契約し、経営・営業・広告・経理・秘書業務に加えてデータ集計・分析業務にもClaude Codeを日常的に使っています。ここでは、SQLの読み書きをAIエージェントにどこまで任せられるかを、実運用の感覚で共有します。
| 作業内容 | 従来の所要時間(目安) | Claude Code活用時 |
|---|---|---|
| 部署別・期間別の売上集計クエリ作成 | 30分〜1時間(構文確認込み) | 数分(日本語で依頼して即実行) |
| 複雑なJOIN・サブクエリの組み立て | 1時間以上(設計の試行錯誤) | 要件を伝えるだけで初稿を提示、微調整のみ人が確認 |
| 集計結果のグラフ化・レポート化 | 数十分〜(別ツールへの転記作業) | クエリ実行から可視化まで一気通貫 |
上記は弊社の肌感ベースの数値であり、データ量やテーブル設計の複雑さによって変動します。あくまで「AIエージェントを集計業務に組み込むとどの程度の体感差が出るか」の参考情報としてご覧ください。
Claude Codeは、SELECT文の組み立てからデータベースへの接続、実行結果の確認、必要に応じたグラフ化までを一連の流れとして行えるエージェント型のAIです。「先月の部署別売上を集計して」「売上が伸びている顧客トップ10を教えて」といった日本語の指示を渡すだけで、必要なSQLを自分で組み立てて実行してくれます。
日本語で
知りたいことを伝える
Claude Codeが
SQLを組み立てる
実行結果を
自動で検証
必要なら
グラフ・レポート化
もちろん、この記事で紹介したSELECT文の基礎を理解している方が、AIが出したクエリや結果を検証する精度は上がります。「何をしているか分かった上で、実際の手数はAIに任せる」というのが、非エンジニアの経営者にとって最も現実的なスタンスです。
6-1. 非エンジニアがAIエージェントに任せる際の注意点
7-1. 「SQLを覚える」から「SQLを検証できる」への転換
弊社でAIエージェントの活用を進める中で見えてきたのは、非エンジニアに求められるスキルセットが変化しているという実感です。以前は「SQLを自分で書けること」が価値でしたが、現在重要なのはAIが出したSQLが正しいかを見極められることです。
この記事で紹介したWHERE・GROUP BY・JOINの基礎知識があれば、Claude Codeが生成したクエリを見て「この条件で本当に欲しいデータが取れているか」「JOINの種類は適切か」を判断できます。SQLを書けるようになる必要はなくても、読める状態になっておくことが、AI時代のデータリテラシーとして重要度を増しています。
まずは「先月の売上を部署別に教えて」といった簡単な依頼からClaude Codeに投げてみてください。返ってきたSQLと結果を見比べながら、この記事で紹介した構文と照らし合わせる練習をすると、SQLへの理解とAI活用の両方が同時に進みます。
08 CONCLUSION まとめ ── SQLの基礎と、データ活用の未来 知識とAI活用は両立する
この記事では、SELECT文の基本構文、WHERE・ORDER BY・GROUP BY・ASの使い方、INSERT/UPDATE/DELETEの基礎、そして非エンジニアが押さえておくべき視点までを整理しました。最後にポイントを振り返ります。
最後にお伝えしたいのは、「SQLを覚えること」と「AIエージェントに任せること」は対立しないという点です。基礎を理解している人ほど、AIの出力を正しく検証でき、結果としてデータ活用のスピードと精度の両方が上がります。
データ集計・分析業務、AIエージェントでどこまで圧縮できるか診断します
売上集計・顧客分析など、目に見えにくい分析工数をどこまでAIに任せられるか。
弊社の実運用ノウハウをベースに、個別に導入設計のご相談を承ります。
ここから先の進め方は、大きく2つあります。
自社で回せるようになりたい方は、AI鬼管理でClaude Code/Codexの使い方から業務設計・社内定着まで伴走を受けながら、社内に仕組みを作る道があります。
覚えるより任せたい方は、AI社員AIKATAでこの記事のような定型業務を丸ごと預ける道があります。料金は月30万円の月額定額、追加費用は0円です。
どちらが合うかは、業務量と社内体制次第です。無料相談・無料適合診断で、貴社の場合はどちらが向くかからご相談いただけます。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
よくある質問
Q. SQLは無料で学べますか?
A. はい、SQLの学習自体に費用は発生しません。MySQLやPostgreSQLなど無料で使えるデータベースソフトが多数あり、自分のPCに環境を構築して練習することができます。
Q. SELECT * とSELECT 列名、どちらを使うべきですか?
A. データの全体像を素早く確認したいときはSELECT *、実務のプログラムやレポートで使う場合は必要な列だけを指定するSELECT 列名が推奨されます。列を明示した方が処理が軽く、後からテーブル構造が変わっても影響を受けにくいためです。
Q. WHEREとHAVINGの違いが分かりません。
A. WHEREはグループ化される前の「個々の行」に対する条件、HAVINGはGROUP BYで集計した「後」の結果に対する条件です。例えば「売上が40万円以上の人」を絞るならWHERE、「部署合計が100万円以上の部署」を絞るならHAVINGを使います。
Q. ORDER BYは複数の列を指定できますか?
A. できます。ORDER BY department, sales DESCのようにカンマで区切ると、最初に部署順で並べ、同じ部署内ではさらに売上の高い順で並べる、といった多段階の並び替えが可能です。
Q. INNER JOINとLEFT JOINはどちらを使えばいいですか?
A. 「両方のテーブルに存在するデータだけでよい」ならINNER JOIN、「片方のテーブルの情報は全件残したい(一致がなくても表示したい)」ならLEFT JOINを使います。例えば「一度も注文していない顧客も含めて全員を表示したい」場合はLEFT JOINが適しています。
Q. UPDATE・DELETEを間違えて実行してしまった場合、元に戻せますか?
A. データベースの設定やバックアップ体制によります。トランザクション機能を使っていてコミット前であればロールバック(取り消し)が可能な場合もありますが、確実なのは事前にバックアップを取っておくことです。実務では実行前のSELECT確認とバックアップの両方を徹底することが推奨されます。
Q. 非エンジニアでもSQLを使えるようになりますか?
A. SELECT文の基本(列指定・WHERE・ORDER BY・GROUP BY)だけであれば、数時間の学習で実務に使えるレベルに到達できます。複雑な集計やパフォーマンスチューニングは経験が必要ですが、日常的なデータ確認レベルであれば非エンジニアでも十分に習得可能です。
Q. ExcelとSQLはどちらを覚えるべきですか?
A. 対立するものではなく併用が前提です。数百行程度の軽い集計・グラフ作成はExcelが手軽で、数万行を超える大量データの絞り込み・集計はSQL(データベース側での処理)が高速かつ正確です。データ量が増えてExcelの動作が重くなってきたら、SQLの学習を検討するタイミングと言えます。
Q. SQLの方言(MySQL・PostgreSQL・SQL Serverなど)で書き方は変わりますか?
A. この記事で紹介したSELECT・WHERE・ORDER BY・GROUP BY・JOIN・INSERT/UPDATE/DELETEの基本構文は、主要なデータベース製品でほぼ共通です。ただし日付関数や文字列操作関数など一部の機能は製品ごとに書き方が異なるため、基礎を押さえた上で使用する製品のドキュメントを確認するのがおすすめです。
Q. Claude CodeにSQL集計を任せる場合、費用はどれくらいかかりますか?
A. 弊社が契約しているClaude Max 20xプランは月額$200(約30,000円)で、データ集計を含む複数の業務用途で共有して使っています。API従量課金とは異なり定額制のため、使えば使うほど追加費用がかさむ心配がない点が導入しやすいポイントです。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
AI鬼管理/AI社員AIKATAへのお問い合わせ
この記事を読んで気になった方へ。
専門スタッフが、御社に最適な
業務自動化・業務代行プランを無料でご提案します。




