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

首頁 > 數據庫 > MySQL > 正文

MySQL連接left join,right join,inner join語句用法

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

在講MySQL的Join語法前還是先回顧一下聯結的語法,呵呵,其實連我自己都忘得差不多了,那就大家一起溫習吧(如果內容有錯誤或有疑問,國內關于MySQL聯結查詢的資料十分少,相信大家在看了本文后會對MySQL聯結語法有相當清晰的了解,也不會被Oracle的外聯結的(“+”號)弄得糊涂了.

在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左連接left join:

一個簡單的連接和一個MySQL左連接是不同的。一個MySQL LEFT JOIN提供了額外的考慮到在左邊的表。

如果做了LEFT JOIN,得到的所有記錄以同樣的方式相匹配,此外,得到一個額外的記錄每個不匹配的記錄,在左表中的聯接 - 從而保證了每一個作者得到關聯(本例子中):

實例,試試下面的例子就明白了LEFT JOIN:

  1. root@host# mysql -u root -p password
  2. Enter password:******* 
  3. mysql> use TUTORIALS; 
  4. Database changed 
  5. mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count 
  6.     -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b 
  7.     -> ON a.tutorial_author = b.tutorial_author; 
  8. +-------------+-----------------+----------------+ 
  9. | tutorial_id | tutorial_author | tutorial_count | 
  10. +-------------+-----------------+----------------+ 
  11. |           1 | John Poul       |              1 | 
  12. |           2 | Abdul S         |           NULL | 
  13. |           3 | Sanjay          |              1 | 
  14. +-------------+-----------------+----------------+ 
  15. rows in set (0.02 sec) 

需要做更多的實踐才能熟悉JOINS,這是一個復雜的概念,在MySQL/SQL將變得更加清晰.

mysql 全連接 join full

以使用多個表中的單一SQL查詢。在MySQL中聯接(join)行為是指兩個或多個表到一個表中可以使用連接在SELECT,UPDATE和DELETE語句中加入MySQL表。我們將看到一個例子LEFT JOIN簡單的MySQL連接。

在命令提示符使用聯接:假設我們兩個表的教程tcount_tbl和tutorials_tbl的完整列表如下.

例子,試試下面的例子:

  1. root@host# mysql -u root -p password
  2. Enter password:******* 
  3. mysql> use TUTORIALS; 
  4. Database changed 
  5. mysql> SELECT * FROM tcount_tbl; 
  6. +-----------------+----------------+ 
  7. | tutorial_author | tutorial_count | 
  8. +-----------------+----------------+ 
  9. | mahran          |             20 | 
  10. | mahnaz          |           NULL | 
  11. | Jen             |           NULL | 
  12. | Gill            |             20 | 
  13. | John Poul       |              1 | 
  14. | Sanjay          |              1 | 
  15. +-----------------+----------------+ 
  16. rows in set (0.01 sec) 
  17. mysql> SELECT * from tutorials_tbl; 
  18. +-------------+----------------+-----------------+-----------------+ 
  19. | tutorial_id | tutorial_title | tutorial_author | submission_date | 
  20. +-------------+----------------+-----------------+-----------------+ 
  21. |           1 | Learn PHP      | John Poul       | 2007-05-24      | 
  22. |           2 | Learn MySQL    | Abdul S         | 2007-05-24      | 
  23. |           3 | JAVA Tutorial  | Sanjay          | 2007-05-06      | 
  24. +-------------+----------------+-----------------+-----------------+ 
  25. rows in set (0.00 sec) 
  26. mysql> 

現在,加入這兩個表我們可以編寫一個SQL查詢,這個查詢會選擇所有的作者從表tutorials_tbl,從tcount_tbl會拿起相應數量的教程.

  1. mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count 
  2.     -> FROM tutorials_tbl a, tcount_tbl b 
  3.     -> WHERE a.tutorial_author = b.tutorial_author; 
  4. +-------------+-----------------+----------------+ 
  5. | tutorial_id | tutorial_author | tutorial_count | 
  6. +-------------+-----------------+----------------+ 
  7. |           1 | John Poul       |              1 | 
  8. |           3 | Sanjay          |              1 | 
  9. +-------------+-----------------+----------------+ 
  10. rows in set (0.01 sec) 
  11. mysql> 

補充一文章,下面是例子分析,表A記錄如下:

  1. aID        aNum  
  2. 1           a20050111  
  3. 2           a20050112  
  4. 3           a20050113  
  5. 4           a20050114  
  6. 5           a20050115 

表B記錄如下:

  1. bID        bName  
  2. 1            2006032401  
  3. 2           2006032402  
  4. 3           2006032403  
  5. 4           2006032404  
  6. 8           2006032408 

創建這兩個表SQL語句如下:

  1. CREATE TABLE  a  
  2. aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,  
  3. aNum char( 20 )  
  4. )  
  5. CREATE TABLE b(  
  6. bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
  7. bName char( 20 )   
  8.  
  9. INSERT INTO a  
  10. VALUES ( 1, 'a20050111' ) , ( 2, 'a20050112' ) , ( 3, 'a20050113' ) , ( 4, 'a20050114' ) , ( 5, 'a20050115' ) ; 
  11.  
  12. INSERT INTO b  
  13. VALUES ( 1, ' 2006032401' ) , ( 2, '2006032402' ) , ( 3, '2006032403' ) , ( 4, '2006032404' ) , ( 8, '2006032408' ) ; 

實驗如下:

1.left join(左聯接),sql語句如下:

  1. SELECT * FROM a  
  2. LEFT JOIN  b   
  3. ON a.aID =b.bID 
  4. //結果如下:  
  5. aID        aNum                   bID           bName  
  6. 1            a20050111         1               2006032401  
  7. 2            a20050112         2              2006032402  
  8. 3            a20050113         3              2006032403  
  9. 4            a20050114         4              2006032404  
  10. 5            a20050115         NULL       NULL  
  11. (所影響的行數為 5 行) 

結果說明:left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.

換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為: A.aID = B.bID). 

B表記錄不足的地方均為NULL.

2.right join(右聯接),sql語句如下:

  1. SELECT  * FROM a  
  2. RIGHT JOING b   
  3. ON a.aID = b.bID 
  4. --結果如下://Vevb.com
  5. aID        aNum                   bID           bName  
  6. 1            a20050111         1               2006032401  
  7. 2            a20050112         2              2006032402  
  8. 3            a20050113         3              2006032403  
  9. 4            a20050114         4              2006032404  
  10. NULL    NULL                   8              2006032408  
  11. --(所影響的行數為 5 行) 

結果說明:仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充.

3.inner join(相等聯接或內聯接),sql語句如下:

  1. SELECT * FROM  a  
  2. INNER JOIN  b  
  3. ON a.aID =b.bID 
  4.  
  5. --等同于以下SQL句:  
  6. SELECT *   
  7. FROM a,b  
  8. WHERE a.aID = b.bID 
  9.  
  10. --結果如下:  
  11. aID        aNum                   bID           bName  
  12. 1            a20050111         1               2006032401  
  13. 2            a20050112         2              2006032402  
  14. 3            a20050113         3              2006032403  
  15. 4            a20050114         4              2006032404 

結果說明:很明顯,這里只顯示出了 A.aID = B.bID的記錄.這說明inner join并不以誰為基礎,它只顯示符合條件的記錄. 

LEFT JOIN操作用于在任何的 FROM 子句中,組合來源表的記錄,使用 LEFT JOIN 運算來創建一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即 

使在第二個(右邊)表中并沒有相符值的記錄.

語法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2  

說明:table1, table2參數用于指定要將記錄組合的表的名稱。 

field1,field2參數指定被聯接的字段的名稱,且這些字段必須有相同的數據類型及包含相同類型的數據,但它們不需要有相同的.

名稱:compopr參數指定關系比較運算符:"=", "<", ">", "<=", ">=" 或 "<>"。 

如果在INNER JOIN操作中要聯接包含Memo 數據類型或 OLE Object 數據類型數據的字段,將會發生錯誤.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泸定县| 巩留县| 义乌市| 大石桥市| 霍山县| 囊谦县| 淮安市| 时尚| 香港 | 得荣县| 竹山县| 安丘市| 江达县| 黑龙江省| 孟津县| 伊川县| 锡林浩特市| 阿城市| 米林县| 濉溪县| 邯郸县| 百色市| 如东县| 龙川县| 比如县| 文安县| 郑州市| 高要市| 屯昌县| 和平县| 龙陵县| 沅江市| 崇阳县| 峡江县| 衡水市| 宿松县| 鹤壁市| 始兴县| 萨迦县| 富源县| 萨迦县|