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

推薦する

開発効率を向上させる 20 の JavaScript ヒント

目次1. 配列を宣言して初期化する2. 合計、最小値、最大値を計算する3. 文字列、数値、オブジェク...

Nginxリバースプロキシ設定でプレフィックスが削除される

nginx をリバース プロキシとして使用する場合、リクエストをそのまま次のサービスに転送するだけで...

HTML の著作権記号のフォント選択問題 (著作権記号をより美しくする方法)

1. 問題を発見する&copy; は HTML の著作権記号ですが、間違ったフォントを選択す...

Mac インストール mysqlclient プロセス分析

仮想環境で pip 経由でインストールしてみてください: pip で mysqlclient をイン...

Nginx での Frp による https への強制リダイレクト設定の詳細な説明

自宅のルーターが300Mの帯域幅を80Mに強制的に減らしたため、3205Uソフトルーターを購入しまし...

Videojs+swiper が Taobao の商品詳細カルーセルを実現

この記事では、Taobao商品詳細のカルーセルを実現するためのvideojs+swiperの具体的な...

MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明

MySQL Limit はセグメント内のデータベース データをクエリでき、主にページングで使用されま...

Node.jsをゼロから学ぶ

目次URL モジュール1. 解析メソッド2. フォーマット方法3. 解決方法イベントモジュール(イベ...

Layuiテーブルは指定された行のラジオボタンを選択し、その行の実装コードまでスクロールします。

layui テーブルには複数行のデータがあります。外部入力コンテンツを通じて、指定された行を見つけ...

Vue におけるキープアライブ マルチレベル ルーティング キャッシュの問題

目次1. 問題の説明2. 原因分析3. 解決策4. 処理1. 問題の説明調整センターでは、最後の 2...

MySQLインジェクションバイパスフィルタリング技術の概要

まず、GIF 操作を見てみましょう。ケース1: スペースがフィルタリングされるスペースの代わりに角括...

小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現するためにCSSを使用する

小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現する...

Linux で Sudo を使用して権限を委譲する

sudo 権限委譲の概要su スイッチ ID: su –l ユーザー名 –c 'コマンド&#...

MySQLのクラスタモードでのgalera-clusterのデプロイメントの詳細説明

目次1: galera-clusterの紹介2. galera-clusterの仕組み3: Mari...

Maven で tomcat8-maven-plugin プラグインを使用する詳細なチュートリアル

オンラインで多くの記事を検索しましたが、解決策は見つかりませんでした。次のように、tomcat7-m...