程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql---多表關聯

mysql---多表關聯

編輯:MySQL綜合教程

首先要介紹一下集合的概念:集合具有無序性、唯一性。

無序性:指集合內部元素沒有相對順序的概念,對於兩個集合而言,只要元素值和元素個數相同則兩個集合相等。

唯一性:指集合內部元素不存在值相等的元素。

\

上圖所示集合是錯誤的,因為有2個‘3’違背了唯一性

\

上圖所示的兩個集合是相同的,集合元素是無序的<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPjxzdHJvbmc+vK+6z7XE1MvL46O6PC9zdHJvbmc+vbu8r6GisqK8r6Giz+CzyzwvcD4KPHA+vbu8r6O6wb249ryvus+5q7my1KrL2Nfps8m1xLyvus88L3A+CjxwPrKivK+jusGsuPa8r7rPy/nT0NSqy9jX6bPJtcS8r7rPPC9wPgo8cD7P4LPLo7rSsrPJtdG/qLb7u/2jrMG9uPa8r7rPy/nT0NSqy9jX6brPtcS8r7rPPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140617/2014061708594924.jpg" alt="\">

集合1*集合2的結果如下:

\

其中(1,3)是集合1中的‘1’和集合2中的‘3’的組合

一張表其實就相當於一個集合,每一行是集合的一個元素

現在有兩表

goods表:包含商品ID,欄目ID,商品名,有8個商品

\

channel表:欄目ID,欄目名,有3個欄目

\

想在想得到一張報價單包含商品ID,商品名,欄目ID,欄目名,該如何去做?

全相乘:笛卡爾積 總共有3*8=24 條記錄

即兩表各個行的所有組合

\

選出其中滿足要求的行

\

雖然得出了正確答案,但是如果goods表和channel表很大的話,如goods表有1W條記錄,channel也有1W條記錄。則需要在內存中生成一張1W*1W的臨時表,而且絕大部分記錄都不是我們所需的。所以全相乘浪費了空間、降低了效率。

左連接:語法 表1 left join 表2 on 條件

以表1為基准選出滿足條件的表2的行

\

右連接:語法 表2 right join 表1 on 條件 等價於 表1 left join 表2 on 條件

所以左右連接往往可以互換,但是右連接有點反邏輯思維,建議選用左連接。

\

內連接:語法 表1 inner join 表2 on 條件


可見左右連接、內連接、全相乘都可以完成所要求的功能,但是全相乘的效率是最低的,因為全相乘生成的是一張很大的臨時表,而且沒有索引。

以左連接為例 “A left join B on 條件” 其實相當於一張臨時表,包含A表和B表所有的字段,以及滿足條件的B的所有的行。而且後面可以接where 等子句。

多表聯查:

A ,B,C,D表關聯

A left join B on 條件1 left join C on 條件2 left join D on 條件3

下篇博文,再詳細介紹左右連接、內連接之間的區別和聯系。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved