データベースを扱う場面で必ず出てくるのが「クエリ」と「SQL」という言葉です。どちらもデータベース操作に関わる用語ですが、「違いをあまり分かっていない」「どうやって学習を進めると良いかわからない」と感じる方も多いのではないでしょうか。
この記事では、以下の内容を図解とコード例付きで解説します。
この記事で学べること:
- クエリとSQLの違い
- SQLの基本的な仕組み(対話型・埋込み型)
- SQLの4つの種類(DDL・DML・DCL・TCL)
- 基本のCRUD操作(SELECT・INSERT・UPDATE・DELETE)の書き方
AIがコードを生成する時代だからこそ、SQLの基礎を自分で理解しておくことが大切です。「何となく動いている」ではなく、「何をしているか自分で判断できる」状態を目指して、一緒に学んでいきましょう。
クエリとは何か?SQLとの違い
クエリとはデータベースに対して処理を要求する命令文のことで、SQLはその命令文を書くための言語です。それぞれの意味を整理すると、以下のようになります。
| 用語 | 説明 |
|---|---|
| クエリ | データベースに指示を出す命令文 |
| SQL | リレーショナルデータベースを操作するための言語 |
SQLは「どの言語で書くか」、クエリは「書かれた文そのもの」を指します。たとえば、「Nice to meet you.」は英語で書かれた挨拶文です。同じように、SELECT * FROM users; はSQLで書かれたクエリ(SQL文)という関係になります。
SQLで書かれたクエリは、DBMS(データベース管理システム)に送られます。DBMSがクエリの内容を解釈し、データの抽出や更新といった処理を実行する仕組みです。

SQLの仕組み
SQLを使ったデータベース操作には、命令の送り方やDBMSとの関係など、押さえておきたい基本の仕組みがあります。
SQLを使ってデータベースを操作する方法
SQLでデータベースに命令を送る方法は、対話型と埋込み型の2種類です。
| 方法 | 特徴 |
|---|---|
| 対話型 | コマンドラインなどでSQL文を直接入力し、1文ずつ結果を確認しながら操作する方法 |
| 埋込み型 | PythonやJavaなどのプログラムにSQL文を組み込み、連続した処理や複雑な操作を自動で実行する方法 |
対話型は、データの確認や簡単な操作に適しています。一方、埋込み型はWebアプリケーションや業務システムなど、データベース操作をシステムの一部として組み込みたい場面で使われます。
SQLを実行するDBMSとは
DBMS(データベース管理システム)とは、データベースの作成・管理・操作を一括して担うソフトウェアです。SQLはANSI(米国規格協会)やISO(国際標準化機構)によって標準規格が定められており、基本的な書き方はどのDBMSでも共通です。ただし、製品ごとに独自の構文や挙動の違いがあるため、異なるDBMSへの移行時は注意が必要です。
SQLの種類
SQLは用途に応じて、DDL・DML・DCL・TCLの4種類に分類されます。それぞれ役割が異なるため、目的に応じて使い分けます。
| 分類 | 正式名称 | 役割 |
|---|---|---|
| DDL | データ定義言語 | テーブルの作成・変更・削除など、データベースの構造を定義 |
| DML | データ操作言語 | データの取得・追加・更新・削除など、データそのものを操作 |
| DCL | データ制御言語 | ユーザーへのアクセス権限の付与・取消 |
| TCL | トランザクション制御言語 | トランザクション(一連の処理)の確定・取消 |
DDL:データ定義言語
DDL(Data Definition Language)は、データベースの構造を定義するための言語群です。テーブルの作成や変更、削除といった操作が含まれます。
| SQL文 | 説明 |
|---|---|
| CREATE | 新規データベースやテーブルの作成 |
| DROP | データベースやテーブルの削除 |
| ALTER | データベースやテーブルの構造変更 |
| TRUNCATE | テーブル内の全データを一括削除 |
DML:データ操作言語
DML(Data Manipulation Language)は、データの取得・追加・更新・削除を行うための言語群です。日常的なデータベース操作の大部分はDMLに該当します。
| SQL文 | 説明 |
|---|---|
| SELECT | データの取得 |
| INSERT | データの追加 |
| UPDATE | データの更新 |
| DELETE | データの削除 |
なお、複数のテーブルを組み合わせてデータを取得するJOIN句も、SELECT文と一緒に使われるDMLの一部です。
また、SELECTはデータの変更を伴わない操作のため、DQL(Data Query Language:データ問い合わせ言語)として独立した分類で扱われることもあります。
DCL:データ制御言語
DCL(Data Control Language)は、データベースへのアクセス権限を制御するための言語群です。誰がどのデータを操作できるかを管理する役割を持ちます。
| SQL文 | 説明 |
|---|---|
| GRANT | ユーザーへの権限付与 |
| REVOKE | ユーザーの権限取消 |
TCL:トランザクション制御言語
TCL(Transaction Control Language)は、トランザクションの制御を行うための言語群です。トランザクションとは、データベースに対する一連の処理をひとまとまりとして扱う仕組みを指します。
| SQL文 | 説明 |
|---|---|
| BEGIN | トランザクションの開始 |
| COMMIT | 処理内容の確定 |
| ROLLBACK | 処理内容の取消(変更前の状態に戻す) |
| SAVEPOINT | トランザクション内に中間地点を設定 |
たとえば銀行の振込処理では、データの整合性を担保するため、「送金元の残高を減らす」と「送金先の残高を増やす」を1つのトランザクションとして扱います。COMMITで両方の処理をまとめて確定し、問題があればROLLBACKで元に戻します。
SQLを学ぶ環境を準備する
SQLを学ぶには、実際にSQL文を書いて実行できる環境が必要です。環境の準備方法は大きく分けて2つあります。
Webサービスで試す
ブラウザ上でSQLを実行できるサービスを利用すれば、環境構築なしで手軽にSQLの練習ができます。学習中にSQL文の動作を確認したいときに便利です。
-
エンベーダー
ハンズオン形式でSQLを使ったデータベース操作を学習できるサービスです。実際の環境に近い形で操作できるため、実践的なスキルが身につきます。

