<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 在 MySQL 中連接表 > 原文: [http://zetcode.com/databases/mysqltutorial/joins/](http://zetcode.com/databases/mysqltutorial/joins/) 在 MySQL 教程的這一部分中,我們將連接 MySQL 中的表。 關系數據庫的真正力量和收益來自于連接表。 SQL `JOIN`子句合并數據庫中兩個或多個表中的記錄。 基本上有兩種連接類型:`INNER`和`OUTER`。 在本教程的這一部分中,我們將使用`Customers`和`Reservations`表。 ```sql mysql> SELECT * FROM Customers; +------------+-------------+ | CustomerId | Name | +------------+-------------+ | 1 | Paul Novak | | 2 | Terry Neils | | 3 | Jack Fonda | | 4 | Tom Willis | +------------+-------------+ ``` 這些是`Customers`表中的值。 ```sql mysql> SELECT * FROM Reservations; +----+------------+------------+ | Id | CustomerId | Day | +----+------------+------------+ | 1 | 1 | 2009-11-22 | | 2 | 2 | 2009-11-28 | | 3 | 2 | 2009-11-29 | | 4 | 1 | 2009-11-29 | | 5 | 3 | 2009-12-02 | +----+------------+------------+ ``` 這些是`Reservations`表中的值。 `Customers`和`Reservations`都有`CustomerId`列。 它是關系列。 如果兩個表中的名稱相同,則可以使用`USING (CustomerId) syntax`。 如果名稱不同,則說我們有`CustomerId`和`CId`,我們將使用`ON Customers.CustomerId = Reservations.CId`語法。 ## 內連接 內連接是最常見的連接類型。 這也是默認的連接。 內連接僅從數據庫表中選擇具有匹配值的記錄。 我們有內連接的三種類型:`INNER JOIN`,`NATURAL INNER JOIN`和`CROSS INNER JOIN`。 `INNER`關鍵字可以省略。 ### 內連接 ```sql mysql> SELECT Name, Day FROM Customers AS C JOIN Reservations -> AS R ON C.CustomerId=R.CustomerId; +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Paul Novak | 2009-11-29 | | Jack Fonda | 2009-12-02 | +-------------+------------+ 5 rows in set (0.00 sec) ``` 在此`SELECT`語句中,我們選擇了所有已進行預訂的客戶。 保羅·諾瓦克(Paul Novak)和特里·尼爾斯(Terry Neils)提出了兩項??保留。 杰克·方達(Jack Fonda)制造了一個。 湯姆·威利斯(Tom Willis)失蹤了,他尚未做出任何保留。 請注意,我們省略了`INNER`關鍵字。 該語句等效于以下語句: ```sql mysql> SELECT Name, Day FROM Customers, Reservations -> WHERE Customers.CustomerId=Reservations.CustomerId; +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Paul Novak | 2009-11-29 | | Jack Fonda | 2009-12-02 | +-------------+------------+ ``` 我們得到相同的數據。 ### 交叉內連接 `CROSS INNER JOIN`將一個表中的所有記錄與另一表中的所有記錄組合在一起。 這種連接幾乎沒有實用價值。 它也稱為記錄的笛卡爾積。 ```sql mysql> SELECT Name, Day FROM Customers CROSS JOIN Reservations; +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Paul Novak | 2009-11-28 | | Paul Novak | 2009-11-29 | | Paul Novak | 2009-11-29 | | Paul Novak | 2009-12-02 | | Terry Neils | 2009-11-22 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Terry Neils | 2009-11-29 | | Terry Neils | 2009-12-02 | | Jack Fonda | 2009-11-22 | ... ``` 使用以下 SQL 語句可以達到相同的結果: ```sql SELECT Name, Day FROM Customers, Reservations; ``` ## 外連接 外連接不需要兩個連接表中的每個記錄都具有匹配的記錄。 外連接有三種類型。 左外連接,右外連接和全外連接。 在創建教程時,MySQL 不支持全外連接。 如前所述,內連接是最常見的連接。 外連接對于查找孤立記錄可能很有用。 如果一個人沒有預訂,是顧客嗎? 如果我們無法與客戶匹配,預訂是否有效? ### 左外連接 即使與右表不匹配,`LEFT OUTER JOIN`也將從左表返回所有值。 在這樣的行中,將有`NULL`值。 換句話說,左外連接返回左表中的所有值,以及右表中的匹配值。 注意,可以省略`OUTER`關鍵字。 ```sql mysql> SELECT Name, Day FROM Customers LEFT JOIN Reservations -> ON Customers.CustomerId=Reservations.CustomerId; +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Paul Novak | 2009-11-29 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Jack Fonda | 2009-12-02 | | Tom Willis | NULL | +-------------+------------+ ``` 在這里,我們有所有預訂的客戶,還有一位沒有預訂的客戶。 他的行中有`NULL`值。 我們可以使用`USING`關鍵字獲得相同的結果。 這是因為關系列在兩個表中具有相同的名稱。 SQL 語句將不再那么冗長。 ```sql mysql> SELECT Name, Day FROM Customers LEFT JOIN Reservations -> USING (CustomerId); +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Paul Novak | 2009-11-29 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Jack Fonda | 2009-12-02 | | Tom Willis | NULL | +-------------+------------+ ``` 結果相同,但 SQL 語句較短。 ### 右外連接 `RIGHT OUTER JOIN`和`RIGHT JOIN`相同。 它提供了兩個表中所有記錄的匹配以及正確表的所有可能性。 右側孤立記錄在左側顯示`NULL`。 ```sql mysql> SELECT Name, Day FROM Customers RIGHT JOIN -> Reservations USING (CustomerId); +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Paul Novak | 2009-11-29 | | Jack Fonda | 2009-12-02 | +-------------+------------+ ``` 這是兩個表的正確連接的輸出。 右側表的所有記錄(預訂)在左側均具有匹配的記錄(客戶)。 ## 自然連接 自然連接將兩個具有相同名稱的表中的所有列鏈接在一??起。 在`ustomers`和`Reservations`表中,有一個名為`CustomerId`的列。 ### 自然內連接 `NATURAL INNER JOIN`自動使用所有匹配的列名進行連接。 在我們的表中,兩個表中都有一個名為`CustomerId`的列。 ```sql mysql> SELECT Name, Day FROM Customers NATURAL JOIN Reservations; +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Paul Novak | 2009-11-29 | | Jack Fonda | 2009-12-02 | +-------------+------------+ ``` 我們得到相同的數據。 SQL 語句不太冗長。 ### 自然左外連接 `NATURAL LEFT OUTER JOIN`提供表中所有匹配的記錄以及左表中的所有其他記錄。 它會自動使用所有匹配的列名進行連接。 ```sql mysql> SELECT Name, Day FROM Customers -> NATURAL LEFT JOIN Reservations; +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Paul Novak | 2009-11-29 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Jack Fonda | 2009-12-02 | | Tom Willis | NULL | +-------------+------------+ ``` 結果相同,但擊鍵次數更少。 ### 自然右外連接 `NATURAL RIGHT OUTER JOIN`提供表中的所有匹配記錄以及右表中的所有其他記錄。 它會自動使用匹配的列名進行連接。 ```sql mysql> SELECT Name, Day FROM Customers -> NATURAL RIGHT JOIN Reservations; +-------------+------------+ | Name | Day | +-------------+------------+ | Paul Novak | 2009-11-22 | | Terry Neils | 2009-11-28 | | Terry Neils | 2009-11-29 | | Paul Novak | 2009-11-29 | | Jack Fonda | 2009-12-02 | +-------------+------------+ ``` ## 快速回顧 接下來,我們將創建兩個小表來回顧我們在這里學到的東西。 ```sql mysql> CREATE TABLE AA(A INTEGER); mysql> CREATE TABLE BB(B INTEGER); mysql> INSERT INTO AA VALUES(1); mysql> INSERT INTO AA VALUES(2); mysql> INSERT INTO AA VALUES(3); mysql> INSERT INTO AA VALUES(4); mysql> INSERT INTO BB VALUES(3); mysql> INSERT INTO BB VALUES(4); mysql> INSERT INTO BB VALUES(5); mysql> INSERT INTO BB VALUES(6); mysql> SELECT * FROM AA; +------+ | A | +------+ | 1 | | 2 | | 3 | | 4 | +------+ mysql> SELECT * FROM BB; +------+ | B | +------+ | 3 | | 4 | | 5 | | 6 | +------+ ``` 我們創建了兩個表,并填充了數值數據。 表`AA`具有兩個唯一編號(1、2),表`BB`也具有兩個唯一編號(5、6)。 他們共享兩個數字(3、4)。 ### 內連接 ```sql mysql> SELECT * FROM AA JOIN BB ON A = B; +------+------+ | A | B | +------+------+ | 3 | 3 | | 4 | 4 | +------+------+ ``` 這是兩個表上的`INNER JOIN`。 我們僅從兩個表中獲得匹配的值。 ### 左外連接 ```sql mysql> SELECT * FROM AA LEFT JOIN BB ON A = B; +------+------+ | A | B | +------+------+ | 1 | NULL | | 2 | NULL | | 3 | 3 | | 4 | 4 | +------+------+ ``` 這是兩個表上的`LEFT OUTER JOIN`。 我們獲得匹配的值以及左表中沒有數學記錄的值。 ### 右外連接 ```sql mysql> SELECT * FROM AA RIGHT JOIN BB ON A = B; +------+------+ | A | B | +------+------+ | 3 | 3 | | 4 | 4 | | NULL | 5 | | NULL | 6 | +------+------+ ``` 這是兩個表上的`RIGHT OUTER JOIN`。 我們得到匹配的值,再加上右表中沒有匹配記錄的值。 在 MySQL 教程的這一部分中,我們將連接表。
                  <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>

                              哎呀哎呀视频在线观看