MySQL學習之淺析聯結查詢與集合操作

青灯夜游
發布: 2021-09-18 19:50:22
轉載
2143 人瀏覽過
<p>這篇帶大家了解MySQL中的連結查詢和集合操作,希望對大家有幫助! </p> <p><img src="https://img.php.cn/upload/article/000/000/024/6145d21cb7577613.jpg" alt="MySQL學習之淺析聯結查詢與集合操作" ></p> <h2><strong>聯結查詢</strong></h2> <p>聯結查詢就是指兩張或以上的表之間進行匹配查詢,一般稱之為水平操作,就是最終結果會包含這幾個表中所有的列,MySQL中有三種聯結操作,交叉聯結、內聯結、外聯結。 【相關推薦:<a href="https://www.php.cn/course/list/51.html" target="_blank" textvalue="mysql视频教程">mysql影片教學</a>】</p> <p>交叉聯結叫做<code>CROSS JOIN</code>,他對兩個表執行笛卡兒積,他將回傳兩個表中所有列的組成,例如左表中有n條數據,右表中有m條數據,那麼最終結果就是<code>n*m</code>條,但是也可以自己與自己聯結,那麼最終結果就是<code>n*n</code>條,例如下面語句。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">select * from orders as a cross join orders as b; +---------+--------+---------+--------+ | orderId | userId | orderId | userId | +---------+--------+---------+--------+ | 10007 | 2 | 10001 | 1 | | 10006 | 4 | 10001 | 1 | ..... | 10002 | 1 | 10007 | 2 | | 10001 | 1 | 10007 | 2 | +---------+--------+---------+--------+ 49 rows in set (0.01 sec)</pre><div class="contentsignin">登入後複製</div></div><p>由於orders表中有7條數據,那麼最後將產生49條數據,還有一種寫法是下面這樣的。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">mysql> select * from orders as a ,orders as b;</pre><div class="contentsignin">登入後複製</div></div><p>他們的結果都相同,只是寫法不同,上面的寫法是在1989年,美國國家標準學會對SQL進行的規範,稱之為ANSI SQL 89標準,而第一種寫法是92年規定的。 </p><p>交叉聯結有個用處就是快速產生重複數據,例如下面語句。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">insert orders select a.orderId,a.userId from orders as a ,orders as b limit 10;</pre><div class="contentsignin">登入後複製</div></div><p>下面就是內聯結,分為兩部,首先產生笛卡兒積,然後在根據後面ON的過濾條件來過濾,他產生兩個表中具有相同記錄的值。 </p><p><img src="https://img.php.cn/upload/image/218/908/717/1631965602120211.png" title="1631965602120211.png" alt="1 (2).png"/></p><p>在ON後面除了等於運算子(=) 之外,還可以使用其他運算符,例如大於( <code>></code>)、小於( <code><</code>) 和不等於( <code><></code>) 運算子來構成連結條件。 </p><p>最後一個是OUTER JOIN,可以按照一些過濾條件來匹配表之間的數據,與INNER JOIN不同的是,在通過OUTER JOIN添加的保留表中存在未找到的匹配數據,MySQL支持LEFT OUTER JOIN、RIGHT OUTER JOIN,寫的時候可以省略OUTER 。 </p><p>下面是LEFT JOIN所示圖,LEFT JOIN傳回左表 (table1) 中的所有記錄,以及右表 (table2) 中的符合記錄。 </p><p><img src="https://img.php.cn/upload/image/297/131/340/1631965607545060.png" title="1631965607545060.png" alt="MySQL學習之淺析聯結查詢與集合操作"/></p><p>下面是RIGHT  JOIN所示圖,RIGHT JOIN傳回右邊表 (table2) 中的所有記錄,以及左表 (table1) 中的符合記錄。 </p><p><img src="https://img.php.cn/upload/image/383/403/226/163196561126076MySQL學習之淺析聯結查詢與集合操作" title="163196561126076MySQL學習之淺析聯結查詢與集合操作" alt="MySQL學習之淺析聯結查詢與集合操作"/></p><h2><strong>集合運算</strong></h2><p>MySQL中有個UNION運算符,用於組合2個或多個SELECT結果集,並刪除SELECT語句之間的重複行,使用他時候要遵循以下基本規則:</p><ul><li>所有<code>SELECT</code>語句中出現的列數和順序 必須相同。 </li><li>列也必須具有相同的資料型別。 </li></ul><p>如現在有以下表格</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">CREATE TABLE t1 ( id INT PRIMARY KEY ); CREATE TABLE t2 ( id INT PRIMARY KEY ); INSERT INTO t1 VALUES (1),(2),(3); INSERT INTO t2 VALUES (2),(3),(4);</pre><div class="contentsignin">登入後複製</div></div><p>執行下列SQL</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">SELECT id FROM t1 UNION SELECT id FROM t2;</pre><div class="contentsignin">登入後複製</div></div><p>最終結果是這樣的。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">+----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | +----+ 4 rows in set (0.00 sec)</pre><div class="contentsignin">登入後複製</div></div><p>UNION語句預設會從結果行集中刪除重複的數據,但是,可以使用UNION ALL取得重複記錄。 </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">SELECT id FROM t1 UNION ALL SELECT id FROM t2;</pre><div class="contentsignin">登入後複製</div></div><p>結果如下</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:sql;toolbar:false;">+----+ | id | +----+ | 1 | | 2 | | 3 | | 2 | | 3 | | 4 | +----+ 6 rows in set (0.00 sec)</pre><div class="contentsignin">登入後複製</div></div><p>UNION 和 JOIN 之間的基本差異在於 UNION 水平組合結果集,而 JOIN 語句垂直組合結果集。 </p> <p><img src="https://img.php.cn/upload/image/410/849/290/1631965648883159.png" title="1631965648883159.png" alt="MySQL學習之淺析聯結查詢與集合操作"></p> <blockquote> <p>原文網址:https://juejin.cn/post/7001772087534682143</p> <p>作者:i聽風夜</p> </blockquote> <p>#更多程式相關知識,請造訪:<a href="https://www.php.cn/course.html" target="_blank" textvalue="编程视频">程式設計影片</a>! ! </p>

以上是MySQL學習之淺析聯結查詢與集合操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!