-
paiza.io
複数のプログラミング言語に対応したオンライン実行環境です。SQLもブラウザ上で手軽に実行できます。
-
DB Fiddle
SQL文をその場で書いて実行できるサービスです。作成したクエリをURLで共有できるため、チームでの確認にも便利です。
ローカル環境にデータベースを作成する
オープンソースのDBMSをインストールすることで、自分のPC上にデータベース環境を構築できます。初心者にはMySQLがおすすめです。
MySQLは操作がシンプルで、世界で最も利用されているオープンソースのDBMSです。解説記事やコンテンツが豊富なため、困ったときに情報を調べやすい点もメリットです。
SQL文を書いて学ぶ:CRUD操作
ここからは実際にSQL文を書いて、データベースを操作してみましょう。なお、本記事ではMySQLを使用して解説します。データベース操作の基本となるのがCRUDです。
CRUDとは、Create(作成)・Read(読み出し)・Update(更新)・Delete(削除)の頭文字を取った用語で、以下のSQL文に対応しています。
| 処理 | 内容 | SQL文 |
|---|---|---|
| Create | 作成・登録 | CREATE, INSERT |
| Read | 読み出し | SELECT |
| Update | 更新 | UPDATE |
| Delete | 削除 | DELETE |
今回は以下のような生徒データを作成・操作していきます。

