実際のビジネスでは、単にテーブルをクエリするだけではないことがよくあります。
電子商取引システムで、どのユーザーが商品を購入していないかをクエリします。
銀行は違反記録を照会し、同時にユーザーの
当選情報と当選者の基本情報を照会する場合があります。
上記は、2 つのテーブルを一緒にクエリする必要がある場合のみです。
上記のビジネスでは、結果を得るためにクエリを実行するために複数のテーブルを結合する必要があります。複数テーブルの結合クエリの本質は、テーブルの接続です。
テーブル結合 複数のテーブルのフィールドをクエリする必要がある場合は、テーブル結合を使用できます。テーブル結合は内部結合と外部結合に分けられます。
内部結合: 2 つのテーブルのフィールドに結合関係があるレコードを結合し、その結合関係を照合してレコード セットを形成します。
外部結合: 他の一致しないレコードが選択され、外部左結合と外部右結合に分割されます。
学習実験の前に、全員に2つの模擬データテーブルを用意しました:
ユーザー情報を格納するUserテーブル どのユーザーがどの商品を購入したかを格納する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;
ユーザー テーブル データは次のとおりです: uid username password 1 Jingtian 1 23456 2 王暁爾 245667 3 王宝強 1235531 4 ジン・ボラン 123455 5 ファン・ビンビン 5abcwa 6 黄暁明 abcdeef 7 anglebaby caption 8 TFBOYS abcdwww 9 アンochao 12tfdd wd 10 Gao Xiaofeng 3124qwqw 11 李小强 323fxfvdvd 12 李小超 311aqqee 13 ハン・シャオピン 121rcfwr fq 14 ソン・シャオカン 123123tcsd 15 トン・シャオガン 3cxvdfs
🎜🎜🎜
order_goods データは次のとおりです:
oid uid name buytime 1 10 Apple Mouse 1212 313 2 3 iphone 12秒 1231212413 12 スプライト 13232333 4 15 3 4242123 5 3 iPhoneキーボード 12123413
注: 上記の 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 (条件) 例1 select * from user where uid in (1 、3、 4); 例1の説明 idで指定されたユーザーをクエリ 例2 select * 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文2例 select * 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";
?>
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