MySQL複数テーブル結合クエ...LOGIN

MySQL複数テーブル結合クエリ

実際のビジネスでは、単にテーブルをクエリするだけではないことがよくあります。

  1. 電子商取引システムで、どのユーザーが商品を購入していないかをクエリします。

  2. 銀行は違反記録を照会し、同時にユーザーの

  3. 当選情報と当選者の基本情報を照会する場合があります。

上記は、2 つのテーブルを一緒にクエリする必要がある場合のみです。

上記のビジネスでは、結果を得るためにクエリを実行するために複数のテーブルを結合する必要があります。複数テーブルの結合クエリの本質は、テーブルの接続です。

テーブル結合

複数のテーブルのフィールドをクエリする必要がある場合は、テーブル結合を使用できます。テーブル結合は内部結合と外部結合に分けられます。

  1. 内部結合: 2 つのテーブルのフィールドに結合関係があるレコードを結合し、その結合関係を照合してレコード セットを形成します。

  2. 外部結合: 他の一致しないレコードが選択され、外部左結合と外部右結合に分割されます。

学習実験の前に、全員に2つの模擬データテーブルを用意しました:

  1. ユーザー情報を格納するUserテーブル
  2. どのユーザーがどの商品を購入したかを格納するOrderテーブル

userテーブル作成ステートメント

