
CREATE DATABASE
CREATE DATABASE
FOREIGN KEY
FOREIGN KEY
GROUP BY
GROUP BY
INNER JOIN
INNER JOIN
LEFT JOIN
LEFT JOIN
データベースを使い始めるとき、通常最初に遭遇するのはMySQLでしょう。これは実績があり、小規模なサイドプロジェクトから大規模なエンタープライズアプリケーションまで、あらゆるものを支えています。
分厚い教科書を読む代わりに、このガイドでは、80%の時間を占める20%のコマンドについて解説します!
Analyze queries for sargability, missing composite indexes & offsets
Analyze SQL queries for performance anti-patterns, wildcards, and slow offsets. Generates optimized queries and DDL composite indexes for PostgreSQL, MySQL, and SQLite.
MySQLがインストールされていませんか?Dockerを使ってすぐに起動できます。
docker run --name mysql-dev -e MYSQL_ROOT_PASSWORD=secret -d mysql
mysql -u root -pでターミナル経由で接続します。
データベースを作成して選択します。
CREATE DATABASE zoo_db;
USE zoo_db;
データの整合性を確保するために**外部キー(Foreign Keys)**を使用しましょう!
CREATE TABLE habitat (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64));
CREATE TABLE animal (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(64),
habitat_id INT,
FOREIGN KEY (habitat_id) REFERENCES habitat(id)
);
FOREIGN KEY制約の目的は何ですか?
| 操作 | 構文 | 重要なポイント |
|---|---|---|
| INSERT | INSERT INTO table (col) VALUES (val) | 自動インクリメントIDは自動的に処理されます |
| UPDATE | UPDATE table SET col=val WHERE condition | 常にWHERE句を使用してください! |
| DELETE | DELETE FROM table WHERE condition | WHEREなし = 全ての行を削除! |
| SELECT | SELECT col1, col2 FROM table WHERE condition | * = 全ての列(本番環境では避ける) |
INSERT INTO habitat (name) VALUES ('River'), ('Forest');
UPDATE animal SET name = 'Quack' WHERE id = 2;
DELETE FROM animal WHERE id = 1;
UPDATEまたはDELETEコマンドをWHERE句なしで実行すると、テーブル内のすべての行が変更または削除されます。常にクエリを再確認してください!
WHERE句なしで`UPDATE animal SET name='Test';`を実行するとどうなりますか?
| 句 | 目的 | 例 |
|---|---|---|
| SELECT | 返す列 | species, AVG(age) |
| WHERE | グループ化する前に列をフィルタリングする | WHERE id != 3 |
| GROUP BY | 列でグループ化する | GROUP BY species |
| HAVING | 集計後にグループをフィルタリングする | HAVING AVG(age) > 3 |
| ORDER BY | 最終結果をソートする | ORDER BY AVG(age) DESC |
各動物種の平均年齢を知りたいですか?
SELECT species, AVG(age) as average_age
FROM animal
WHERE id != 3
GROUP BY species
HAVING AVG(age) > 3
ORDER BY AVG(age) DESC;
この強力なクエリは、フィルタリング、グループ化、集計、グループのフィルタリング、そして最終結果のソートを行います!
| 結合タイプ | 結果 | 使用するケース |
|---|---|---|
| INNER JOIN | 両方から一致する行のみ | 必須のリレーションシップ |
| LEFT JOIN | 左側のすべて + 一致する右側(一致しない場合はNULL) | オプションのリレーションシップ |
| RIGHT JOIN | 右側のすべて + 一致する左側(一致しない場合はNULL) | めったに使用されない(代わりにテーブルを反転させる) |
| CROSS JOIN | デカルト積(すべての組み合わせ) | テストデータの生成 |
2つのテーブルからデータを結合し、動物の名前と生息地の名前を一緒に表示するには:
SELECT animal.name AS animal_name, habitat.name AS habitat_name
FROM animal
INNER JOIN habitat ON animal.habitat_id = habitat.id;
左側のテーブルのすべての行と、一致しない右側のテーブルの列にNULLを返すJOINはどれですか?
MySQLをマスターするには、筋肉の記憶が必要です。ターミナルを開いて、テーブルの作成やデータの結合を自然にできるようになるまで練習しましょう!
AI CLIログの整形、Cron式の作成、JWTの解析、chmod権限の計算をオフラインで実行。

水平パーティショニング、レンジキーとコンシステントハッシュキー、クロスシャード結合、分散トランザクション(2PCとSaga)、Vitess、Citusなど、最新のデータベースシャーディングアーキテクチャを習得しましょう。
続きを読む
大量の負荷がかかるAPIのスケーリングには基本的なGET/SET操作以上のものが必要です。何百万ものリクエストを適切に処理するためのRedis高度キャッシングパターンを発見しましょう。
続きを読む
PrismaとTypeScriptを使った最新のデータベースシーディング戦略を網羅的に解説。冪等性、Faker.js連携、複雑なリレーショナルデータの扱い、大規模なシードスクリプトのパフォーマンス最適化について探ります。
続きを読む