<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **目錄** [TOC] # 1 使用多個表格 在「world」資料庫的「country」表格中,儲存世界上所有的國家資料,其中有一個欄位「Capital」用來儲存首都資料,不過它只是儲存一個編號;另外在「city」表格中,儲存世界上所有的城市資料,它主要的欄位有城市編號和城市的名稱: ![](http://box.kancloud.cn/2015-09-15_55f7e6f95f03e.jpg) 雖然「country」表格自己沒有儲存城市名稱,不過它可以使用「Capital」欄位的值,對照到「city」表格中的「ID」欄位,也可以知道城市的名稱。在這樣的表格設計架構下,如果你想要查詢「所有國家的首都名稱」: ![](http://box.kancloud.cn/2015-09-15_55f7e70477436.jpg) 這樣的查詢需求就稱為「結合查詢」,也就是你要查詢的資料,來自于一個以上的表格,而且兩個表格之間具有上列討論的「對照」情形。 # 2 Inner Join 「Inner join」通常稱為「內部結合」,它可以應付大部份的結合查詢需求,內部結合有兩種寫法,差異在把結合條件設定在「WHERE」子句或「FROM」子句中。 ## 2.1 使用結合條件 下列是在「WHERE」子句中設定結合條件來執行結合查詢的語法: ![](http://box.kancloud.cn/2015-09-15_55f7e70a11d75.jpg) 雖然這里會先介紹使用結合條件的結合查詢,不過不管使用哪一種寫法,在使用結合查詢時都會有一樣的想法。首先是你想要查詢的欄位: ![](http://box.kancloud.cn/2015-09-15_55f7e70a98b05.jpg) 把需要查詢的欄位列在「SELECT」之后,「FROM」子句后面該需要哪一些表格就很清楚了: ![](http://box.kancloud.cn/2015-09-15_55f7e70ae6c68.jpg) 最后把表格與表格之間「對照」的結合條件放在「WHERE」子句中: ![](http://box.kancloud.cn/2015-09-15_55f7e70b444f1.jpg) 這樣的敘述就可以查詢「所有國家的首都名稱」。 ## 2.2 指定表格名稱 在上列的討論中,因為使用到多個表格了,所以在使用表格的欄位時,都特別提醒你要在欄位名稱前面加上表格名稱。其實并不是全部都要指定表格名稱,你只有在一種情況下,才「一定要」在欄位名稱前指定表格名稱: ![](http://box.kancloud.cn/2015-09-15_55f7e70bc81e3.jpg) 在查詢敘述的「FROM」子句中用到的表格,如果有一樣的欄位名稱,而且你在查詢敘述中也用到了這些欄位,就「一定要」在欄位名稱前指定表格名稱,否則都可以省略: ![](http://box.kancloud.cn/2015-09-15_55f7e70c46696.jpg) 所以省略掉一些表格名稱以后,查詢敘述就簡短多了,不過它執行查詢后的結果也是一樣的: ~~~ SELECT Code, Capital, city.Name FROM country, city WHERE Capital = ID ~~~ 如果不小心違反上列的規則,你的查詢敘述在執行以后就會發生錯誤: ![](http://box.kancloud.cn/2015-09-15_55f7e70ca46ad.jpg) ## 2.3 表格別名 如果你想要查詢「國家和首都的人口和比例」: ![](http://box.kancloud.cn/2015-09-15_55f7e71200c7e.jpg) 這樣的結合查詢剛好都使用到兩個表格中,有同樣名稱的欄位,所以你一定要指定表格名稱: ~~~ SELECT country.name, country.Population coPop, city.Name, city.Population ciPop, city.Population / country.Population * 100 Scale FROM country, city WHERE Capital = ID ~~~ 這樣的查詢敘述就會比較長一些,也比較容易打錯;所以在結合查詢的敘述中,通常為幫「FROM」子句后面的表格都取一個「表格別名」: ![](http://box.kancloud.cn/2015-09-15_55f7e712582d9.jpg) 使用表格別名以后: ![](http://box.kancloud.cn/2015-09-15_55f7e712a6347.jpg) 幫「FROM」子句中使用到的表格都取一個表格別名,這樣的查詢敘述通常也可以比較簡短一些了。 ## 2.4 使用「INNER JOIN」 執行結合查詢除了使用上列討論的方式外,還有另外一種結合查詢語法: ![](http://box.kancloud.cn/2015-09-15_55f7e71306017.jpg) 雖然這兩種寫法看起來的差異很大,不過它們的想法會是一樣的。首先是需要查詢的欄位: ![](http://box.kancloud.cn/2015-09-15_55f7e71353ff6.jpg) 接下來是需要用到的表格,不過你要使用「INNER JOIN」把兩個表格「結合」起來: ![](http://box.kancloud.cn/2015-09-15_55f7e713d0703.jpg) 最后是結合條件: ![](http://box.kancloud.cn/2015-09-15_55f7e7143aa85.jpg) 上列使用「INNER JOIN」的結合查詢執行以后,跟之前使用結合條件的結合查詢,所得到的結果是完全一樣的。所以查詢「國家和首都的人口和比例」的結合查詢,也可以改用下列的寫法: ~~~ SELECT a.name, a.Population coPop, b.Name, b.Population ciPop, b.Population / a.Population * 100 FROM country a INNER JOIN city b ON Capital = ID ~~~ 使用「INNER JOIN」的結合查詢還有另外一種選擇: ![](http://box.kancloud.cn/2015-09-15_55f7e71482986.jpg) 下列是使用「ON」或是「USING」來設定結合條件的情況: ![](http://box.kancloud.cn/2015-09-15_55f7e714d5b1c.jpg) 所以如果想要查詢「cmdev」資料庫中,員工資料和他們的部門名稱,就會有三種寫法可以選擇了: ![](http://box.kancloud.cn/2015-09-15_55f7e715a37e9.jpg) # 3 Outer Join 在「cmdev」的員工資料(emp)表格中,部門編號(deptno)欄位是用來儲存員工所屬的部門用的;不過有一些員工并沒有部門編號: ![](http://box.kancloud.cn/2015-09-15_55f7e72049de6.jpg) 所以如果你使用「內部結合」的作法執行下列的查詢,你會發現少了兩個員工的資料: ![](http://box.kancloud.cn/2015-09-15_55f7e72a98885.jpg) 這是因為使用「內部結合」的查詢,一定要符合「結合條件」的資料才會出現: ![](http://box.kancloud.cn/2015-09-15_55f7e72aeb91f.jpg) 如果你想查詢的資料是「包含部門名稱的員工資料,可是沒有分派部門的員工就不用出現了」,那使用「內部結合」就可以完成你的工作了;可是如果你想要查詢的資料是「包含部門名稱的員工資料,沒有分派部門的員工也要出現」,那你就要使用「OUTER JOIN」,這種結合查詢通常稱為「外部結合」: ![](http://box.kancloud.cn/2015-09-15_55f7e73554553.jpg) 除了多一個「LEFT」或「RIGHT」,還有把「INNER」換成「OUTER」外,其它的部份與內部結合的作法都是一樣的。 ## 3.1 LEFT OUTER JOIN 所以在結合查詢的應用中,如果你想要查詢的資料是「包含部門名稱的員工資料,沒有分派部門的員工也要出現」,也就是希望不符合結合條件的資料也要出現的話,就要換成使用「LEFT OUTER JOIN」來執行結合查詢。OUTER JOIN分為LEFT和RIGHT兩種,在這個范例中,要使用LEFT才符合查詢的需求: ![](http://box.kancloud.cn/2015-09-15_55f7e735c6b9b.jpg) ## 3.2 RIGHT OUTER JOIN 其實使用「LEFT OUTER JOIN」或是「RIGHT OUTER JOIN」并沒有差異,以上列的需求來說,要查詢「包含部門名稱的員工資料,沒有分派部門的員工也要出現」,就是要以「cmdev.emp」表格的資料為主,所以下列兩種寫法所得到的結果是完全一樣的: ![](http://box.kancloud.cn/2015-09-15_55f7e7361bc8f.jpg) 了解兩種「OUTER JOIN」的后,下列這兩個看起來會有點混淆的查詢,雖然只有「LEFT」與「RIGHT」的差異,它們所完成的查詢需求,卻是完全不一樣的: ![](http://box.kancloud.cn/2015-09-15_55f7e7367980c.jpg) 所以使用「RIGHT OUTER JOIN」的查詢需求,就成為「部門名稱與該部門的員工資料,沒有員工的部門也要出現」: ![](http://box.kancloud.cn/2015-09-15_55f7e736f08ab.jpg) # 4 合并查詢 在關聯式資料庫中,因為表格的設計,你常會使用結合查詢來取得需要的資料,結合查詢指的是在「一個」查詢敘述中使用「多個」資料表。而現在要討論的「合并、UNION」查詢,指的是把一個以上的查詢敘述所得到的結果合并為一個,有這樣的需求時,你會在多個查詢敘述之間使用「UNION」關鍵字: ![](http://box.kancloud.cn/2015-09-15_55f7e737a2c76.jpg) 以下列這兩個獨立的查詢來說,它們在執行以后會得到各自傳回查詢的紀錄: ![](http://box.kancloud.cn/2015-09-15_55f7e7380c5d9.jpg) 如果使用「UNION」關鍵字把這兩個查詢合并起來的話,就只會得到一個查詢結果,不過這個查詢結果會包含兩個查詢所得到的紀錄: ![](http://box.kancloud.cn/2015-09-15_55f7e73864c41.jpg) 在執行合并查詢的時候,有一些規則要知道與遵守。第一個規則是回傳結果的欄位名稱: ![](http://box.kancloud.cn/2015-09-15_55f7e738b3472.jpg) 第二個規則是所有查詢敘述的欄位數量一定要一樣: ![](http://box.kancloud.cn/2015-09-15_55f7e7392eb3b.jpg) 上列的范例比較看不出為什么要使用合并查詢,一般來說,你大概會因為下列的原因,把原來的查詢敘改用合并查詢的寫法來完成你的需求: ![](http://box.kancloud.cn/2015-09-15_55f7e7398a1ac.jpg)
                  <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>

                              哎呀哎呀视频在线观看