国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Mysql多表聯(lián)合查詢

很多時候在實際的業(yè)務(wù)中我們不只是查詢一張表。

  1. 在電子商務(wù)系統(tǒng)中,查詢哪些使用者沒有購買過產(chǎn)品。

  2. 銀行中可能會查詢違規(guī)記錄,同時查詢出用戶的

  3. #查詢中獎資訊和中獎人員的基本資訊。

以上只是列的情況我們就需要把兩張表在一起進行查詢。

而上述業(yè)務(wù)中需要多表聯(lián)合在一起查詢才能有結(jié)果,而多表聯(lián)合查詢的本質(zhì)是:表連接。

表格連接

當(dāng)需要查詢多個表格中的欄位時,就可以使用表格連接來實現(xiàn)。表聯(lián)接分為內(nèi)連接和外連接。

  1. 內(nèi)聯(lián)結(jié):將兩個表中存在聯(lián)結(jié)關(guān)係的欄位符合連結(jié)關(guān)係的那些記錄形成記錄集的聯(lián)結(jié)。

  2. 外連接:會選取其他不符的記錄,分成外左聯(lián)結(jié)和外右聯(lián)結(jié)。

在學(xué)習(xí)實驗前,我為大家準(zhǔn)備了兩個模擬的資料表:

  1. 使用者表,存放使用者資訊
  2. #訂單表,存放哪位使用者購買過哪個商品

user表建立語句

#CREATE TABLE IF NOT EXISTS user (
? ?uid int(11) NOT NULL,
? ?username varchar(30) NOT NULL,
? ?password# char(32) NOTULL,
? ?

password

# char(32) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS order_goods (
? ?oid int(11) NOT NULL,
? ?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;user表資料如下:##uid#username#password1景甜1234562 王小二245667#3王強1235531#12355314井柏然123455#5范冰冰5abcwa6黃曉明abcdeef7anglebaby# caption8TFBOYS#abcdwww9安小超12tfddwd#10#高小峰3124qwqw#11李小強323fxfvdvd#12
###李小超######311aqqee############ #13######韓小平######121rcfwrfq############14######宋小康######123123tcsd###### #######15######佟小剛######3cxvdfs############

order_goods資料如下:

##23iphone 12s123121241312#雪碧1323233341534242123#53iphone 鍵盤12123413
oid#uidnamebuytime
110蘋果滑鼠1212313

注意:在上表order_goods表中uid是指user表中的uid欄位。上表中oid為1的資料行,uid為10的使用者。為user表中uid為10的使用者:高小峰。該用戶購買了商品為蘋果滑鼠。購買時間buytime為一個unix時間戳。

內(nèi)連接

基本語法一:

#類別詳細(xì)說明#基本語法
select 表1.欄位[as 別名],表n.欄位?from 表1 [別名],表n where 條件;###### #######範(fàn)例######select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user,order_goods ?where user.uid = order_goods.uid ;############範(fàn)例說明######查詢商品表中哪些使用者購買過商品,並將使用者資訊顯示出來############

註:下例中from 表使用到了表別名。

由於表名太長,每次寫的時候容易寫錯。我們可以在表後直接跟上一個簡寫英文字串。在前面拼接字段時,直接使用簡寫字串.字段即可。

mysql> select u.uid ,u.username as username,o.oid,o.uid,o.name as shopname from user u,order_goods o ?where u.uid = o.uid;
?+-----+-----------+-----+-----+---------------+
?| uid | username ?| oid | uid | shopname ? ? ?|
?+-----+-----------+-----+-----+---------------+
?| ?10 | 高小峰 ? ?| ? 1 | ?10 | 蘋果滑鼠 ? ? ?|
# ?| ? 3 | 王寶強 ? ?| ? 2 | ? 3 | iphone 12s ? ?|
# ?| ?12 | 李小超 ? ?| ? 3 | ?12 | 雪碧 ? ? ? ? ?|
?| ?15 | 佟小剛 ? ?| ? 4 | ?15 | ? ? ? ? ? ? ? |
?| ? 3 | 李文凱 ? ?| ? 5 | ? 3 | iphone 鍵盤 ? |
?+-----+-----------+-----+-----+---------------+
5 rows in set (0.00 sec)