存在しない場合はテーブルを作成user (
   uid int(11) NOT NULL,
   username varchar(30) NOT NULL,
   password char(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

存在しない場合はテーブルを作成 order_goods (order_goods (
   oid int(11) NOT NULL,
   uid int(11) NOT NULL,
   name varchar(50) NOT NULL,
   buytime oid int(11) NOT NULL,
uid int(11) NOT NULL、

name varchar(50) NOT NULL、
buytime int(11) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ユーザー テーブル データは次のとおりです: uidusernamepassword1Jingtian 1 234562 王暁爾2456673王宝強12355314ジン・ボラン1234555 ファン・ビンビン5abcwa6黄暁明abcdeef7anglebabycaption8TFBOYSabcdwww9アンochao12tfdd wd10Gao Xiaofeng3124qwqw11李小强323fxfvdvd12李小超311aqqee13 ハン・シャオピン121rcfwr fq14ソン・シャオカン123123tcsd15トン・シャオガン3cxvdfs
🎜🎜🎜

order_goods データは次のとおりです:

123121241312スプライト132323334153 4242123 53iPhoneキーボード12123413
oiduidnamebuytime
110Apple Mouse1212 313
23iphone 12秒

注: 上記の order_goods テーブルでは、uid は user テーブルの uid フィールドを指します。上の表では、oid を持つデータ行は 1 で、uid を持つユーザーは 10 です。ユーザー テーブルの uid 10 を持つユーザーの場合: Gao Xiaofeng。ユーザーは Apple マウスを購入しました。購入時間 buytime は Unix タイムスタンプです。

内部結合

基本構文 1:

カテゴリ詳細説明基本構文select テーブル 1. フィールド [エイリアス]、テーブル n. テーブル 1 のフィールド [エイリアス] 】 ]、テーブル n where 条件 例 user.uid 、user.username を username、order_goods.oid、order_goods.uid、order_goods.name を shopname として選択します (user.uid = order_goods.uid)。 ;説明例製品テーブル内のどのユーザーが製品を購入したかをクエリし、ユーザー情報を表示します

注: 次の例では、from テーブルはテーブル エイリアスを使用します。

テーブル名が長すぎるため、記述するたびに間違いを犯しやすくなります。表の後に英語の短縮文字列を直接続けることができます。以前にフィールドを結合する場合は、省略形 string.field を使用してください。

mysql> ユーザー名として u.uid、u.username、ショップ名として o.oid、o.uid、o.name をユーザー u,order_goods o から選択します (u.uid = o.uid;
) +-----+----------+-----+-----+--------------+
|uid | ショップ名 | +-----+----------+-----+-----+--------------+
| 10 | アップルマウス | | 王宝強 2 | | 12 | リー・シャオチャオ 15 | トン・シャオガン | 李文凱 5 |
+-----+----------+-----+-----+--------------+
セットの5行(0.00秒)表 1 条件に基づく INNER JOIN テーブル n;




user.uid 上のユーザー内部結合 order_goods から user.uid 、user.username をユーザー名、order_goods.oid、order_goods.uid、order_goods.name をショップ名として選択します。 order_goods.uid;

説明例productテーブル内のどのユーザーが商品を購入したかをクエリし、ユーザー情報を表示します

結果は基本文法 1 と一致しています。

mysql> user.uid = order_goods.uid のユーザー内部結合 order_goods から user.uid 、user.username を username、order_goods.oid、order_goods.uid、order_goods.name として選択します。 +-----+----------+-----+-----+--------------+
|uid | ショップ名 | +-----+----------+-----+-----+--------------+
| 10 | アップルマウス | | 王宝強 2 | | 12 | リー・シャオチャオ | 15 | トン・シャオガン | 王宝強 5 |
+-----+----------+-----+-----+--------------+
セット内の 5 行 (0.00 秒) 外部結合 JOIN table n on 条件;





select * from user left join order_goods on user.uid = order_goods.uid;

例の説明
左、商品を購入していないユーザーをクエリし、ユーザー情報を表示します

外部結合は左結合と右リンクに分かれます。具体的な定義は次のとおりです。

左結合: 右側のテーブルに一致しないレコードも含めて、左側のテーブルのすべてのレコードが含まれます

mysql> select * from user left join order_goods on user.uid = order_goods.uid;
+-- - --+----------+-----+------+------+---- --- --------+----------+
| ユーザー名 |
+-----+-- --- ------+-----------+------+------+------------- --+ -----------+
| 3124qwqw | 1235531 | 3121241 | 311aqqee | 342421 3 | 5 | 1235531 | null | null | |
| 5abcwa | NULL |
| | NULL | 12tfddwd | NULL | 123123tcsd完全| NULL | NULL ----------+-----+-----+-----+----- ---- --+
16 行セット (0.00 秒)

右結合: 右のテーブルに一致しないレコードも含めて、右のテーブルのすべてのレコードが含まれます

カテゴリ詳細な説明
基本構文テーブル1を選択します。フィールド [エイリアスとして]、テーブル n。テーブル 1 のフィールドを条件に右結合テーブル n に結合します。
select * from user right join order_goods on user.uid = order_goods.uid;
例の説明 製品テーブル内のどのユーザーが製品を購入したかをクエリし、ユーザー情報を表示します

mysql> select * from user right join order_goods on user.uid = order_goods.uid;
+------+- - --------+----------+-----+-----+--------------+ - ----------+
| ユーザー名 | パスワード |
+------+- -- -------+-----+-----+------+----------+
| 10 | 3124qwqw | 1235531 | 李暁朝11aqqee | 13232333 |
| 3cxvdfs | 1235531 |
+----- --- ---+----------+-----+-----+--------+---- -- ----+
セット内の 5 行 (0.00 秒)

サブクエリ

クエリを実行するときに、必要な条件が別の選択ステートメントの結果である場合、サブクエリを使用する必要がある場合があります。サブクエリに使用されるキーワードには、in、not in、=、!=、exists、notexists などが含まれます。

カテゴリ詳しい説明基本構文select field from table where field in (条件)例1select * from user where uid in (1 、3、 4);例1の説明idで指定されたユーザーをクエリ例2select * from user where uid in (select uid from order_goods);例2の説明 情報グッズを購入したユーザーの割合が表示されます

例 1:

mysql> select * from user where uid in (1,3,4);
+-----+----------+----------+
|ユーザー名 |
+-----+----------+----------+
| 123456 |
| 3 | 1235531 |
| ジン・ボラン | 123455 | +-----+----------+----------+
セット内の 3 行 (0.00 秒)

例 2:

mysql> select * from user where uid in (order_goods から uid を選択);

+-----+----------+----------+
|ユーザー名 |
+-----+----------+----------+
| 10 | 高暁峰 | 3124qwqw | | 3 | 1235531 |
| 12 | 311aqqee | | 15 | 3cxvdfs | +-----+----------+----------+
セット内の 4 行 (0.00 秒)


mysql> select * from emp where deptno in (select deptno from dept);

レコード結合

以下に従って 2 つのテーブルのデータを結合するには、union および Union all キーワードを使用します。ある クエリ条件をクエリした後、結果が結合されて表示されます。 2 つの主な違いは、結果が直接マージされるのに対し、union は、union all の後に結果に対して個別の操作を実行し、重複レコードを削除した結果であることです。

カテゴリ
詳しい説明基本構文select文1 Union[all] select文2select * from user where uid in (1 、3、4 );productテーブルのユーザー情報の結果とuserテーブルのユーザー情報を結合しますmysql> select uid from user Union select uid from order_goods; +-----+
例の説明
| UID |
+-----+

| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
+-----+
15 行セット (0.00 秒)


次のセクション

<?php echo "Hello Mysql"; ?>
コースウェア
    なし