SQLとは?データベース操作に欠かせない言語の基礎知識
SQL(Structured Query Language)とは、データベースを操作するための専用言語です。読み方は「エスキューエル」が一般的ですが、「シークェル」と呼ぶ現場もあります。1970年代にIBMが開発した技術がベースとなっており、現在では世界中のシステムで標準的に使われています。
Webアプリケーション、業務システム、スマートフォンアプリなど、データを扱うほぼすべてのシステムの裏側でSQLが動いています。例えば、ECサイトで商品を検索するとき、SNSでタイムラインを表示するとき、銀行のATMで残高を確認するとき。これらすべての操作でSQLが使われているのです。
SQLの基本構文を習得することは、ITエンジニアとしてのキャリアを築くうえで避けて通れないステップです。プログラマーだけでなく、データアナリストやWebマーケター、さらには営業職でもSQLの知識が求められる場面が増えています。
SQLを学ぶメリットをまとめると、以下のようになります。
- 汎用性が高い:MySQL、PostgreSQL、Oracle、SQL Serverなど、主要なデータベースすべてで基本構文が共通
- 求人需要が大きい:2024年時点でIT求人の約70%以上がSQL知識を歓迎スキルに挙げている
- 学習コストが低い:英語に近い直感的な文法で、プログラミング未経験者でも比較的短期間で習得可能
- 業務効率化に直結:Excelで数時間かかる集計作業がSQLなら数秒で完了することも
株式会社アイティークロスでも、SESエンジニアとして活躍する社員の多くがSQLを日常的に使用しています。大手自動車メーカーや金融機関の案件では、大量のデータを正確に操作するSQLスキルが特に重宝されています。
SQLの基本構文を理解するための前提知識
SQL基本構文を学ぶ前に、押さえておきたい前提知識を整理しましょう。ここを飛ばしてしまうと、構文の意味が表面的な理解にとどまってしまいます。
データベースとテーブルの関係
データベースは「情報を整理して保管する入れ物」です。その中に「テーブル」と呼ばれる表形式のデータが格納されています。Excelに例えると、ブック全体がデータベース、各シートがテーブルに相当します。
テーブルは「カラム(列)」と「レコード(行)」で構成されています。例えば、社員情報テーブルであれば次のような構造になります。
| 用語 | Excelでの例え | 具体例 |
|---|---|---|
| データベース | ブック全体 | company_db |
| テーブル | シート | employees |
| カラム(列) | 列見出し(A列、B列) | id, name, age, department |
| レコード(行) | 各行のデータ | 1, 田中太郎, 28, 開発部 |
SQLの命令分類(4つのカテゴリ)
SQLの命令は、大きく4つのカテゴリに分類されます。まずは全体像を把握しましょう。
| 分類 | 正式名称 | 役割 | 主な命令 |
|---|---|---|---|
| DML | Data Manipulation Language | データの操作 | SELECT, INSERT, UPDATE, DELETE |
| DDL | Data Definition Language | テーブル構造の定義 | CREATE, ALTER, DROP |
| DCL | Data Control Language | 権限の管理 | GRANT, REVOKE |
| TCL | Transaction Control Language | トランザクション制御 | COMMIT, ROLLBACK |
この記事では、実務で最も使用頻度が高いDML(データ操作言語)を中心に、DDLの基本も含めて解説していきます。
学習に使うサンプルテーブル
この記事全体を通して、以下のサンプルテーブル「employees」を使用します。実際に手を動かしながら読み進めていただくと、理解がぐっと深まります。
| id | name | age | department | salary | hire_date |
|---|---|---|---|---|---|
| 1 | 田中太郎 | 28 | 開発部 | 350000 | 2022-04-01 |
| 2 | 佐藤花子 | 32 | 営業部 | 400000 | 2020-10-15 |
| 3 | 鈴木一郎 | 25 | 開発部 | 300000 | 2023-04-01 |
| 4 | 高橋美咲 | 35 | 人事部 | 420000 | 2019-07-01 |
| 5 | 伊藤健太 | 29 | 開発部 | 380000 | 2021-04-01 |
【最重要】SELECT文の基本構文と実践パターン
SQLの基本構文のなかで、最も使用頻度が高いのがSELECT文です。データベースからデータを取得(検索・抽出)するための命令で、実務では全SQL操作の約80%を占めるとも言われています。
SELECT文の基本形
SELECT文の最も基本的な構文は次のとおりです。
SELECT カラム名 FROM テーブル名;
英語として読むと「テーブルからカラムを選択する」という意味になります。SQLは英語に近い文法なので、この感覚を大切にしてください。
全カラムを取得する例:
SELECT FROM employees;
アスタリスク()は「すべてのカラム」を意味します。テーブルの全データを確認したいときに使います。ただし、本番環境で大量データのテーブルに対して安易に使うとパフォーマンスに影響するため、実務では必要なカラムだけを指定する習慣をつけましょう。
特定のカラムだけ取得する例:
SELECT name, department FROM employees;
この場合、名前と部署だけが結果として返されます。
WHERE句で条件を絞り込む
WHERE句は、取得するデータに条件をつけるための構文です。実務で最も活躍する場面が多い句の一つです。
SELECT FROM employees WHERE department = '開発部';
この例では、開発部に所属する社員だけが抽出されます。WHERE句で使える主な比較演算子を整理します。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| = | 等しい | age = 28 |
| != または | 等しくない | department != ‘営業部’ |
| > | より大きい | salary > 350000 |
| < | より小さい | age < 30 |
| >= | 以上 | salary >= 400000 |
| <= | 以下 | age <= 35 |
| BETWEEN | 範囲指定 | age BETWEEN 25 AND 30 |
| LIKE | 部分一致 | name LIKE ‘%田%’ |
| IN | 複数値の一致 | department IN (‘開発部’, ‘営業部’) |
| IS NULL | NULLである | salary IS NULL |
AND・OR・NOTで複数条件を組み合わせる
複数の条件を組み合わせたい場合は、AND(かつ)、OR(または)、NOT(否定)を使います。
AND(両方の条件を満たす):
SELECT FROM employees WHERE department = '開発部' AND age >= 28;
開発部所属で、かつ28歳以上の社員が抽出されます。結果は田中太郎さんと伊藤健太さんの2名です。
OR(いずれかの条件を満たす):
SELECT FROM employees WHERE department = '開発部' OR department = '営業部';
開発部または営業部に所属する社員が抽出されます。
NOT(条件を否定):
SELECT FROM employees WHERE NOT department = '人事部';
人事部以外の社員が抽出されます。
ORDER BYで並び替え
検索結果を特定の順序で表示したい場合は、ORDER BY句を使います。
SELECT FROM employees ORDER BY salary DESC;
ASC(昇順・小さい順)がデフォルトで、DESC(降順・大きい順)を指定すると逆順になります。給与が高い順に社員を表示したい場合はDESCを使います。
複数カラムでの並び替えも可能です。
SELECT FROM employees ORDER BY department ASC, salary DESC;
この例では、まず部署名のアルファベット順に並べ、同じ部署内では給与が高い順に表示されます。
LIMITで取得件数を制限する
大量のデータから先頭の数件だけ取得したいときに使います。
SELECT FROM employees ORDER BY salary DESC LIMIT 3;
給与が高い上位3名だけが取得されます。ページネーション(ページ送り)を実装する際にも欠かせない構文です。
なお、LIMITはMySQL・PostgreSQLで使える構文です。SQL ServerではTOP、OracleではROWNUMやFETCH FIRSTを使います。データベースごとの違いに注意しましょう。
DISTINCTで重複を排除する
SELECT DISTINCT department FROM employees;
重複を除いたユニークな部署名だけが取得されます。結果は「開発部」「営業部」「人事部」の3件です。
INSERT・UPDATE・DELETE|データ操作の基本構文
SELECT文でデータの取得方法を理解したら、次はデータの追加・更新・削除の基本構文を覚えましょう。この3つの操作はCRUD(Create・Read・Update・Delete)の中核であり、あらゆるシステム開発で必須の知識です。
INSERT文:データの追加
テーブルに新しいレコードを追加するための構文です。
基本構文:
INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);
実践例:
INSERT INTO employees (id, name, age, department, salary, hire_date) VALUES (6, '山田次郎', 26, '開発部', 320000, '2024-04-01');
ポイントは、カラムの順序と値の順序を一致させることです。文字列はシングルクォーテーション(’)で囲み、数値はそのまま記述します。
複数レコードを一度に追加する方法:
INSERT INTO employees (id, name, age, department, salary, hire_date) VALUES (7, '中村優子', 30, '営業部', 370000, '2024-04-01'), (8, '小林誠', 27, '開発部', 310000, '2024-04-01');
1件ずつINSERTを実行するよりも、まとめて記述したほうが処理速度が速くなります。大量データの投入時には特に重要なテクニックです。
UPDATE文:データの更新
既存のレコードの値を変更するための構文です。
基本構文:
UPDATE テーブル名 SET カラム名 = 新しい値 WHERE 条件;
実践例:
UPDATE employees SET salary = 400000 WHERE id = 1;
田中太郎さんの給与を400,000円に更新します。
複数カラムを同時に更新する例:
UPDATE employees SET salary = 410000, department = '企画部' WHERE id = 3;
【重要な注意点】WHERE句を忘れると全レコードが更新されます。
UPDATE employees SET salary = 0;
このようにWHERE句なしで実行すると、全社員の給与が0になってしまいます。実務での事故を防ぐため、UPDATE文を実行する前に必ず同じWHERE条件でSELECTを実行し、対象レコードを確認する習慣をつけてください。これは現場のベテランエンジニアも必ず行っている作業です。
DELETE文:データの削除
レコードを削除するための構文です。
基本構文:
DELETE FROM テーブル名 WHERE 条件;
実践例:
DELETE FROM employees WHERE id = 6;
id=6のレコードが削除されます。
【最も危険な操作】WHERE句なしのDELETEは全データ削除です。
DELETE FROM employees;
この一行でテーブル内の全データが消えます。UPDATE文以上に慎重さが求められる操作です。本番環境では必ずトランザクション(BEGIN〜ROLLBACK/COMMIT)を使って安全に操作しましょう。
CRUD操作まとめ
| 操作 | SQL文 | 用途 | 危険度 |
|---|---|---|---|
| Create(作成) | INSERT | 新規データ追加 | 低 |
| Read(読取) | SELECT | データ検索・取得 | なし |
| Update(更新) | UPDATE | 既存データ変更 | 高 |
| Delete(削除) | DELETE | データ削除 | 最高 |
集計関数とGROUP BY|データ分析に必須のSQL基本構文
実務では、単にデータを取得するだけでなく「合計」「平均」「件数」などの集計が頻繁に求められます。ここでは集計関数とGROUP BY句の基本構文を解説します。
主要な集計関数5つ
| 関数 | 機能 | 使用例 | 結果(サンプルデータ) |
|---|---|---|---|
| COUNT | 件数を数える | SELECT COUNT() FROM employees; | 5 |
| SUM | 合計を求める | SELECT SUM(salary) FROM employees; | 1850000 |
| AVG | 平均を求める | SELECT AVG(salary) FROM employees; | 370000 |
| MAX | 最大値を求める | SELECT MAX(salary) FROM employees; | 420000 |
| MIN | 最小値を求める | SELECT MIN(salary) FROM employees; | 300000 |
集計関数は単独でも使えますが、GROUP BYと組み合わせることで真価を発揮します。
GROUP BYでグループごとに集計する
部署ごとの平均給与を出したい場合、GROUP BY句を使います。
SELECT department, AVG(salary) AS avg_salary, COUNT() AS member_count FROM employees GROUP BY department;
実行結果のイメージは次のとおりです。
| department | avg_salary | member_count |
|---|---|---|
| 開発部 | 343333 | 3 |
| 営業部 | 400000 | 1 |
| 人事部 | 420000 | 1 |
ここで使っているASは「別名(エイリアス)」を付けるための構文です。計算結果のカラムにわかりやすい名前を付けることで、結果が読みやすくなります。
HAVINGで集計結果を絞り込む
GROUP BYで集計した結果に対して条件を設定するには、HAVING句を使います。WHERE句はグループ化の前に適用される条件、HAVING句はグループ化の後に適用される条件です。
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) >= 370000;
平均給与が370,000円以上の部署だけが表示されます。WHERE句とHAVING句の使い分けは、SQLの面接でも頻出の質問です。しっかり区別しておきましょう。
SELECT文の実行順序(重要)
SQLは記述順と実行順が異なります。この理解が曖昧だと、思わぬエラーに悩まされます。
- FROM:対象テーブルを決定
- WHERE:行の絞り込み
- GROUP BY:グループ化
- HAVING:グループへの絞り込み
- SELECT:取得カラムの決定
- ORDER BY:並び替え
- LIMIT:件数制限
例えば、WHEREの中でASで定義した別名を使えないのは、WHEREがSELECTよりも先に実行されるためです。実行順序を意識すると、エラーの原因が格段にわかりやすくなります。
テーブル結合(JOIN)の基本構文
実務のデータベースでは、情報が複数のテーブルに分散して保管されています。例えば、社員テーブルと部署テーブルが別々に存在する場合です。これらを横断してデータを取得するために使うのがJOIN(結合)です。
説明のため、もう一つサンプルテーブルを用意します。
departmentsテーブル:
| dept_id | dept_name | floor |
|---|---|---|
| 1 | 開発部 | 5F |
| 2 | 営業部 | 3F |
| 3 | 人事部 | 4F |
| 4 | 経理部 | 4F |
INNER JOIN(内部結合)
両方のテーブルに一致するデータだけを取得します。最も使用頻度が高い結合方法です。
SELECT e.name, e.salary, d.dept_name, d.floor FROM employees e INNER JOIN departments d ON e.department = d.dept_name;
employees テーブルのdepartmentカラムとdepartmentsテーブルのdept_nameカラムが一致するレコードが結合されて表示されます。「e」「d」はテーブルの別名(エイリアス)で、記述を簡潔にするためのテクニックです。
LEFT JOIN(左外部結合)
左側のテーブル(FROM句のテーブル)の全レコードを保持し、右側に一致するデータがない場合はNULLで補完します。
SELECT e.name, d.dept_name, d.floor FROM employees e LEFT JOIN departments d ON e.department = d.dept_name;
もし社員テーブルに「経理部」に所属する社員がいなくても、LEFT JOINなら社員側の全レコードが結果に含まれます。逆に、departmentsテーブルの「経理部」は社員側に対応データがないため表示されません。
RIGHT JOINとFULL OUTER JOIN
RIGHT JOINはLEFT JOINの逆で、右側テーブルの全レコードを保持します。FULL OUTER JOINは両方のテーブルの全レコードを保持します。ただし、実務ではLEFT JOINを使うケースが圧倒的に多いため、まずはINNER JOINとLEFT JOINの2つを確実に使いこなせるようにしましょう。
JOINの選び方フローチャート
- 両方にあるデータだけ欲しい → INNER JOIN
- 左テーブルの全データ+右の一致分が欲しい → LEFT JOIN
- 右テーブルの全データ+左の一致分が欲しい → RIGHT JOIN
- 両テーブルの全データが欲しい → FULL OUTER JOIN
実際の開発現場では、3つ以上のテーブルを結合することも珍しくありません。株式会社アイティークロスが携わる金融機関のシステム案件では、10以上のテーブルを結合する複雑なクエリを書く場面もあります。基本のJOIN構文を完璧にしておくことで、そうした応用にもスムーズに対応できるようになります。
DDL基本構文|テーブルの作成・変更・削除
ここまではデータの操作(DML)を見てきましたが、テーブルそのものを作ったり構造を変更したりするDDL(Data Definition Language)の基本構文も押さえておきましょう。
CREATE TABLE:テーブルの作成
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, department VARCHAR(30), salary INT DEFAULT 0, hire_date DATE );
各カラムには「データ型」と「制約」を設定します。主なものを表にまとめます。
よく使うデータ型:
| データ型 | 用途 | 例 |
|---|---|---|
| INT | 整数 | 年齢、ID |
| VARCHAR(n) | 可変長文字列(最大n文字) | 名前、住所 |
| TEXT | 長い文字列 | 自由記述欄 |
| DATE | 日付 | 入社日 |
| DATETIME | 日付と時刻 | 更新日時 |
| DECIMAL(m,n) | 固定小数点数 | 金額(小数あり) |
| BOOLEAN | 真偽値 | 有効フラグ |
よく使う制約:
| 制約 | 意味 |
|---|---|
| PRIMARY KEY | 主キー(一意かつNULL不可) |
| NOT NULL | NULLを許可しない |
| UNIQUE | 重複を許可しない |
| DEFAULT | デフォルト値を設定 |
| FOREIGN KEY | 外部キー(他テーブルとの関連) |
| AUTO_INCREMENT | 自動採番(MySQL) |
ALTER TABLE:テーブル構造の変更
カラムの追加:
ALTER TABLE employees ADD COLUMN email VARCHAR(100);
カラムの変更:
ALTER TABLE employees MODIFY COLUMN name VARCHAR(100) NOT NULL;
カラムの削除:
ALTER TABLE employees DROP COLUMN email;
DROP TABLE:テーブルの削除
DROP TABLE employees;
テーブルとデータが完全に削除されます。DELETEと違い復元できないため、本番環境では極めて慎重に扱う必要があります。
SQL基本構文でよくあるエラーと対処法
SQL学習中に遭遇しやすいエラーをまとめました。エラーを恐れず、一つずつ原因を特定して解決する経験が上達への近道です。
構文エラー(Syntax Error)
よくある原因:
- セミコロン(;)の付け忘れ
- カンマの過不足
- 予約語のスペルミス(SELCET、FROMの打ち間違い等)
- シングルクォーテーションの閉じ忘れ
対処法:エラーメッセージに表示される行番号の前後を重点的に確認します。SQLエディタの構文ハイライト機能を活用すると、ミスを見つけやすくなります。
カラム名・テーブル名の不一致
「Unknown column」や「Table doesn’t exist」というエラーが表示されます。大文字・小文字の区別はデータベースの設定によって異なるため、命名規則を統一しておくことが重要です。
データ型の不一致
数値型のカラムに文字列を挿入しようとするとエラーになります。INSERT文を書く際は、テーブル定義のデータ型を必ず確認しましょう。
WHERE句の忘れ(UPDATEとDELETE)
これは技術的なエラーではなく「論理的なミス」ですが、最も深刻な結果を招きます。前述のとおり、UPDATE/DELETEの前に必ずSELECTで対象を確認する手順を徹底してください。
NULL関連のトラブル
NULLは「値がない」状態を表す特殊な値です。NULLとの比較には=ではなくIS NULLまたはIS NOT NULLを使う必要があります。
SELECT FROM employees WHERE salary IS NULL;
「salary = NULL」と書いても結果は返ってきません。これはSQLの仕様で、NULLとの=比較は常にUNKNOWN(不明)になるためです。初心者がつまずきやすいポイントなので、しっかり覚えておきましょう。
まとめ|SQL基本構文マスターへのロードマップ
この記事では、SQLの基本構文を体系的に解説してきました。最後に要点を整理します。
- SQLはデータベース操作の共通言語であり、IT業界で働くなら必須のスキル
- SELECT文が最重要。WHERE、ORDER BY、GROUP BY、HAVINGを組み合わせて柔軟なデータ取得ができる
- INSERT・UPDATE・DELETEのCRUD操作はシステム開発の基本。特にUPDATE・DELETEはWHERE句の付け忘れに注意
- 集計関数(COUNT、SUM、AVG、MAX、MIN)とGROUP BYでデータ分析が可能
- JOIN(結合)は複数テーブルを扱う実務で不可欠。INNER JOINとLEFT JOINを優先的にマスター
- DDL(CREATE、ALTER、DROP)でテーブル構造を定義・変更・削除できる
- エラーは成長のチャンス。エラーメッセージを読み、原因を特定する力がエンジニアの実力に直結する
SQLの基本構文は、繰り返し書いて試すことで確実に身につきます。オンラインの無料SQL実行環境(MySQL Playground、SQLFiddle、DB Fiddleなど)を活用して、この記事のサンプルコードを実際に動かしてみてください。
さらにスキルを深めたい方は、サブクエリ(副問合せ)、ウィンドウ関数、インデックス設計といった中級・上級トピックへの学習を進めることをおすすめします。Pythonとの連携やAWS上でのデータベース構築に関する知識も、エンジニアとしての市場価値を大きく高めます。
株式会社アイティークロスでは、SQLをはじめとするデータベース技術を活用した案件を多数保有しています。Java、PHP、Python、JavaScriptといった言語とSQL を組み合わせたシステム開発が中心で、大手自動車メーカーや金融機関、官公庁など幅広い業界のプロジェクトに参画可能です。名古屋市中区栄に拠点を構え、個人の希望を100%ヒアリングしたうえで案件を決定する方針をとっています。異業種からの転職者も5割以上在籍しており、充実した研修制度でSQL未経験からでもスキルアップできる環境が整っています。年間休日125日、残業月平均12.3時間と、ワークライフバランスも重視した働き方が可能です。IT転職やエンジニアとしてのキャリアアップに興味のある方は、ぜひお気軽にご相談ください。
よくある質問(FAQ)
SQLの基本構文は初心者でもどのくらいの期間で習得できますか?
SELECT、INSERT、UPDATE、DELETEの基本的なCRUD操作であれば、毎日1〜2時間の学習で2〜4週間程度で習得できます。GROUP BYやJOINなどの応用構文まで含めると1〜3ヶ月が目安です。重要なのは座学だけでなく、実際にSQL文を書いて実行する実践練習を繰り返すことです。
SQLとMySQLの違いは何ですか?
SQLはデータベースを操作するための言語(プログラミング言語のようなもの)です。一方、MySQLはSQLを使って操作するデータベース管理システム(DBMS)の一つです。他にもPostgreSQL、Oracle Database、SQL Serverなどがあり、これらすべてのDBMSでSQLが共通言語として使われています。基本構文はほぼ共通ですが、一部の関数や拡張機能はDBMSごとに異なります。
WHERE句とHAVING句の違いは何ですか?
WHERE句はGROUP BYによるグループ化の前に適用される条件です。個々の行に対して絞り込みを行います。一方、HAVING句はGROUP BYでグループ化した後に適用される条件で、集計結果に対して絞り込みを行います。例えば「部署ごとの平均給与が30万円以上の部署だけ表示」という条件はHAVING句で記述します。
SQLの学習におすすめの無料ツールはありますか?
ブラウザ上でSQLを実行できるDB Fiddle、SQLFiddle、MySQL Playgroundなどが手軽でおすすめです。ローカル環境で学びたい場合はMySQL Community Edition(無料)やPostgreSQLをインストールして使えます。また、Progate、SQLZoo、LeetCodeなどのオンライン学習サービスも初心者に人気があります。
SQLのスキルはどのような職種で役立ちますか?
SQLはプログラマーやシステムエンジニアはもちろん、データアナリスト、Webマーケター、プロジェクトマネージャー、品質管理担当など幅広い職種で役立ちます。近年ではデータドリブン経営が重視されており、営業職や経理職でもSQLを使ってデータ分析を行う企業が増えています。IT業界だけでなく、製造業や金融業界でもSQL人材の需要は高まっています。
SQL未経験でもSESエンジニアとして働けますか?
はい、SQL未経験からSESエンジニアになることは十分可能です。株式会社アイティークロスでは在籍エンジニアの5割以上が異業種からの転職者で、充実した研修制度によりSQLやプログラミングの基礎からスキルアップできる環境が整っています。個人の希望を100%ヒアリングしたうえで案件が決定されるため、段階的にスキルを伸ばしながらキャリアを築くことができます。
INNER JOINとLEFT JOINはどちらをよく使いますか?
実務ではどちらも頻繁に使いますが、用途によって使い分けます。INNER JOINは両テーブルに一致するデータだけが必要な場合に使います。LEFT JOINは左側テーブルの全データを保持しつつ、右側テーブルの情報を付加したい場合に使います。例えば、注文データがない顧客も含めて一覧表示したい場合はLEFT JOINを選択します。まずはこの2つを確実に理解しておけば、大半の実務に対応できます。
コメント