実際のビジネスでは、単にテーブルをクエリするだけではないことがよくあります。
電子商取引システムで、どのユーザーが商品を購(gòu)入していないかをクエリします。
銀行は違反記録を照會(huì)し、同時(shí)にユーザーの
當(dāng)選情報(bào)と當(dāng)選者の基本情報(bào)を照會(huì)する場(chǎng)合があります。
上記は、2 つのテーブルを一緒にクエリする必要がある場(chǎng)合のみです。
上記のビジネスでは、結(jié)果を得るためにクエリを?qū)g行するために複數(shù)のテーブルを結(jié)合する必要があります。複數(shù)テーブルの結(jié)合クエリの本質(zhì)は、テーブルの接続です。
テーブル結(jié)合 複數(shù)のテーブルのフィールドをクエリする必要がある場(chǎng)合は、テーブル結(jié)合を使用できます。テーブル結(jié)合は內(nèi)部結(jié)合と外部結(jié)合に分けられます。
內(nèi)部結(jié)合: 2 つのテーブルのフィールドに結(jié)合関係があるレコードを結(jié)合し、その結(jié)合関係を照合してレコード セットを形成します。
外部結(jié)合: 他の一致しないレコードが選択され、外部左結(jié)合と外部右結(jié)合に分割されます。
學(xué)習(xí)実験の前に、全員に2つの模擬データテーブルを用意しました:
ユーザー情報(bào)を格納するU(xiǎn)serテーブル どのユーザーがどの商品を購(gòu)入したかを格納するOrderテーブル userテーブル作成ステートメント
存在しない場(chǎng)合はテーブルを作成user
( uid
int(11) NOT NULL, username
varchar(30) NOT NULL, password
char(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
存在しない場(chǎng)合はテーブルを作成 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 王寶強(qiáng) 1235531 4 ジン?ボラン 123455 5 ファン?ビンビン 5abcwa 6 黃暁明 abcdeef 7 anglebaby caption 8 TFBOYS abcdwww 9 アンochao 12tfdd wd 10 Gao Xiaofeng 3124qwqw 11 李小強(qiáng) 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 を持つユーザーの場(chǎng)合: Gao Xiaofeng。ユーザーは Apple マウスを購(gòu)入しました。購(gòu)入時(shí)間 buytime は Unix タイムスタンプです。
內(nèi)部結(jié)合
基本構(gòu)文 1:
カテゴリ 詳細(xì)説明 基本構(gòu)文 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)。 ; 説明例 製品テーブル內(nèi)のどのユーザーが製品を購(gòu)入したかをクエリし、ユーザー情報(bào)を表示します 注: 次の例では、from テーブルはテーブル エイリアスを使用します。
テーブル名が長(zhǎng)すぎるため、記述するたびに間違いを犯しやすくなります。表の後に英語(yǔ)の短縮文字列を直接続けることができます。以前にフィールドを結(jié)合する場(chǎng)合は、省略形 string.field を使用してください。
mysql> ユーザー名として u.uid、u.username、ショップ名として o.oid、o.uid、o.name をユーザー u,order_goods o から選択します (u.uid = o.uid; )
+-----+----------+-----+-----+--------------+
|uid | ショップ名 |
+-----+----------+-----+-----+--------------+
| 10 | アップルマウス |
| 王寶強(qiáng) 2 |
| 12 | リー?シャオチャオ
15 | トン?シャオガン
| 李文凱 5 |
+-----+----------+-----+-----+--------------+
セットの5行(0.00秒)表 1 條件に基づく INNER JOIN テーブル n; 例
user.uid 上のユーザー內(nèi)部結(jié)合 order_goods から user.uid 、user.username をユーザー名、order_goods.oid、order_goods.uid、order_goods.name をショップ名として選択します。 order_goods.uid;
説明例productテーブル內(nèi)のどのユーザーが商品を購(gòu)入したかをクエリし、ユーザー情報(bào)を表示します結(jié)果は基本文法 1 と一致しています。
mysql> user.uid = order_goods.uid のユーザー內(nèi)部結(jié)合 order_goods から user.uid 、user.username を username、order_goods.oid、order_goods.uid、order_goods.name として選択します。
+-----+----------+-----+-----+--------------+
|uid | ショップ名 |
+-----+----------+-----+-----+--------------+
| 10 | アップルマウス |
| 王寶強(qiáng) 2 |
| 12 | リー?シャオチャオ |
15 | トン?シャオガン
| 王寶強(qiáng) 5 |
+-----+----------+-----+-----+--------------+
セット內(nèi)の 5 行 (0.00 秒) 外部結(jié)合 JOIN table n on 條件; 例 select * from user left join order_goods on user.uid = order_goods.uid;
例の説明左、商品を購(gòu)入していないユーザーをクエリし、ユーザー情報(bào)を表示します外部結(jié)合は左結(jié)合と右リンクに分かれます。具體的な定義は次のとおりです。
左結(jié)合: 右側(cè)のテーブルに一致しないレコードも含めて、左側(cè)のテーブルのすべてのレコードが含まれます
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 秒)
右結(jié)合: 右のテーブルに一致しないレコードも含めて、右のテーブルのすべてのレコードが含まれます
カテゴリ 詳細(xì)な説明 基本構(gòu)文 テーブル1を選択します。フィールド [エイリアスとして]、テーブル n。テーブル 1 のフィールドを條件に右結(jié)合テーブル n に結(jié)合します。 例 select * from user right join order_goods on user.uid = order_goods.uid; 例の説明 製品テーブル內(nèi)のどのユーザーが製品を購(gòu)入したかをクエリし、ユーザー情報(bào)を表示します
mysql> select * from user right join order_goods on user.uid = order_goods.uid; +------+- - --------+----------+-----+-----+--------------+ - ----------+ | ユーザー名 | パスワード | +------+- -- -------+-----+-----+------+----------+ | 10 | 3124qwqw | 1235531 | 李暁朝11aqqee | 13232333 | | 3cxvdfs | 1235531 | +----- --- ---+----------+-----+-----+--------+---- -- ----+ セット內(nèi)の 5 行 (0.00 秒) サブクエリ
クエリを?qū)g行するときに、必要な條件が別の選択ステートメントの結(jié)果である場(chǎng)合、サブクエリを使用する必要がある場(chǎng)合があります。サブクエリに使用されるキーワードには、in、not in、=、!=、exists、notexists などが含まれます。
カテゴリ詳しい説明 基本構(gòu)文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の説明 情報(bào)グッズを購(gòu)入したユーザーの割合が表示されます例 1:
mysql> select * from user where uid in (1,3,4);
+-----+----------+----------+
|ユーザー名 |
+-----+----------+----------+
| 123456 |
| 3 | 1235531 |
| ジン?ボラン | 123455 |
+-----+----------+----------+
セット內(nèi)の 3 行 (0.00 秒)
例 2:
mysql> select * from user where uid in (order_goods から uid を選択);
+-----+----------+----------+
|ユーザー名 |
+-----+----------+----------+
| 10 | 高暁峰 | 3124qwqw |
| 3 | 1235531 |
| 12 | 311aqqee |
| 15 | 3cxvdfs |
+-----+----------+----------+
セット內(nèi)の 4 行 (0.00 秒) mysql> select * from emp where deptno in (select deptno from dept);
レコード結(jié)合 以下に従って 2 つのテーブルのデータを結(jié)合するには、union および Union all キーワードを使用します。ある クエリ條件をクエリした後、結(jié)果が結(jié)合されて表示されます。 2 つの主な違いは、結(jié)果が直接マージされるのに対し、union は、union all の後に結(jié)果に対して個(gè)別の操作を?qū)g行し、重複レコードを削除した結(jié)果であることです。
カテゴリ詳しい説明 基本構(gòu)文 select文1 Union[all] select文2例 select * from user where uid in (1 、3、4 );例の説明 productテーブルのユーザー情報(bào)の結(jié)果とuserテーブルのユーザー情報(bào)を結(jié)合します 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";
?>
現(xiàn)時(shí)點(diǎn)ではコースウェアはダウンロードできません?,F(xiàn)在スタッフが整理中です。今後もこのコースにもっと注目してください?
このコースを視聴した生徒はこちらも學(xué)んでいます