欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
MySQL的聯(lián)結(Join)語(yǔ)法
 

MySQL的聯(lián)結(Join)語(yǔ)法

1.內聯(lián)結、外聯(lián)結、左聯(lián)結、右聯(lián)結的含義及區別:

 

在講MySQLJoin語(yǔ)法前還是先回顧一下聯(lián)結的語(yǔ)法,呵呵,其實(shí)連我自己都忘得差不多了,那就大家一起溫習吧(如果內容有錯誤或有疑問(wèn),可以來(lái)信咨詢(xún):陳朋奕 chenpengyi#gmail.com),國內關(guān)于MySQL聯(lián)結查詢(xún)的資料十分少,相信大家在看了本文后會(huì )對MySQL聯(lián)結語(yǔ)法有相當清晰的了解,也不會(huì )被Oracle的外聯(lián)結的(“+”號)弄得糊涂了。

 

SQL標準中規劃的(Join)聯(lián)結大致分為下面四種:

1.  內聯(lián)結:將兩個(gè)表中存在聯(lián)結關(guān)系的字段符合聯(lián)結關(guān)系的那些記錄形成記錄集的聯(lián)結。

2.  外聯(lián)結:分為外左聯(lián)結和外右聯(lián)結。

左聯(lián)結A、B表的意思就是將表A中的全部記錄和表B中聯(lián)結的字段與表A的聯(lián)結字段符合聯(lián)結條件的那些記錄形成的記錄集的聯(lián)結,這里注意的是最后出來(lái)的記錄集會(huì )包括表A的全部記錄。

右聯(lián)結A、B表的結果和左聯(lián)結B、A的結果是一樣的,也就是說(shuō):

Select A.name B.name From A Left Join B On A.id=B.id

Select A.name B.name From B Right Join A on B.id=A.id執行后的結果是一樣的。

3.全聯(lián)結:將兩個(gè)表中存在聯(lián)結關(guān)系的字段的所有記錄取出形成記錄集的聯(lián)結(這個(gè)不需要記憶,只要是查詢(xún)中提到了的表的字段都會(huì )取出,無(wú)論是否符合聯(lián)結條件,因此意義不大)。

4.無(wú)聯(lián)結:不用解釋了吧,就是沒(méi)有使用聯(lián)結功能唄,也有自聯(lián)結的說(shuō)法。

 

這里我有個(gè)比較簡(jiǎn)便的記憶方法,內外聯(lián)結的區別是內聯(lián)結將去除所有不符合條件的記錄,而外聯(lián)結則保留其中部分。外左聯(lián)結與外右聯(lián)結的區別在于如果用A左聯(lián)結BA中所有記錄都會(huì )保留在結果中,此時(shí)B中只有符合聯(lián)結條件的記錄,而右聯(lián)結相反,這樣也就不會(huì )混淆了。其實(shí)大家回憶高等教育出版社出版的《數據庫系統概論》書(shū)中講到關(guān)系代數那章(就是將笛卡兒積和投影那章)的內容,相信不難理解這些聯(lián)結功能的內涵。

 

2.  MySQL聯(lián)結(Join)的語(yǔ)法

 

MySQL支持Select和某些UpdateDelete情況下的Join語(yǔ)法,具體語(yǔ)法上的細節有:

 

table_references:

    table_reference [, table_reference] …

 

table_reference:

    table_factor

  | join_table

 

table_factor:

    tbl_name [[AS] alias]

        [{USE|IGNORE|FORCE} INDEX (key_list)]

  | ( table_references )

  | { OJ table_reference LEFT OUTER JOIN table_reference

        ON conditional_expr }

 

join_table:

    table_reference [INNER | CROSS] JOIN table_factor [join_condition]

  | table_reference STRAIGHT_JOIN table_factor

  | table_reference STRAIGHT_JOIN table_factor ON condition

  | table_reference LEFT [OUTER] JOIN table_reference join_condition

  | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor

  | table_reference RIGHT [OUTER] JOIN table_reference join_condition

  | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor

 

join_condition:

    ON conditional_expr | USING (column_list)

 

上面的用法摘自權威資料,不過(guò)大家看了是否有點(diǎn)暈呢?呵呵,應該問(wèn)題主要還在于table_reference是什么,table_factor又是什么?這里的table_reference其實(shí)就是表的引用的意思,因為在MySQL看來(lái),聯(lián)結就是一種對表的引用,因此把需要聯(lián)結的表定義為table_reference,同時(shí)在SQL Standard中也是如此看待的。而table_factor則是MySQL對這個(gè)引用的功能上的增強和擴充,使得引用的表可以是括號內的一系列表,如下面例子中的JOIN后面括號:

 

SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

 

這個(gè)語(yǔ)句的執行結果和下面語(yǔ)句其實(shí)是一樣的:

 

SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)

                 ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

 

這兩個(gè)例子不僅讓我們了解了MySQLtable_factortable_reference含義,同時(shí)能理解一點(diǎn)CROSS JOIN的用法,我要補充的是在MySQL現有版本中CROSS JOIN的作用和INNER JOIN是一樣的(雖然在SQL Standard中是不一樣的,然而在MySQL中他們的區別僅僅是INNER JOIN需要附加ON參數的語(yǔ)句,而CROSS JOIN不需要)。

既然說(shuō)到了ON語(yǔ)句,那就解釋一下吧,ON語(yǔ)句其實(shí)和WHERE語(yǔ)句功能大致相當,只是這里的ON語(yǔ)句是專(zhuān)門(mén)針對聯(lián)結表的,ON語(yǔ)句后面的條件的要求和書(shū)寫(xiě)方式和WHERE語(yǔ)句的要求是一樣的,大家基本上可以把ON當作WHERE用。