CREATE:テーブル作成
CREATE TABLE文は、データベースに新しいテーブルを定義・作成するためのSQL文です。テーブルを作成する際は、カラム名とデータ型をあわせて定義します。
データ型とは、カラムに保存するデータの形式のことです。よく使われるデータ型は以下の通りです。
| データ型 | 説明 |
|---|---|
| INT | 整数を扱うデータ型 |
| DOUBLE | 浮動小数点を扱うデータ型 |
| TEXT | 長い文字列を扱うデータ型 |
| CHAR(n) | 固定長の文字列を扱うデータ型。nは指定桁数 |
| VARCHAR(n) | 可変長の文字列を扱うデータ型。nは最大桁数 |
| DATETIME | 日付と時刻を扱うデータ型 |
データ型に加えて、カラムの制約も設定できます。
| 制約 | 説明 |
|---|---|
| UNIQUE | 同じ値の重複を禁止 |
| NULL / NOT NULL | 空のデータを許容するか指定(未指定の場合はNULL) |
| PRIMARY KEY | レコードを一意に識別するカラムに設定(UNIQUE+NOT NULLが自動適用) |
| AUTO_INCREMENT | データ追加時に値を自動で連番付与 |
基本的な構文は以下の通りです。SQL文の末尾には必ず;(セミコロン)を付けます。
CREATE TABLE テーブル名 (カラム名 データ型 制約, ...);
実際にテーブルを作成してみましょう。
CREATE TABLE students(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
club VARCHAR(30)
);
DESC文でテーブルの定義を確認できます。
DESC students;
-- 実行結果
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(20) | NO | | NULL | |
| club | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
INSERT:データの追加
INSERT文は、テーブルにデータを追加するためのSQL文です。基本的な構文は以下の通りです。
INSERT INTO テーブル名 (列1, 列2, ...) VALUES (値1, 値2, ...);
先ほど作成したstudentsテーブルにデータを追加してみましょう。
INSERT INTO students (id, name, club) VALUES (1, '田中', 'サッカー部');
INSERT INTO students (id, name, club) VALUES (2, '伊藤', '野球部');
INSERT INTO students (id, name, club) VALUES (3, '山田', '吹奏楽部');
INSERT INTO students (id, name, club) VALUES (4, '鈴木', 'バレー部');
SELECT:データ取得
SELECT文は、テーブルからデータを取得するためのSQL文です。基本的な構文は以下の通りです。
SELECT 取得する列名 FROM テーブル名;
すべての列を取得する場合は*(アスタリスク)を使用します。
SELECT * FROM students;
-- 実行結果
+----+------+------------+
| id | name | club |
+----+------+------------+
| 1 | 田中 | サッカー部 |
| 2 | 伊藤 | 野球部 |
| 3 | 山田 | 吹奏楽部 |
| 4 | 鈴木 | バレー部 |
+----+------+------------+
特定の列だけを取得したい場合は、列名をカンマ区切りで指定します。
SELECT id, name FROM students;
-- 実行結果
+----+------+
| id | name |
+----+------+
| 1 | 田中 |
| 2 | 伊藤 |
| 3 | 山田 |
| 4 | 鈴木 |
+----+------+
* はすべてのデータを取得できて便利ですが、大規模なデータベースでは取得に時間がかかることがあります。必要な列名を指定するか、条件式を付与して適切にデータを取得しましょう。
また、複数のテーブルを結合してデータを取得したい場合は、SELECT文にJOIN句を組み合わせて使用します。JOINの詳しい使い方については、別の記事で解説しています。
UPDATE:データ更新
UPDATE文は、テーブル内の既存データを更新するためのSQL文です。基本的な構文は以下の通りです。
UPDATE テーブル名 SET カラム名 = 値 WHERE 条件式;
WHEREで更新対象のレコードを指定します。条件を指定しない場合、すべてのレコードが更新されてしまうため注意が必要です。
山田さんの部活を「美術部」に変更してみましょう。
UPDATE students SET club = '美術部' WHERE name = '山田';
SELECT文で更新結果を確認します。
SELECT * FROM students WHERE name = '山田';
-- 実行結果
+----+------+--------+
| id | name | club |
+----+------+--------+
| 3 | 山田 | 美術部 |
+----+------+--------+
補足:
今回はわかりやすさのためにname列を条件に指定しましたが、同姓同名のデータが存在する場合、意図しないレコードまで更新・削除されてしまいます。実務では、一意の値であるPRIMARY KEY(今回はid)を条件に使用するのが基本です。
-- idを条件にした構文例
UPDATE students SET club = '美術部' WHERE id = 3;
DELETE:データ削除
DELETE文は、テーブルからデータを削除するためのSQL文です。基本的な構文は以下の通りです。
DELETE FROM テーブル名 WHERE 条件式;
WHEREで条件を指定しない場合、テーブル内のすべてのデータが削除されてしまいます。DELETE文を実行する前に、SELECT文で削除対象のデータを確認しておきましょう。
-- SELECT文で削除対象を確認
SELECT * FROM students WHERE name = '伊藤';
-- 実行結果
+----+------+--------+
| id | name | club |
+----+------+--------+
| 2 | 伊藤 | 野球部 |
+----+------+--------+
-- DELETE文でデータを削除
DELETE FROM students WHERE name = '伊藤';
-- 削除後のテーブルを確認
SELECT * FROM students;
-- 実行結果
+----+------+------------+
| id | name | club |
+----+------+------------+
| 1 | 田中 | サッカー部 |
| 3 | 山田 | 美術部 |
| 4 | 鈴木 | バレー部 |
+----+------+------------+
クエリとSQLに関するよくある質問
クエリとSQLに関するよくある質問を以下にまとめました。
Q. クエリとSQLの違いは何ですか?
クエリはデータベースに対して処理を要求する命令文のことで、SQLはその命令文を書くための言語です。SQLで書かれた命令文を「SQL文」や「クエリ」と呼びます。
Q. AIがSQLを書いてくれるのに、自分で学ぶ必要はありますか?
AIが生成したSQL文が正しいかどうかを判断するには、SQLの基礎知識が必要です。意図しないデータの削除や更新を防ぐためにも、SQL文の意味を自分で読み解ける力は欠かせません。
Q. SQLを学ぶと実務でどう役立ちますか?
データの取得・集計・更新といった操作を自分で行えるようになります。データベースを扱う場面はWebアプリケーションや業務システムなど幅広く、エンジニア職に限らずデータ分析やマーケティングの現場でも活用されています。
Q. SQLはどのデータベースでも同じように使えますか?
SQLは国際標準規格に基づいているため、基本的な書き方はどのDBMSでも共通です。ただし、DBMS製品ごとに独自の構文や挙動の違いがあるため、移行や併用の際は注意が必要です。
Q. SQLの学習はどこから始めればいいですか?
まずはSELECT・INSERT・UPDATE・DELETEの4つの基本操作(CRUD)を覚えることをおすすめします。ブラウザ上でSQLを実行できるWebサービスを使えば、環境構築なしですぐに練習を始められます。
まとめ
この記事では、クエリとSQLの違いから、SQLの種類、基本となるCRUD操作の書き方までを解説しました。
学んだ内容:
この記事の要点は以下の通りです。
- クエリはデータベースへの命令文、SQLはその命令文を書くための言語
- SQLの操作方法は対話型と埋込み型の2種類
- SQLはDDL・DML・DCL・TCLの4種類に分類
- データベース操作の基本はCRUD(Create・Read・Update・Delete)
- SELECT・INSERT・UPDATE・DELETEの構文と使い方
AIが生成したSQL文に対して「何をしているか」「安全に実行できるか」を理解できることは、AIを活用する場面で大きな強みになります。今回紹介したような基礎の力を学び続けることは、今後も大切な姿勢です。AIが進化するほど、学び続ける人の判断力が活きる場面は増えていくでしょう。
関連記事
SQLの基礎は、AI時代に初心者エンジニアが身につけるべき知識の一つです。全体像を知りたい方は、以下の記事もあわせてご覧ください。
参考資料
以下のリンクは、この記事で解説した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご覧ください。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事

