日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql as join_mysql as 别名与 join 多表连接语法

發(fā)布時(shí)間:2023/12/2 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql as join_mysql as 别名与 join 多表连接语法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在MySQL中,使用AS關(guān)鍵字為字段、表、視圖取別名,或者不用as,用空格隔開:

SELECT (SELECT id a,title b FROM blog c limit 1)d;

使用字段別名,可以幫助我們有效的組織查詢的輸出結(jié)果。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在SQL標(biāo)準(zhǔn)中規(guī)劃的(Join)聯(lián)結(jié)大致分為下面四種:

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

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

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

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

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 執(zhí)行后的結(jié)果是一樣的。

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

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

這里我有個比較簡便的記憶方法,

內(nèi)外聯(lián)結(jié)的區(qū)別是內(nèi)聯(lián)結(jié)將去除所有不符合條件的記錄,而外聯(lián)結(jié)則保留其中部分。

外左聯(lián)結(jié)與外右聯(lián)結(jié)的區(qū)別在于如果用A左聯(lián)結(jié)B則A中所有記錄都會保留在結(jié)果中,此時(shí)B中只有符合聯(lián)結(jié)條件的記錄,而右聯(lián)結(jié)相反,這樣也就不會混淆了。

內(nèi)聯(lián)接取交集,外連接取并集。單獨(dú)的join語句默認(rèn)是inner join。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在MySQL現(xiàn)有版本中CROSS JOIN的作用和INNER JOIN是一樣的(雖然在SQL Standard中是不一樣的,然而在MySQL中他們的區(qū)別僅僅是INNER JOIN需要附加ON參數(shù)的語句,而CROSS JOIN不需要)。

ON語句其實(shí)和WHERE語句功能大致相當(dāng),只是這里的ON語句是專門針對聯(lián)結(jié)表的,ON語句后面的條件的要求和書寫方式和WHERE語句的要求是一樣的,大家基本上可以把ON當(dāng)作WHERE用。

MySQL聯(lián)結(jié)查詢中的某些參數(shù)的作用:

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

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

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

只是用ON來代替會書寫比較麻煩而已。

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

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

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

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

FROM t1,t2

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

WHERE t1.id=t2.id;

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

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;

在這里括號是相當(dāng)重要的,因此以后在寫這樣的查詢的時(shí)候我們不要忘記了多寫幾個括號,至少這樣能避免很多錯誤

分享到:

2012-09-20 11:19

瀏覽 2162

評論

總結(jié)

以上是生活随笔為你收集整理的mysql as join_mysql as 别名与 join 多表连接语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。