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 のネストされたジャンプの実装

推薦する

NginxはIP経由の直接アクセスを禁止し、カスタム500ページにリダイレクトします

設定ファイルに直接 サーバー{ listen 80 default; # IPへの直接アクセスを禁止...

マルチポートおよびマルチドメイン名アクセスのNginx構成の実装

サーバーに複数のサイトを展開するには、異なるサイトにアクセスするために複数のポートを開く必要がありま...

Vueルーティングナビゲーションガードの簡単な理解

目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...

Windows Server 2008 R2 に MySQL 5.7.10 をインストールする手順

MSIインストールパッケージを使用してインストールするご使用のオペレーティング システムに応じて、対...

海外のウェブページのカラーマッチング事例20選共有

この記事では、優れた Web ページのカラー マッチングの事例を 20 件集めて紹介します。これらの...

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

Angular 依存性注入の説明

目次概要1. 依存性注入2. Angularの依存性注入フレームワーク概要依存性注入: デザインパタ...

Vue パッケージアップロードサーバー更新 404 問題に対する 2 つの解決策

1: nginxサーバーソリューション、.conf構成ファイルを変更する解決策は2つある1: 位置 ...

TypeScript の Enum が問題となる理由

目次どうしたの?いつ使うか列挙の数を制御するビット値コントロールインデックス非数値列挙結論はType...

MySQLは実際に分散ロックを実装できる

序文前回の記事では、eコマース シナリオでのフラッシュ セールの例を通じて、モノリシック アーキテク...

CSS でテキストカラーグラデーションを実装する 3 つの方法

Web フロントエンド開発のプロセスでは、UI デザイナーはグラデーション テキストを使用したデザイ...

CSS3でハートを描く

成果を達成する要件/機能: CSS + HTML を使用してハートを描く方法。分析:正方形と 2 つ...

Navicat for Mysql 接続エラー 1251 (接続失敗) の問題を解決する

以前書いた内容が詳細さに欠けていたため、今回は修正・補足しました。ただし、以前の MySQL バージ...

MySQLデータベースがNULLを可能な限り避ける理由

MySQL の多くのテーブルには、NULL が列のデフォルト属性であるため、アプリケーションが NU...

Linux の 5 ステップ ビルド カーネル ツリー

目次0. システムに付属するカーネルツリー1. 環境設定最初のステップステップ2 2. ソースコード...