mysql as join_mysql as 别名与 join 多表连接语法
在MySQL中,使用AS關鍵字為字段、表、視圖取別名,或者不用as,用空格隔開:
SELECT (SELECT id a,title b FROM blog c limit 1)d;
使用字段別名,可以幫助我們有效的組織查詢的輸出結果。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在SQL標準中規劃的(Join)聯結大致分為下面四種:
1.內聯結:將兩個表中存在聯結關系的字段符合聯結關系的那些記錄形成記錄集的聯結。
2.外聯結:分為外左聯結和外右聯結。
左聯結A、B表的意思就是將表A中的全部記錄和表B中聯結的字段與表A的聯結字段符合聯結條件的那些記錄形成的記錄集的聯結,這里注意的是最后出來的記錄集會包括表A的全部記錄。
右聯結A、B表的結果和左聯結B、A的結果是一樣的,也就是說:
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.全聯結:將兩個表中存在聯結關系的字段的所有記錄取出形成記錄集的聯結(這個不需要記憶,只要是查詢中提到了的表的字段都會取出,無論是否符合聯結條件,因此意義不大)。
4.無聯結:不用解釋了吧,就是沒有使用聯結功能唄,也有自聯結的說法。
這里我有個比較簡便的記憶方法,
內外聯結的區別是內聯結將去除所有不符合條件的記錄,而外聯結則保留其中部分。
外左聯結與外右聯結的區別在于如果用A左聯結B則A中所有記錄都會保留在結果中,此時B中只有符合聯結條件的記錄,而右聯結相反,這樣也就不會混淆了。
內聯接取交集,外連接取并集。單獨的join語句默認是inner join。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在MySQL現有版本中CROSS JOIN的作用和INNER JOIN是一樣的(雖然在SQL Standard中是不一樣的,然而在MySQL中他們的區別僅僅是INNER JOIN需要附加ON參數的語句,而CROSS JOIN不需要)。
ON語句其實和WHERE語句功能大致相當,只是這里的ON語句是專門針對聯結表的,ON語句后面的條件的要求和書寫方式和WHERE語句的要求是一樣的,大家基本上可以把ON當作WHERE用。
MySQL聯結查詢中的某些參數的作用:
1.USING (column_list):其作用是為了方便書寫聯結的多對應關系,大部分情況下USING語句可以用ON語句來代替,如下面例子:
a LEFT JOIN b USING (c1,c2,c3),其作用相當于下面語句
a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
只是用ON來代替會書寫比較麻煩而已。
2.NATURAL [LEFT] JOIN:這個句子的作用相當于INNER JOIN,或者是在USING子句中包含了聯結的表中所有字段的Left JOIN(左聯結)。
3.STRAIGHT_JOIN:由于默認情況下MySQL在進行表的聯結的時候會先讀入左表,當使用了這個參數后MySQL將會先讀入右表,這是個MySQL的內置優化參數,大家應該在特定情況下使用,譬如已經確認右表中的記錄數量少,在篩選后能大大提高查詢速度。
最后要說的就是,在MySQL5.0以后,運算順序得到了重視,所以對多表的聯結查詢可能會錯誤以子聯結查詢的方式進行。譬如你需要進行多表聯結,因此你輸入了下面的聯結查詢:
SELECT t1.id,t2.id,t3.id
FROM t1,t2
LEFT JOIN t3 ON (t3.id=t1.id)
WHERE t1.id=t2.id;
但是MySQL并不是這樣執行的,其后臺的真正執行方式是下面的語句:
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;
在這里括號是相當重要的,因此以后在寫這樣的查詢的時候我們不要忘記了多寫幾個括號,至少這樣能避免很多錯誤
分享到:
2012-09-20 11:19
瀏覽 2162
評論
總結
以上是生活随笔為你收集整理的mysql as join_mysql as 别名与 join 多表连接语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos6.4 卸载mysql_彻底
- 下一篇: python中view的用法_APIvi