Mysql 自己結合クエリ例の詳細な説明

Mysql 自己結合クエリ例の詳細な説明

この記事では、Mysql の自己結合クエリについて説明します。ご参考までに、詳細は以下の通りです。

自己結合クエリ

次のシナリオを想像してください。電子商取引の Web サイトでは、サイト上の製品を階層に分類し、1 つのカテゴリに複数のサブカテゴリを設定し、各サブカテゴリにさらに別のサブカテゴリを設定したいと考えています。たとえば、デジタル製品のカテゴリには、ノートパソコン、デスクトップ、スマートフォンなどがあり、ノートパソコン、デスクトップ、スマートフォンはブランド別に分類でき、ブランドは価格別に分類できます。おそらく、これらの分類は非常に深いレベルに達し、ツリーのような構造を示すでしょう。では、このデータはデータベースでどのように表現すればよいのでしょうか?データベースに ID とカテゴリ名を保存するための 2 つのフィールドを作成し、3 番目のフィールドを使用してカテゴリのサブカテゴリまたは親カテゴリの ID を保存し、最後に自己結合を通じて目的の結果をクエリすることができます。

自己結合クエリは、実際には結合クエリと同等であり、左側のテーブル (親テーブル) と右側のテーブル (子テーブル) の両方がそれ自体である点を除いて、2 つのテーブルを必要とします。自己結合クエリを実行するときは、テーブルをそれ自体に結合し、親テーブルと子テーブルに 2 つの異なるエイリアスを指定してから、結合条件を添付します。次の例を見てください。

1. データ テーブルを作成します。

テーブルtdb_catesを作成します(
 id smallint 主キー auto_increment、
 cate_name varchar(20) NULLではない、
 parent_id smallint が null ではない
);

注: cate_name はカテゴリの名前を表し、parent_id は親カテゴリの ID を表します。

2. データを挿入します。

tdb_cates(cate_name, parent_id) に値('デジタル製品', 0) を挿入します。
tdb_cates(cate_name, parent_id) に値('家庭用品', 0) を挿入します。
tdb_cates(cate_name, parent_id) に値('Notebook', 1) を挿入します。
tdb_cates(cate_name, parent_id) に値('smartphone', 1) を挿入します。
tdb_cates(cate_name, parent_id) に値('電化製品', 2) を挿入します。
tdb_cates(cate_name, parent_id) に値('furniture', 2) を挿入します。
tdb_cates(cate_name, parent_id) に値 ('冷蔵庫'、5) を挿入します。
tdb_cates(cate_name, parent_id) に値('洗濯機', 5) を挿入します。
tdb_cates(cate_name, parent_id) に値('車のブランド', 0) を挿入します。
tdb_cates(cate_name, parent_id) に値 ('Buick', 9) を挿入します。
tdb_cates(cate_name, parent_id) に値('宝马', 9) を挿入します。
tdb_cates(cate_name, parent_id) に値('Chevrolet', 9) を挿入します。
tdb_cates(cate_name, parent_id) に値('Home Textiles', 0) を挿入します。

クエリ結果:

3. すべてのカテゴリとその親カテゴリをクエリします。2つのテーブル (両方とも tdb_cates) があり、左側のテーブルが子テーブル、右側のテーブルが親テーブルであると仮定します。子テーブルの id、子テーブルの cate_name、および親テーブルの cate_name をクエリします。結合条件は、子テーブルの parent_id が親テーブルの id と等しいことです。

次のようにコードをコピーします
tdb_cates s から s.id、s.cate_name、p.cate_name を選択し、tdb_cates p を s.parent_id=p.id に結合します。

クエリ結果:

4. すべてのカテゴリとカテゴリのサブカテゴリをクエリします。テーブルが 2 つ (両方とも tdb_cates) あり、左側のテーブルが子テーブル、右側のテーブルが親テーブルであると仮定します。子テーブルの id、子テーブルの cate_name、および親テーブルの cate_name をクエリします。接続条件は、子テーブルの id が親テーブルの parent_id と等しいことです。

次のようにコードをコピーします
tdb_cates s から s.id、s.cate_name、p.cate_name を選択し、tdb_cates p を p.parent_id=s.id に結合します。

クエリ結果:

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL の結合クエリとサブクエリの問題
  • MySQL マルチテーブル結合クエリの詳細な説明
  • どのような種類の MYSQL 接続クエリを知っていますか?
  • MySQL接続クエリの原理と応用
  • MySQL 結合クエリ構文と例
  • MySQLの結合クエリ、ユニオンクエリ、サブクエリの原理と使用例の詳細な説明
  • MySQL マルチテーブル結合クエリ例の説明
  • MySQL接続クエリの詳細な説明

<<:  Windows 10 に Apache 2.4.41 をインストールするチュートリアル

>>:  vueプロジェクトのマルチ環境設定(.env)の実装

推薦する

MySQLのマスタースレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。

大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...

Linux サーバーと Windows システム間でファイルをアップロードおよびダウンロードする方法

背景: Linux サーバーのファイルのアップロードとダウンロード。 XShell+Xftp インス...

MySQLでテーブルを作成し、フィールドコメントを追加する方法

コードと例を直接投稿する #テーブル作成時にコメントを記述する CREATE TABLE useri...

MySQL の連結で複数の一重引用符と三重引用符を使用する際の問題

文字列を動的に連結する場合、文字連結を使用することが多いです。次のような連結の引用符の意味がわかりま...

uniappは録音アップロード機能を実現

目次uni-app の紹介HTML部分js部分インスタンスを作成する録音を開始録音終了録音を再生再生...

React Native JSIはRNとネイティブ通信のサンプルコードを実装します

目次JSIとはJSIの違いiOS で JSI を使用するiOS 設定RN側の構成jsはパラメータ付き...

Windows 10 で Hyper-V サービスをシャットダウンするいくつかの方法

VMware Workstation を使用して Windows 10 で仮想マシンを開くと、VMw...

HTML入門チュートリアル HTMLタグ記号をすぐにマスター

補足<br />HTML について何も知らず、HTML の始め方がまだわからない場合は、...

ApplicationHost.config (IIS ストレージ構成領域ファイル) の概要

新しく作成された Web サイトの場合は、ASP.NET MVC5 を例に挙げます。セッションを処理...

Node.js とブラウザのグローバル オブジェクトの違いの概要

Node.js では、.js ファイルは完全なスコープ (モジュール) です。したがって、var に...

ブラウザ間の hr 区切り文字の違い

Webページを作るときに、区切り線hrを使うことがありますが、IE6やIE7で表示するのは非常に苦痛...

Windows サーバー ポートを開きます (例としてポート 8080 を使用します)

ポートとは何ですか?私たちが通常参照するポートは、物理的な意味でのポートではなく、具体的には TCP...

Vue2.x の応答性の簡単な説明と例

1. Vue レスポンシブの使用法を確認する​ Vue の応答性は、私たち全員がよく知っています。 ...

Reactは、読み込み、読み込み完了、読み込み失敗の3つの段階の原則分析を実装します。

最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...