MySQL データベースの高度なクエリとマルチテーブルクエリ

MySQL データベースの高度なクエリとマルチテーブルクエリ

MySQL マルチテーブルクエリ

ワークシートを追加する

-- ユーザーテーブル (ユーザー)
テーブル `user` を作成します (
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ユーザーID(主キー)',
	`username` VARCHAR(50) COMMENT 'ユーザー名', 
	`age` CHAR(3) COMMENT 'ユーザーの年齢'
);

-- 注文
テーブル「注文」を作成します(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '注文ID(主キー)',
	`price` 二重コメント '注文価格',
	`user_id` INT COMMENT 'ユーザーID(外部キー)'
);

-- 既存のテーブルに外部キーを追加します。構文は次のとおりです: alter table table name add constraint [foreign key name] foreign key (foreign key field) references parent table (primary key field);
ALTER TABLE orders ADD CONSTRAINT user_fk FOREIGN KEY (user_id) REFERENCES `user` (id);

-- ユーザー テーブルにデータを追加します INSERT INTO USER VALUES(1,'第一',11);
INSERT INTO USER VALUES(2,'小等',12);
INSERT INTO USER VALUES(3,'张三',33);
INSERT INTO USER VALUES(4,'李四',24);
USER VALUES(5,'王五',17)に挿入します。
INSERT INTO USER VALUES(6,'赵六',36);
USER VALUES(7,'七七',18)に挿入します。
INSERT INTO USER VALUES(8,'粑粑',NULL);

-- orders テーブルにデータを挿入します INSERT INTO orders VALUES(111,1314,3);
注文にVALUES(112,122,3)を挿入します。
注文にVALUES(113,15,4)を挿入します。
注文にVALUES(114,315,5)を挿入します。
注文にVALUES(115,1014,NULL)を挿入します。
注文にVALUES(116,666,6)を挿入します。
注文にVALUES(117,1111,1)を挿入します。
注文にVALUES(118,8888,NULL)を挿入します。

ここに画像の説明を挿入

ここに画像の説明を挿入

デカルト積

  • 数学では、2 つの集合 X と Y の直積 (直積とも呼ばれる) は、X × Y として表現されます。ここで、最初のオブジェクトは X のメンバーであり、2 番目のオブジェクトは Y のすべての可能な順序付きペアのメンバーです。 (直積) 百度百科事典
  • デカルト積とは何ですか?
`user`,`orders` から * を選択します。

ここに画像の説明を挿入

  • 上の図にあるデータは、私たちプログラマーにとっては何の役にも立ちません。
  • では、デカルト積をどうやって除去するのでしょうか?重複データを削除するには、主キー制約と外部キー制約が必要です。
SELECT * FROM `user` AS u,`orders` AS o WHERE u.`id`=o.`user_id`;

ここに画像の説明を挿入

1. 内部結合

1.1 暗黙的な内部結合

  • fromの直後に複数のテーブル名が出現し、これは暗黙的な内部結合です。
  • テーブル a、テーブル b から * を選択します。この場合、a.id = b.a_id になります。
SELECT * FROM `user` AS u,`orders` AS o WHERE u.`id`=o.`user_id`;

ここに画像の説明を挿入

1.2 内部結合を表示する(推奨)

  • 内部結合を使用してテーブルをリンクし、その後に条件を続けます。 (内側は省略可能)
  • テーブル a から * を選択し、テーブル b を a.id = b.a_id で内部結合します。
  • 成人ユーザーと注文データを照会します。
SELECT * FROM `user` u JOIN `orders` o ON u.`id`=o.`user_id` WHERE age >= 18;

ここに画像の説明を挿入

2. 外部結合

  • 外部リンクは、null を含む単一のテーブルのすべてのデータを表示できます。

2.1 適切な外部リンク

  • 右側の表にすべてのデータを表示します
  • 右外部結合を使用してテーブルをリンクし、その後に on および条件を続けます。 (外側は省略可能)
  • テーブル a から * を選択し、テーブル b を a.id=b.a_id で右外部結合します。
`user` u から * を選択し、 `orders` o を ON u.`id`=o.`user_id` として右結合します。

ここに画像の説明を挿入

左テーブルデータ(ユーザー)

ここに画像の説明を挿入

右の表のデータ(注文)

ここに画像の説明を挿入

2.2 左外側リンク(推奨)

  • 左の表にすべてのデータを表示する
  • 左外部結合を使用してテーブルをリンクし、その後に on および条件を続けます。 (外側は省略可能)
  • テーブル a から * を選択し、テーブル b を a.id=b.a_id で左外部結合します。
SELECT * FROM `user` u LEFT JOIN `orders` o ON u.`id`=o.`user_id`;