大家也許也看到了OJ table_reference LEFT OUTER JOIN table_reference這個(gè)句子,這不是MySQL的標準寫(xiě)法,只是為了和ODBCSQL語(yǔ)法兼容而設定的,我很少用,Java的人更是不會(huì )用,所以也不多解釋了。

那下面就具體講講簡(jiǎn)單的JOIN的用法了。首先我們假設有2個(gè)表AB,他們的表結構和字段分別為:

 

A

ID

Name

1

Tim

2

Jimmy

3

John

4

Tom

B

ID

Hobby

1

Football

2

Basketball

2

Tennis

4

Soccer

 

1.  內聯(lián)結:

Select A.Name B.Hobby from A, B where A.id = B.id,這是隱式的內聯(lián)結,查詢(xún)的結果是:

Name

Hobby

Tim

Football

Jimmy

Basketball

Jimmy

Tennis

Tom

Soccer

它的作用和 Select A.Name from A INNER JOIN B ON A.id = B.id是一樣的。這里的INNER JOIN換成CROSS JOIN也是可以的。

2.  外左聯(lián)結

Select A.Name from A Left JOIN B ON A.id = B.id,典型的外左聯(lián)結,這樣查詢(xún)得到的結果將會(huì )是保留所有A表中聯(lián)結字段的記錄,若無(wú)與其相對應的B表中的字段記錄則留空,結果如下:

Name

Hobby

Tim

Football

Jimmy

Basketball,Tennis

John

 

Tom

Soccer

所以從上面結果看出,因為A表中的John記錄的ID沒(méi)有在B表中有對應ID,因此為空,但Name欄仍有John記錄。

3.  外右聯(lián)結

如果把上面查詢(xún)改成外右聯(lián)結:Select A.Name from A Right JOIN B ON A.id = B.id,則結果將會(huì )是:

Name

Hobby

Tim

Football

Jimmy

Basketball

Jimmy

Tennis

Tom

Soccer

這樣的結果都是我們可以從外左聯(lián)結的結果中猜到的了。

說(shuō)到這里大家是否對聯(lián)結查詢(xún)了解多了?這個(gè)原本看來(lái)高深的概念一下子就理解了,恍然大悟了吧(呵呵,開(kāi)玩笑了)?最后給大家講講MySQL聯(lián)結查詢(xún)中的某些參數的作用:

 

1USING (column_list):其作用是為了方便書(shū)寫(xiě)聯(lián)結的多對應關(guān)系,大部分情況下USING語(yǔ)句可以用ON語(yǔ)句來(lái)代替,如下面例子:

 

a LEFT JOIN b USING (c1,c2,c3),其作用相當于下面語(yǔ)句

a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

 

只是用ON來(lái)代替會(huì )書(shū)寫(xiě)比較麻煩而已。

 

2NATURAL [LEFT] JOIN:這個(gè)句子的作用相當于INNER JOIN,或者是在USING子句中包含了聯(lián)結的表中所有字段的Left JOIN(左聯(lián)結)。

 

3STRAIGHT_JOIN:由于默認情況下MySQL在進(jìn)行表的聯(lián)結的時(shí)候會(huì )先讀入左表,當使用了這個(gè)參數后MySQL將會(huì )先讀入右表,這是個(gè)MySQL的內置優(yōu)化參數,大家應該在特定情況下使用,譬如已經(jīng)確認右表中的記錄數量少,在篩選后能大大提高查詢(xún)速度。

 

最后要說(shuō)的就是,在MySQL5.0以后,運算順序得到了重視,所以對多表的聯(lián)結查詢(xún)可能會(huì )錯誤以子聯(lián)結查詢(xún)的方式進(jìn)行。譬如你需要進(jìn)行多表聯(lián)結,因此你輸入了下面的聯(lián)結查詢(xún):

 

SELECT t1.id,t2.id,t3.id

    FROM t1,t2

    LEFT JOIN t3 ON (t3.id=t1.id)

    WHERE t1.id=t2.id;

 

但是MySQL并不是這樣執行的,其后臺的真正執行方式是下面的語(yǔ)句:

 

SELECT t1.id,t2.id,t3.id

    FROM t1,(  t2 LEFT JOIN t3 ON (t3.id=t1.id)  )

    WHERE t1.id=t2.id;

 

這并不是我們想要的效果,所以我們需要這樣輸入:

 

SELECT t1.id,t2.id,t3.id

    FROM (t1,t2)

    LEFT JOIN t3 ON (t3.id=t1.id)

    WHERE t1.id=t2.id;

 

在這里括號是相當重要的,因此以后在寫(xiě)這樣的查詢(xún)的時(shí)候我們不要忘記了多寫(xiě)幾個(gè)括號,至少這樣能避免很多錯誤(因為這樣的錯誤是很難被開(kāi)發(fā)人員發(fā)現的)。如果對上面內容有疑問(wèn)可以來(lái)信查詢(xún):陳朋奕 chenpengyi#gmail.com,轉載請注明出處及作者。



陳朋奕 2005-10-17 22:53
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
MySQL多表關(guān)聯(lián)數據同時(shí)刪除sql語(yǔ)句
mysql數據庫
Delete,Update連表(left join)刪除,更新語(yǔ)法
Mysql查詢(xún)語(yǔ)句之連表查詢(xún)和增刪改查語(yǔ)句補充
十步完全理解SQL
MYSQL更新寫(xiě)入數據—不同于INSERT INTO 的REPLACE INTO語(yǔ)法介紹
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久