<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[success] # 表的聯結 >SQL 最強大的功能之一就是能在數據檢索查詢的執行中聯結表。 數據是存儲在關系表中的,關系表的設計原則是保證把信息分解為多個表, 一類數據一個表,各表通過某些常用的值互相關聯。 兩個表之間的關聯關系通過外鍵來關聯。 外鍵是某個表中的一列,它包含另外一個表的主鍵值,定義了兩個表之間的 關系。 <br> * * * * * >[danger] ##### 創建聯結 >解釋說明,兩個表相互聯結時,要用where指定他們的關系列,利用select * from 后可以跟多個表,通過查詢多個表找到關系 **有一個user表用來存放用戶名字** ![](https://box.kancloud.cn/595ad33bb8c981cd70305a282002fe38_173x81.png) **有一個uu表 用來存放qq號** ![](https://box.kancloud.cn/a12bfcd2b9da2699b67ec53a85595ecc_168x77.png) **兩表唯一關聯時nid字段,我們用聯合查詢,將表聯結** `SELECT user.nid,user.`userrname`,uu.`qq` FROM USER,uu WHERE user.`nid`=uu.`nid`;` **結果如圖**: ![](https://box.kancloud.cn/441fc7c508528d79d29d1c6cdeceb6fb_276x62.png) >[danger] 聯結常犯錯誤-笛卡爾積 >笛卡爾積是由沒有聯結條件的表關系返回的結果,檢索出的行的數目將是第 一個表中的行數乘以第二個表中的行數,通俗的說關聯的表,無論兩個還多個,他們之間無對應的where條件關系導致,差生數據查詢混亂 `SELECT user.nid,user.`userrname`,uu.`qq` FROM USER,uu ;` 因為沒有限制where 條件導致聯結是,出現重復錯誤數據,實際兩條數據通過,笛卡爾積導致四條 ![](https://box.kancloud.cn/0e59f5cf0b063bcb5c1745838665dc1f_273x93.png) * * * * * <br> >[danger] ##### 內部聯結-inner join.........on >此語句中的 select 與前面的 select 語句相同,但 from 子句不同,這里 兩個表之間的關系是 from 子句的組成部分,以 INNER JOIN 指定。在使用這 種語法時,聯結條件用特定的 ON 子句而不是 where 子句。傳遞給 ON 的實 際條件與傳遞給 where 的相同 **語法:** ` select 列 from 表一 inner join 表二 on 聯結相關連字段 ` **案列:** `SELECT user.nid,user.`userrname`,uu.`qq` FROM USER INNER JOIN uu ON user.nid=uu.`nid` ;` ![](https://box.kancloud.cn/950b476a4ff34c7fd47f1e4441112e6b_247x57.png) **注意:** MySQL 在運行時關聯指定的每個表以處理聯結,這種處理可能非常消 耗資源,因此不要聯結不必要的表。聯結的表越多,性能下降越厲害。 * * * * * <br> >[danger] ##### 自連接 **傳統的子查詢:** 有種情況,一個表中有一個商品vend_id 的列,我們想查找DINTR這個商品在哪個標號,查出的編號下,又有那些物品,整合的sql `SELECT * FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id='DTNTR')` **使用自聯結 :** `SELECT p1.`prod_id`,p1.`prod_name` FROM products AS p1, products AS p2 WHERE p1.vend_id = p2.`vend_id` AND p2.`prod_id`='DTNTR';` **注:** 個人理解,因為自連接兩個表時一樣的 ,我們在where查詢的時候,條件是p2,所以展示應給用p1列來做,因為p2查出來的數據是針對的 * * * * * <br> >[danger] ##### 左連接: >以左邊表為基準,按照過濾條件查找右邊表的記錄,如果匹配到, 那么就組合成一行,并顯示結果,如果沒有匹配到,那么只顯示左邊表的字 段,右邊表中不存在的字段用空值來表示。 >A表所有顯示,如果B中無對應關系,則值為null select A.num, A.name, B.name from A left join B on A.nid = B.nid * * * * * <br> >[danger] ##### 右連接: >作用和左聯結剛好相反,以右邊表為基準,去匹配左邊的表,如果 左邊表字段為空,那么就用空值來表示。 >B表所有顯示,如果B中無對應關系,則值為null select A.num, A.name, B.name from A right join B on A.nid = B.nid
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看