#基本語法二:

##類別詳細(xì)解示#基本語法select 表1.欄位[as 別名],表格n.欄位?from 表1 INNER JOIN 表n on ?條件;範(fàn)例select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user inner joinorder_goods ?on ?user.uid = ?user.uid = .uid;範(fàn)例說明查詢商品表中哪些使用者購買過商品,並將使用者資訊顯示出來

結(jié)果與基本語法1中一致。

mysql> select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user inner join order_goods on order>user. uid;
?+-----+-----------+-----+-----+---------------+
?| uid | username ?| oid | uid | shopname ? ? ?|
?+-----+-----------+-----+-----+---------------+
?| ?10 | 高小峰 ? ?| ? 1 | ?10 | 蘋果滑鼠 ? ? ?|
# ?| ? 3 | 王寶強 ? ?| ? 2 | ? 3 | iphone 12s ? ?|
# ?| ?12 | 李小超 ? ?| ? 3 | ?12 | 雪碧 ? ? ? ? ?|
?| ?15 | 佟小剛 ? ?| ? 4 | ?15 | ? ? ? ? ? ? ? |
?| ? 3 | 王寶強 ? ?| ? 5 | ? 3 | iphone 鍵盤 ? |
?+-----+-----------+-----+-----+---------------+
5 rows in set (0.00 sec)

外連接

說明
########## ##########基本語法######select 表1.欄位[as 別名],表格n.欄位?from 表1 LEFT JOIN 表n on ?條件;######## ####範(fàn)例######select * ?from user left join order_goods ?on ?user.uid = order_goods.uid;#############範(fàn)例說明######以左為左為左為左為############」範(fàn)例說明######以左為左為左為主,查詢哪些使用者未購買過商品,並將使用者資訊顯示出來############

外連接又分為左連接和右鏈接,具體定義如下。

左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄

mysql> select * ?from user left join order_goods ?on user.uid = order_goods.uid;
+-----+-----------+------------+------+ ------+---------------+-----------+
| uid | username ?| password ? | oid ?| uid ?| name | buytime ? |
+-----+-----------+------------+------+----- -+---------------+-----------+
| ?10 | 高小峰? ?| 3124qwqw ? | ? ?1 | ? 10 | 蘋果滑鼠? ? ?| ? 1212313 |
| ? 3 | 手寶強? ?| 1235531 ? ?| ? ?2 | ? ?3 | iphone 12s ? ?| 123121241 |
| ?12 |碧? ? ? ? ?| ?13232333 |
| ?15 | 佟小剛? ?| 3cxvdfs ? ?| ??4 | ? 15 | ? ? ? ? ? ? ? | ?34242123 |
| ? 3 | 王寶強? ?| 1235531 鍵盤? ?| ??5 | ??35531 鍵盤? ?| ??5 | ??31一樣 |?| 123456 ? ? | NULL | NULL | NULL ? ? ? ? ?| ? ? ?NULL |
| ? 2 | 小王二? ?| 245667 ? ? | NULL | NULL | NULL ? ? ? ? ?| ? ? ?NULL |
| ? 4 | 井下??NULL |
| ? 5 | 範(fàn)冰冰? ?| 5abcwa ? ? | NULL | NULL | NULL ? ? ? ? ?| ? ? ?NULL |
#| ? 6 | 黃曉明? ?| abcdeef ? ?| NULL | NULL | NULL ? ? ? ? ?| ? ? ?NULL |
| ???NULL |
| ? 8 | TFBOYS ? ?| abcdwww ? ?| NULL | NULL | NULL ? ? ? ? ?| NULL |
| ? 9 | 安小超? ?| 12tfddwd ? | NULL | NULL | NULL ? ? ? ? ?| ? ? ?NULL |
| ?11 | 李小魯| ? ? ?NULL |
| ?13 | 韓小平? ?| 121rcfwrfq | NULL | NULL | NULL ? ? ? ? ?| ? ? ?NULL |
| ?14 | 宋小康? ?| 123123tcsd?+ NULL?------------+------+------+---------------+------- ----+
16 rows in set (0.00 sec)

