SQLとは?データベース言語をわかりやすく解説
SQL(Structured Query Language、「エス・キュー・エル」または「シーケル」と読みます)は、リレーショナルデータベースを扱うための標準的な言語です。リレーショナルデータベースとは、データを行と列から成る表に保存するタイプのデータベースで、Postgres、MySQL、SQLite、SQL Serverなどがあります。SQLを使って、データへの質問(「今月予約したのは誰か?」)をしたり、レコードを追加、変更、削除したりします。1970年代から存在し、国際標準であり、世界中の多くのアプリを支えています。
AIでアプリを作るときにSQLが重要な理由
AIアプリビルダーに「注文を保存して」や「今後の予約の一覧を表示して」と頼むと、何かがデータベースとやりとりしなければなりません。多くのアプリでは、それは直接書かれたSQL、またはORMによって生成されたSQLです。
SQLを自分で書く必要はありませんが、少し理解しておくと役に立ちます。
- 自分のデータを確認できる。 短いクエリで「今週の新規登録は何件か?」に答えられます。新しい画面を作るより速いです。
- より良いレポートを依頼できる。 「収益を月とサービスごとにまとめて」は、SQLの考え方です。それがわかっていると、依頼がより明確になります。
- 危険な変更を見つけられる。
WHERE句のないDELETEやUPDATEは、すべての行に影響します。実行される前に見つける価値があります。 - データが閉じ込められない。 SQLは共通の標準なので、SQLデータベースのデータは多くのツールで移動や読み取りができます。
日常の例え
とても整理された図書館と、正確でシンプルな言葉だけを話す司書を想像してください。
あなたは書架を自分で歩いて探すことはしません。司書に、「この著者の本をすべて探して。2010年以降に出版されたもので、新しいものから順に」と書いたカードを渡します。司書は建物の中を知り尽くしており、ちょうどその本を、その順番で持ってきます。
SQLは、そのカードに書く言語です。どのように探すかではなく、何が欲しいかを伝えます。どの経路がもっとも速いかは、データベースが自分で判断します。
SQLの仕組み:テーブル、行、列
リレーショナルなデータベースは、データをテーブルに保存します。各テーブルは1種類のものを保持し、各行が1件のレコード、各列が1つの情報です。
customers(顧客)
| id | name | city | |
|---|---|---|---|
| 1 | Lena Ortiz | lena@example.com | Lisbon |
| 2 | Sam Patel | sam@example.com | Leeds |
orders(注文)
| id | customer_id | total | placed_at |
|---|---|---|---|
| 101 | 1 | 42.00 | 2026-09-20 |
| 102 | 2 | 18.50 | 2026-09-22 |
| 103 | 1 | 25.00 | 2026-09-27 |
customer_id列が、各注文を顧客に結びつけます。このつながりこそが、データベースを「リレーショナル」にしています。
具体例:実際の質問に答える
1. データを読む:「リスボンのすべての顧客を表示して」
SELECT name, email
FROM customers
WHERE city = 'Lisbon';
2. 並べ替えと件数の制限:「直近の注文5件」
SELECT id, total, placed_at
FROM orders
ORDER BY placed_at DESC
LIMIT 5;
3. 表を結合する:「各注文と、顧客の名前」
SELECT o.id, c.name, o.total
FROM orders o
JOIN customers c ON c.id = o.customer_id;
4. 集計する:「顧客ごとの合計支払額」
SELECT c.name, SUM(o.total) AS total_spent
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.name
ORDER BY total_spent DESC;
この例のデータでは、Lena Ortizが67.00、Sam Patelが18.50と返ってきます。
5. データを変更する:
INSERT INTO customers (name, email, city)
VALUES ('Ana Silva', 'ana@example.com', 'Porto');
UPDATE customers SET city = 'Porto' WHERE id = 1;
DELETE FROM orders WHERE id = 102;
これらは、ほぼすべてのアプリの4つの基本操作、つまり作成、読み取り、更新、削除に対応します。これはCRUDとして知られています。
注意点です。UPDATE customers SET city = 'Porto';をWHERE句なしで実行すると、すべての顧客が変更されます。変更を実行する前には、必ずWHERE句を確認してください。
SQLの主な命令
| 命令 | 役割 |
|---|---|
SELECT | データを読む |
INSERT | 新しい行を追加する |
UPDATE | 既存の行を変更する |
DELETE | 行を削除する |
CREATE TABLE / ALTER TABLE | テーブルの構造を作成、変更する |
WHERE | 影響を受ける行を絞り込む |
JOIN | 関連するテーブルを結合する |
GROUP BY | 行をグループにまとめ、COUNT、SUM、AVGで集計する |
ORDER BY / LIMIT | 結果を並べ替え、件数を制限する |
SQLは標準化されていますが、各データベースは独自の拡張を加えており、それを**方言(ダイアレクト)**と呼びます。Postgres、MySQL、SQLiteはいずれも上の例を理解しますが、日付の関数などの細部は少しずつ異なります。
主な用語
| 用語 | 意味 |
|---|---|
| クエリ | SQL文、特にデータを読み取るもの。 |
| テーブル/行/列 | 種類のもの/1件のレコード/1つの属性。 |
| 主キー | 各行を一意に識別する列。通常はid。 |
| 外部キー | 別のテーブルの行を指す列。例えばcustomer_id。 |
| インデックス | 列の検索を大幅に速くする検索用の構造。 |
| スキーマ | すべてのテーブルと列の構造。 |
| トランザクション | 成功するか失敗するかを一緒に決まる、まとめられた変更の塊。 |
| SQLインジェクション | ユーザーの入力を、クエリに紛れ込ませる攻撃。パラメータ化されたクエリで防ぎます。 |
よくある誤解
- 「SQLはデータベースだ」。 SQLは言語です。Postgres、MySQL、SQLiteは、その言語を話すデータベースです。
- 「SQLは古いので時代遅れだ」。 SQLは成熟しているのであり、廃れてはいません。現代のデータベースやデータツールも今でもSQLを使っており、新しいものも多くがSQLのサポートを加えています。
- 「SQLを使えるのは開発者だけだ」。 アナリスト、マーケター、創業者も、シンプルなクエリを毎日使っています。
- 「SQLは柔軟なデータを扱えない」。 多くのSQLデータベースは、JSONも保存できます。例えばPostgresには
jsonb型があります。SQLとNoSQLをご覧ください。 - 「AIに本番のデータへ何でもSQLを実行させてよい」。 読み取りのリスクは低いですが、実際のデータへの変更や削除には、バックアップと二重の確認が必要です。アプリのデータベースをバックアップする方法をご覧ください。
AIビルダーに頼むこと
- 「データベースにあるテーブルと、各列の意味を見せてください。」
- 「読み取り専用のクエリを書いてください。過去30日間の、1日あたりの新規登録数は?」
- 「UPDATEやDELETEを実行する前に、そのクエリと、影響を受ける行数を見せてください。」
- 「よく絞り込みや並べ替えに使う列にインデックスを追加してください。」
- 「ユーザーの入力を使うすべてのクエリが、パラメータ化されていることを確認してください。」
- 「注文と決済の更新は、トランザクションでまとめて、途中で一部だけ成功しないようにしてください。」
MythexでのSQL
アプリにデータを保存する必要があるとき、Mythexはプロジェクトに専用のPostgresデータベースを追加します。チャットで依頼してください。例えば「ウェイティングリストのメールアドレスをデータベースに保存して」と頼むか、/databaseコマンドを使います(データベース)。エージェントがテーブルを作成し、クエリを書きます。Askモードでは、どのクエリについても、平易な言葉で説明を求められます。データベースそのものについては、Postgresとは何かをご覧ください。
よくある質問
SQLとは簡単に言うと何ですか?
SQL(Structured Query Language、構造化問い合わせ言語)は、リレーショナルデータベースを扱うための標準的な言語です。「今週の注文はどれか」のようなデータへの質問をしたり、レコードを追加、変更、削除したりするために使います。
SQLはどう発音しますか?
「エス・キュー・エル」と文字ごとに読む方法と、「シーケル」と読む方法の両方が一般的で、どちらも正しいです。この言語は元々SEQUELと呼ばれており、2つ目の読み方はそこから来ています。
SQLはプログラミング言語ですか?
SQLは、データを管理するために設計された問い合わせ言語です。どのような結果が欲しいかを記述すると、データベースがそれを得る方法を判断します。SQLだけでアプリ全体を作るために使うものではありませんが、リレーショナルデータベースを使うほとんどのアプリの一部になっています。
SQLは学ぶのが難しいですか?
基本は取り組みやすいです。SELECT、WHERE、ORDER BY、INSERT、UPDATE、DELETEで、日常的な必要のほとんどをカバーでき、ほぼ英語のように読めます。結合、グループ化、パフォーマンスの調整を習得するには、もっと時間がかかります。
AIでアプリを作るのにSQLを知っている必要がありますか?
いいえ。AIビルダーがSQLやデータベースのコードを書いてくれます。少し知っておくと、データを確認したり、レポートを依頼したり、危険な変更が実行される前に見つけたりするのに役立ちます。