ここに画像の説明を挿入

左テーブルデータ(ユーザー)

ここに画像の説明を挿入

右の表のデータ(注文)

ここに画像の説明を挿入

3. サブクエリ

  • サブクエリ、ネストされた感じ。クエリの結果は別のクエリの条件として使用されます。
  • 最も古いユーザーの注文データを照会する
SELECT * FROM orders o WHERE o.`user_id` IN (
	u.`id` を `user` u から選択し、 u.`age` を IN (
		`user` u から MAX(u.`age`) を選択
	)
);

ここに画像の説明を挿入

4. フル接続(MySQLではサポートされていません)

  • 完全な接続、左側と右側のテーブルのすべてのデータ(null を含む)。右外部リンクと左外部リンクの組み合わせに相当します。
  • select * from table a full outer join table b on a.id=b.a_id; (MySQL はこれをサポートしていないため、説明しません)

その他のMySQLの記事については、以下のリンクをご覧ください。

MySQL DDL ステートメント

MySQL CRUD ステートメント

MySQL 集計関数

MySQL マルチテーブルクエリ

終わり…

これで、MySQL データベースの高度なクエリとマルチテーブル クエリに関するこの記事は終了です。MySQL の高度なクエリとマルチテーブル クエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • SqlクエリMySqlデータベーステーブル名と説明テーブルフィールド(列)情報
  • MySQL データベース SELECT クエリ式分析
  • MySQL データベースの詳細な説明 - 複数テーブル クエリ - 内部結合、外部結合、サブクエリ、相関サブクエリ
  • Mysql データベース テーブルのインデックスによってクエリ速度が向上しないのはなぜですか?
  • MySQL データベース クエリの高度なマルチテーブル クエリの詳細な説明
  • MySQL データベース テーブルにインデックスがあるにもかかわらず、クエリが遅いのはなぜですか?

<<:  Vueリスナーの使用例の詳細な説明

>>:  vue ルーティング ビュー router-view のネストされたジャンプの実装

推薦する

Vueはカウントダウン機能を実装する

この記事の例では、カウントダウン機能を実装するためのVueの具体的なコードを参考までに共有しています...

MySQLの保存場所を新しいディスクに移行する方法

1. 新しいディスクを準備し、現在のルートパーティションと同じファイルシステムでフォーマットし、ディ...

cmd と python での MySQL の一般的な操作についての簡単な説明

環境設定1: MySQLをインストールし、MySQLのbinディレクトリを環境変数に追加する環境設定...

Windows で MySQL マスター スレーブ レプリケーションを構成する方法

MySQL マスター/スレーブ レプリケーションを使用すると、1 つのデータベース (マスター デー...

Linux で MySQL データベースのデータ ファイル パスを変更する手順

rpm インストール方法を使用して MySQL データベースをインストールした後、データ ファイルの...

Ubuntu 20.04は静的IPアドレスを設定します(異なるバージョンを含む)

Ubuntu 20.04はnetplanを通じてネットワークを管理するため、以前のバージョンとは少...

Alibaba Cloud イメージリポジトリを使用して外部 Docker イメージを構築する方法の詳細な説明

Alibaba Cloud Image Repositoryを使用して外部イメージをダウンロードする...

MySQL IN ステートメントにおける低速クエリの効率を最適化する手法の例

表の構造は以下のとおりです。記事数は690件のみです。 記事テーブル article(id,titl...

重複したMySQLテーブルをマージして削除する簡単な方法

シナリオ:クロールされたデータは、別のメインテーブルと同じ構造を持つデータテーブルを生成するため、マ...

CSS画像結合技術(スプライト画像)の詳しい説明

CSS画像結合技術1. 画像のステッチ画像ステッチング技術は、個々の画像を収集する技術です。画像の多...

MYSQL SERVER のログファイルを縮小する方法

トランザクション ログには、関連するデータベースに対する操作が記録され、データベースの回復に関連する...

CentOS7.4 に MySQL 5.7.26 をインストールするための詳細なチュートリアル

CentOS にはデフォルトで MariaDB がインストールされていますが、これは MySQL の...

MySQL が InnoDB テーブルが独立したテーブルスペースか共有テーブルスペースかを判断する方法の詳細な説明

序文InnoDB はデータをテーブルスペースに保存します。デフォルト設定では、初期サイズが 10 M...

JSはクリックドロップ効果を実装します

jsはクリックとドロップの特殊効果を実現します。まずは効果画像を見てみましょうさっそく始めましょう。...

Linux での Python スクリプトの自動起動とスケジュール起動の詳細な手順

1. Pythonは起動時に自動的に実行されますPython の自己起動スクリプトがauto.pyで...