2023.10.01
【BIND高度実践】chroot環境を構築してみよう【前編】
こちらの記事では、BINDを利用したDNSサーバーにchroot環境を構築する手順をハンズオン形式でご紹介します。
- インフラエンジニア

2026.03.24
git diff・stash・statusの使い方|差分確認と一時退避の方法
git diffは変更差分の確認、git stashは作業の一時退避、git statusは変更状態の確認を行うコマンドです。3つの使い方をコマンド実行例つきで解説。それぞれの違いを理解する→
- インフラエンジニア
- git

2024.05.02
Linux認定試験「LinuC」でクラウド時代の即戦力インフラエンジニアに
LinuCは、クラウド技術を含めた幅広いLinux技術を網羅した新しいLinux技術者認定試験です。2018年にスタートし、2020年には仮想化・コンテナ技術などを追加する改訂が行われ、2023年には最上位資格としてLinuCシステムアーキテクトが追加されました。LinuCを取得することで、自身のLinux技術を証明し、就職や転職、キャリアアップに繋げることができます。
- インフラエンジニア
- Linux

2024.10.26
【経験年数別】インフラエンジニアに必要なスキルとキャリアの歩み方
この記事では、1–3年、3–5年、5年以上の経験年数別に必要なスキルを具体的に解説し、それぞれの段階で成長を加速させるための具体的な方法を紹介します。
- インフラエンジニア



