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

推薦する

Vue3.0 + TypeScript + Vite初体験の詳しい説明

目次プロジェクトの作成プロジェクト構造メイン.jsアプリ.vue:設定コンポジションAPI参照反応的...

ウェブページのドロップダウンリストとdivレイヤーのカバーの問題を選択する

HTML の select 要素に関する質問は、さまざまな場所で提起されています。最近のプロジェクト...

MySQL はエンタープライズレベルのログ管理、バックアップ、リカバリの実践的なチュートリアルを実装します

背景事業が発展するにつれ、会社の事業内容や規模は拡大し続け、ウェブサイトには大量のユーザー情報やデー...

Node.js の fs モジュールと Path モジュールのメソッドの詳細な説明

概要:ファイルシステム モジュールは、標準の POSIX ファイル I/O 操作セットをラップしたシ...

Linuxの簡単な分析でファイアウォールの状態と外部に開いているポートの状態を確認する

1. ファイアウォールの状態を確認するファイアウォールのステータスを確認する systemctl s...

CSS の div の下の同じ行にある複数の要素を右揃えにする

方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...

Vueのドラッグスクリーンショット機能を実装する簡単な方法

マウスをドラッグしてページのスクリーンショットを撮ります(指定した領域にスクリーンショットをドラッグ...

LinuxでMySQLのリモートアクセス権を有効にし、ファイアウォールでポート3306を開きます。

mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセ...

Windows で mysql 8.0.12 をインストールするための詳細なチュートリアル

この記事では、MySQL 8.0.12のインストール方法に関する詳細なチュートリアルを参考までに紹介...

15行のCSSコードがAppleデバイスをクラッシュさせる可能性があり、最新のiOS 12も例外ではない

たった15行のCSSでiPhoneがクラッシュするWire のセキュリティ研究者 Sabri Had...

Nginx でアクセス頻度、ダウンロード速度、同時接続数を制限する方法

1. アクセス頻度、同時接続、ダウンロード速度を制限するために使用されるモジュールと命令の概要ngx...

Vue の nextTick について話す

データが変更されても、DOM ビューはすぐには更新されません。変更直後にノードまたはその値を取得しよ...

MYSQL マスタースレーブ レプリケーションの知識ポイントの概要

単一の MYSQL サーバーが現在の Web サイトのトラフィックに対応できない場合の最適化ソリュー...

Node.jsミドルウェアの仕組みの詳細な説明

目次Express ミドルウェアとは何ですか? Expressミドルウェアを作成するための要件Exp...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...