SQL

SQL

【SQL】トランザクション分離レベルとダーティリード・ファントムリード

こんにちは、かつコーチです。前回はACID特性の4つの性質を解説し、その中のIsolation(独立性)には「強さ」の段階があるという話をしました。今回はその独立性を段階的に設定するトランザクション分離レベルを扱います。分離レベルの違いによ...
SQL

【SQL】ACID特性とは?トランザクションが守る4つの性質

こんにちは、かつコーチです。前回はEXPLAINで実行計画を読む方法を解説しました。ここから2本は、パフォーマンスと並んでデータベースの根幹をなす「整合性」の話に入っていきます。以前の記事でトランザクションのCOMMITとROLLBACKを...
SQL

【SQL】EXPLAINで実行計画を読む基本

こんにちは、かつコーチです。前回はインデックスがなぜ検索を速くするのかを解説しました。インデックスを作成したら、それが本当にクエリで使われているかを確認する必要があります。感覚や思い込みではなく、データベースに直接聞く方法がEXPLAINで...
SQL

【SQL】インデックスとは?なぜ検索が速くなるのか

こんにちは、かつコーチです。前回まではCREATE TABLEやデータ型、正規化といったテーブル設計の話を扱ってきました。テーブル設計をきちんと行っても、データ件数が増えてくると検索が遅くなる場面が出てきます。そこで登場するのがインデックス...
SQL

【SQL】正規化の考え方(第1〜第3正規形)

こんにちは、かつコーチです。これまでCREATE TABLE、データ型、主キー・外部キーとテーブル設計の要素技術を見てきました。今回はそれらを踏まえて、テーブル設計の理論的な支柱である正規化を扱います。この記事は前提知識ありきの上級者向け内...
SQL

【SQL】主キー・外部キーの役割と設定方法

こんにちは、かつコーチです。前回はデータ型の基本を解説し、テーブルの列にどんな型を設定すべきかを見てきました。これまでの記事で何度か登場していたPRIMARY KEYという言葉を、今回はしっかり掘り下げます。あわせて、複数のテーブルを結びつ...
SQL

【SQL】データ型の基本(数値・文字列・日付)

こんにちは、かつコーチです。前回はCREATE TABLEでテーブルを作成する方法を紹介しました。そのときにINTやVARCHAR(100)といった記述をカラムごとに付けましたが、これがデータ型です。データ型とは、その列にどんな種類のデータ...
SQL

【SQL】CREATE TABLEでテーブルを作成する

こんにちは、かつコーチです。ここまでの記事では、すでに用意されたテーブルに対してSELECTやINSERT・UPDATE・DELETEを実行する方法を見てきました。今回はいよいよ「テーブルそのものを自分で作る」ところに踏み込みます。CREA...
SQL

【SQL】トランザクションの基本:COMMIT・ROLLBACKでデータ操作を安全にする

こんにちは、かつコーチです。前回はDELETE文で、WHERE句を書き忘れると取り返しのつかない事故につながるという話をしました。「もし途中で間違いに気づいたら、実行前の状態に戻したい」——そう思ったことはないでしょうか。その願いを叶えてく...
SQL

【SQL】DELETE文でデータを削除する|SQLの基本を初心者向けに解説

こんにちは、かつコーチです。前回はUPDATE文で既存データを書き換える方法を解説しました。DML(データ操作言語)の最後のピースが、テーブルから不要な行を取り除くDELETE文です。DELETE文はSELECT・INSERT・UPDATE...
SQL

【SQL】UPDATE文でデータを更新する

こんにちは、かつコーチです。前回の記事では、テーブルに新しいデータを追加するINSERT文を解説しました。今回は、すでに登録されているデータの内容を書き換えるUPDATE文を扱います。会員情報の変更、注文ステータスの更新など、Webアプリで...
SQL

【SQL】INSERT文でデータを追加する|SQLの基本を初心者向けに解説

こんにちは、かつコーチです。ここまでの記事では、すでにあるデータを取得するSELECT文を中心に解説してきました。ここからは、データそのものを操作するDML(データ操作言語)に入っていきます。第一弾は、テーブルに新しいデータを追加するINS...
SQL

【SQL】相関サブクエリの仕組みと使いどころ|非相関サブクエリとの違いを理解する

こんにちは、かつコーチです。前回の記事「サブクエリの基本」では、外側のクエリと独立して実行できる非相関サブクエリを扱いました。今回は、外側のクエリの各行を参照しながら繰り返し実行される相関サブクエリ(correlated subquery)...
SQL

【SQL】サブクエリの基本:クエリの中にクエリを書く|SQL中級者への第一歩

こんにちは、かつコーチです。「一度取得した結果を、もう一度別の条件で絞り込みたい」「他のテーブルの集計結果と比較したい」——そんな場面でJOINだけでは書きづらいと感じたことはありませんか。この記事では、そうした悩みを解決するサブクエリの基...
SQL

【SQL】HAVINGでグループ集計結果を絞り込む|WHEREとの違いを整理

こんにちは、かつコーチです。前回の記事「GROUP BYでグループごとに集計する」で、GROUP BYを使うとグループ単位の集計ができることを解説しました。そこで一つ壁にぶつかった方も多いのではないでしょうか。「集計した結果を条件で絞り込み...
SQL

【SQL】GROUP BYでグループごとに集計する|SQLの基本を初心者向けに解説

こんにちは、かつコーチです。「COUNT・SUM・AVGは使えるようになったけど、『顧客ごとの注文件数』のように、グループ単位で集計したいときはどう書けばいいんだろう」と悩んでいませんか。この記事では、そんな悩みを解決するGROUP BYの...
SQL

【SQL】UNION・UNION ALLで結果セットを結合する

こんにちは、かつコーチです。「今月の注文テーブル」と「過去の注文アーカイブテーブル」を1つのリストとしてまとめて表示したい。こうした「複数のSELECT結果を縦に連結したい」場面で使うのがUNION・UNION ALLです。これまで解説して...
SQL

【SQL】自己結合(SELF JOIN)の使い方

こんにちは、かつコーチです。「社員テーブルの中で、上司と部下の関係を一覧にしたい」「同じ商品カテゴリの中で、価格が近い商品同士を比較したい」。こうした「同じテーブルの中にある行同士を比較・結合したい」というケースで使うのが自己結合(SELF...
SQL

【SQL】3つ以上のテーブルを結合する

こんにちは、かつコーチです。実務のデータベースは、2つのテーブルだけで完結することはほとんどありません。「会員」「注文」「商品」のように、3つ、4つとテーブルが連鎖している構成が一般的です。今回は、複数テーブルを連結して結合する方法と、多対...
SQL

【SQL】LEFT JOIN・RIGHT JOINの違いと使いどころ

こんにちは、かつコーチです。前回はINNER JOINで「一致する行だけ」を取得する方法を解説しました。今回は、「一致しない行も含めて取得したい」ときに使うLEFT JOINとRIGHT JOINを解説します。「一度も注文したことがない会員...