右連接:包含所有的右邊表格中的記錄甚至是右邊表格中沒有和它相符的記錄

類別 詳細(xì)解示
#基本語法select 表1.欄位[as 別名],表格n.欄位?from 表1 right JOIN 表n on ?條件;
範(fàn)例select * ?from user right join order_goods ?on ?user.uid = order_goods.uid;




H水平
範(fàn)例說明

查詢商品表中哪些使用者曾經(jīng)購買過商品,並將使用者資訊顯示出來



mysql> select * ?from user right join order_goods ?on ?user.uid = order_goods.uid;

+------+-----------+----------+-----+ -----+---------------+-----------+

| uid ?| username ?| password | oid | uid | name ? ? ? ? ?| buytime ? |

+------+-----------+----------+-----+-----+-- -------------+-----------+

| ? 10 | 高小峰? ?| 3124qwqw | ? 1 | ?10 | 蘋果滑鼠? ? ?| ? 1212313 || 3 | 王寶強? ?| 1235531 ?| ? 2 | ? 3 | iphone 12s ? ?| 123121241 || ? 12 | 李小超 ? | 311aq | 13232333 || ? 15 | 佟小剛? ?| 3cxvdfs ?| ? 4 | ?15 | ? ? ? ? ? ?? | ?34242123 | +------+-----------+-------- --+-----+-----+---------------+-----------+子查詢有時候,當(dāng)我們查詢的時候,需要的條件是另一個select語句的結(jié)果,這時就需要使用子查詢。用於子查詢的關(guān)鍵字包括in、not in、=、!=、exists、not exists等。 類別詳細(xì)解示基本語法 #select 欄位?from 表where 欄位in(條件)#範(fàn)例1select * ?from user where uid in (1,3,4);#範(fàn)例1說明依照id 查詢指定使用者#範(fàn)例2
| ? ?3 | 王寶強? ?| 1235531 ?| ? 5 | ? 3 | iphone 鍵盤? | ?12123413 |5 rows in set (0.00 sec)
###select * ?from user where uid in ( select uid from order_goods);############範(fàn)例2說明######將購買過商品的使用者資訊顯示出來############

範(fàn)例1:

mysql> select * ?from user where uid in (1,3,4);
?+-----+-----------+----------+
# ?| uid | username ?| password |
?+-----+-----------+----------+
# ?| ? 1 | 景甜 ? ? ?| 123456 ? |
?| ? 3 | 王寶強 ? ?| 1235531 ?|
?| ? 4 | 井柏然 ? ?| 123455 ? |
?+-----+-----------+----------+
# 3 rows in set (0.00 sec)

範(fàn)例2:

##mysql> select * ?from user where uid in (select uid from order_goods) ;

?+-----+-----------+----------+
# ?| uid | username ?| password |
?+-----+-----------+----------+
# ?| ?10 | 高小峰 ? ?| 3124qwqw |
?| ? 3 | 王寶強 ? ?| 1235531 ?|
?| ?12 | 李小超 ? ?| 311aqqee |
?| ?15 | 佟小剛 ? ?| 3cxvdfs ?|
?+-----+-----------+----------+
# 4 rows in set (0.00 sec)

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

#記錄聯(lián)合

#使用union 和union all 關(guān)鍵字,將兩個表的資料依照一定的查詢條件查詢出來後,將結(jié)果合併成一起顯示。兩者主要的差異是把結(jié)果直接合併在一起,而 union 是將 union all 後的結(jié)果進行一次distinct,去除重複記錄後的結(jié)果。

類別詳細(xì)解示基本語法 #select語句1 union[all] select語句2範(fàn)例select * ?from user where uid in (1,3,4);範(fàn)例說明將商品表中的使用者資訊和使用者資料表中的使用者資訊的結(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 rows in set (0.00 sec)

繼續(xù)學(xué)習(xí)
||
<?php echo "Hello Mysql"; ?>