<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風格_MySQL

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 18:03:44
        文檔

        MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風格_MySQL

        MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風格_MySQL:bitsCN.com 看看下面三個關(guān)聯(lián)查詢的 SQL 語句有何區(qū)別 SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) SELECT * FROM film JOIN film_actor USING (film_id) SELECT * F
        推薦度:
        導讀MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風格_MySQL:bitsCN.com 看看下面三個關(guān)聯(lián)查詢的 SQL 語句有何區(qū)別 SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) SELECT * FROM film JOIN film_actor USING (film_id) SELECT * F

        bitsCN.com

          看看下面三個關(guān)聯(lián)查詢的 SQL 語句有何區(qū)別?

          SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id)

          SELECT * FROM film JOIN film_actor USING (film_id)

          SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id

          最大的不同更多是語法糖,但有一些有意思的東西值得關(guān)注。

          為了方便區(qū)別,我們將前兩種寫法稱作是 ANSI 風格,第三種稱為 Theta 風格。

          Theta 風格

          在 FROM 短語中列出了關(guān)聯(lián)的表名,而 WHERE 短語則指定如何關(guān)聯(lián)。

          這種寫法被認為是古老的方式,有些時候比較難以理解,請看下面查詢:

          SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id ANDactor_id = 17 AND film.length > 120

          上述查詢列出片長超過 120 分鐘的電影,其中包括演員編號是 17 的條件。別在意查詢結(jié)果,查詢本身如何呢?WHERE 表達式中包含三個條件,要看出哪個條件是關(guān)聯(lián),哪個條件是過濾還是稍費點事的。不過還是相對簡單的,但如果是 5 個表,20 多個條件呢?

          ANSI 風格: ON

          使用 JOIN ... ON 可以將表關(guān)聯(lián)的條件和記錄過濾條件分開,將上面的語句重寫后的結(jié)果如下:

          SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) WHEREactor_id = 17 AND film.length > 120

          看起來清晰許多。

          注意: ON 語句中的括號不是必須的,我個人喜歡這樣寫而已。

          ANSI 風格: USING

          有一種特殊情況,當兩個要關(guān)聯(lián)表的字段名是一樣的,我們可以使用 USING ,可減少 SQL 語句的長度:

          SELECT * FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 ANDfilm.length > 120

          這個時候括號就是必須的了。這種寫法很好,輸入更少的單詞,查詢的性能也非常棒,但還需要注意一些差異。

          USING 和 ON

          下面語句是可行的:

          SELECT film.title, film_id FROM film JOIN film_actor USING (film_id) WHEREactor_id = 17 AND film.length > 120;

          但下面這個就不行:

          SELECT film.title, film_id FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) WHERE actor_id = 17 AND film.length > 120;ERROR 1052 (23000): Column 'film_id' in field list is ambiguous

          因為 USING "知道" film_id 字段在兩個表中都有,所以沒有指定確切的表都沒關(guān)系,兩個值必須一致就是。

          ON 就沒那么智能,你必須指明要關(guān)聯(lián)的表和字段名。

          上面兩個實際的結(jié)果是比較有趣的,當使用 USING 時,字段只在結(jié)果中出現(xiàn)一次:

          SELECT * FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120 LIMIT 1/G

          *************************** 1. row ***************************

          film_id: 96

          title: BREAKING HOME

          description: A Beautiful Display of a Secret Agent And a Monkey who must Battle a Sumo Wrestler in An Abandoned Mine Shaft

          release_year: 2006

          language_id: 1

          original_language_id: NULL

          rental_duration: 4

          rental_rate: 2.99

          length: 169

          replacement_cost: 21.99

          rating: PG-13

          special_features: Trailers,Commentaries

          last_update: 2006-02-15 05:03:42

          actor_id: 17

          last_update: 2006-02-15 05:05:03

          而使用 ON 時,字段就會出現(xiàn)兩次:

          SELECT * FROM film JOIN film_actor ON film.film_id = film_actor.film_id WHERE actor_id = 17 AND film.length > 120 LIMIT 1/G

          *************************** 1. row ***************************

          film_id: 96

          title: BREAKING HOME

          description: A Beautiful Display of a Secret Agent And a Monkey who must Battle a Sumo Wrestler in An Abandoned Mine Shaft

          release_year: 2006

          language_id: 1

          original_language_id: NULL

          rental_duration: 4

          rental_rate: 2.99

          length: 169

          replacement_cost: 21.99

          rating: PG-13

          special_features: Trailers,Commentaries

          last_update: 2006-02-15 05:03:42

          actor_id: 17

          film_id: 96

          last_update: 2006-02-15 05:05:03

          幕后

          MySQL 對兩者的處理方式是相同的,使用 EXPLAIN EXTENDED 我們可以看到:

          EXPLAIN EXTENDED SELECT film.title, film_id FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120/G

          *************************** 1. row ***************************

          ...

          2 rows in set, 1 warning (0.00 sec)

          root@mysql-5.1.51> SHOW WARNINGS/G

          *************************** 1. row ***************************

          Level: Note

          Code: 1003

          Message: select `sakila`.`film`.`title` AS `title`,`sakila`.`film`.`film_id` AS `film_id`

          from `sakila`.`film` join `sakila`.`film_actor`

          where (

          (`sakila`.`film`.`film_id` = `sakila`.`film_actor`.`film_id`)

          and (`sakila`.`film_actor`.`actor_id` = 17)

          and (`sakila`.`film`.`length` > 120)

          )

          最終所有的查詢都被轉(zhuǎn)成了 Theta 風格。

          譯者:就是說這三種方式除了寫法不同外,沒什么區(qū)別。

        bitsCN.com

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風格_MySQL

        MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風格_MySQL:bitsCN.com 看看下面三個關(guān)聯(lián)查詢的 SQL 語句有何區(qū)別 SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) SELECT * FROM film JOIN film_actor USING (film_id) SELECT * F
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲免费一级视频| 一个人晚上在线观看的免费视频| 亚洲入口无毒网址你懂的| 老司机69精品成免费视频| 亚洲综合区小说区激情区| 国产精品亚洲专区一区| 精品国产麻豆免费网站| a毛片在线免费观看| 亚洲人成网站18禁止一区| 美女被免费网站视频在线| 免费一级毛片一级毛片aa| 亚洲AV成人无码网站| 国产午夜免费秋霞影院| 一级做a爰片性色毛片免费网站| 国产乱子影视频上线免费观看| 亚洲精品无AMM毛片| 国产成人高清精品免费软件| 另类专区另类专区亚洲| 亚洲精品一级无码鲁丝片| 国产成人无码精品久久久免费| 亚洲午夜福利精品久久| 中文无码成人免费视频在线观看| 亚洲AV人无码激艳猛片| 亚洲美女视频免费| 亚洲无mate20pro麻豆| 午夜网站免费版在线观看| 无码一区二区三区亚洲人妻| 免费人成网站在线播放| 福利免费在线观看| 亚洲高清视频免费| 全免费a级毛片免费看无码| 免费看美女午夜大片| 国产精品亚洲A∨天堂不卡| 亚欧免费视频一区二区三区 | 久久久久久久岛国免费播放 | 亚洲熟妇无码八AV在线播放| 99精品视频免费观看| 亚洲综合久久一本伊伊区| 免费国产在线观看不卡| 久久免费观看国产精品| 亚洲综合av一区二区三区|