国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL Left Join,Right Join語句詳解

2024-07-24 12:39:10
字體:
來源:轉載
供稿:網友

文章收藏了關于MySQL Left Join,Right Join各種查詢語句,下面有需要的同學可以參考一下下.

在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中只有符合聯結條件的記錄,而右聯結相反,這樣也就不會混淆了。其實大家回憶高等教育出版社出版的《數據庫系統概論》書中講到關系代數那章(就是將笛卡兒積和投影那章)的內容,相信不難理解這些聯結功能的內涵。

MySQL支持Select和某些Update和Delete情況下的Join語法,具體語法上的細節有,代碼如下:

  1. table_references: 
  2.  
  3. table_reference [, table_reference] … 
  4.  
  5. table_reference: 
  6.  
  7. table_factor 
  8.  
  9. | join_table 
  10.  
  11. table_factor: 
  12.  
  13. tbl_name [[AS] alias] 
  14.  
  15. [{USE|IGNORE|FORCEINDEX (key_list)] 
  16.  
  17. | ( table_references ) 
  18.  
  19. | { OJ table_reference LEFT OUTER JOIN table_reference 
  20.  
  21. ON conditional_expr } 
  22.  
  23. join_table: 
  24.  
  25. table_reference [INNER | CROSSJOIN table_factor [join_condition] 
  26.  
  27. | table_reference STRAIGHT_JOIN table_factor 
  28.  
  29. | table_reference STRAIGHT_JOIN table_factor ON condition 
  30.  
  31. | table_reference LEFT [OUTERJOIN table_reference join_condition 
  32.  
  33. | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor 
  34.  
  35. | table_reference RIGHT [OUTERJOIN table_reference join_condition 
  36.  
  37. | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor 
  38. --Vevb.com 
  39. join_condition: 
  40.  
  41. ON conditional_expr | USING (column_list) 

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

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

這個語句的執行結果和下面語句其實是一樣的,代碼如下:

  1. SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) 
  2.  
  3. ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c) 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兰县| 东城区| 会东县| 鹤山市| 图木舒克市| 安西县| 太仓市| 岳西县| 永丰县| 湖南省| 庆城县| 依兰县| 崇左市| 海口市| 翼城县| 集贤县| 秀山| 桐梓县| 会理县| 墨玉县| 平和县| 响水县| 阳春市| 平阴县| 山西省| 乌恰县| 三穗县| 廊坊市| 东平县| 乳源| 永泰县| 文安县| 乌海市| 德清县| 洪湖市| 新邵县| 东乡族自治县| 宁波市| 凌源市| 兖州市| 琼中|