<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
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

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

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 11:23:38
        文檔

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

        MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風(fēng)格:在 FROM 短語中列出了關(guān)聯(lián)的表名,而 WHERE 短語則指定如何關(guān)聯(lián)。這種寫法被認(rèn)為是古老的方式,有些時(shí)候比較難以理解,請(qǐng)看下面查 看看下面三個(gè)關(guān)聯(lián)查詢的 SQL 語句有何區(qū)別? SELECT * FROM film JOIN film_actor ON (film.film_i
        推薦度:
        導(dǎo)讀MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風(fēng)格:在 FROM 短語中列出了關(guān)聯(lián)的表名,而 WHERE 短語則指定如何關(guān)聯(lián)。這種寫法被認(rèn)為是古老的方式,有些時(shí)候比較難以理解,請(qǐng)看下面查 看看下面三個(gè)關(guān)聯(lián)查詢的 SQL 語句有何區(qū)別? SELECT * FROM film JOIN film_actor ON (film.film_i

        在 FROM 短語中列出了關(guān)聯(lián)的表名,而 WHERE 短語則指定如何關(guān)聯(lián)。這種寫法被認(rèn)為是古老的方式,有些時(shí)候比較難以理解,請(qǐng)看下面查

        看看下面三個(gè)關(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 風(fēng)格,第三種稱為 Theta 風(fēng)格。

        Theta 風(fēng)格

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

        這種寫法被認(rèn)為是古老的方式,有些時(shí)候比較難以理解,請(qǐng)看下面查詢

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

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

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

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

        看起來清晰許多。

        注意: ON 語句中的括號(hào)不是必須的,我個(gè)人喜歡這樣寫而已。

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

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

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

        USING 和 ON
        下面語句是可行的:

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

        但下面這個(gè)就不行:

        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

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

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

        上面兩個(gè)實(shí)際的結(jié)果是比較有趣的,當(dāng)使用 USING 時(shí),字段只在結(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 時(shí),字段就會(huì)出現(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 對(duì)兩者的處理方式是相同的,使用 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 風(fēng)格。

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

        linux

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

        文檔

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

        MySQL三種關(guān)聯(lián)查詢的方式:ONvsUSINGvs傳統(tǒng)風(fēng)格:在 FROM 短語中列出了關(guān)聯(lián)的表名,而 WHERE 短語則指定如何關(guān)聯(lián)。這種寫法被認(rèn)為是古老的方式,有些時(shí)候比較難以理解,請(qǐng)看下面查 看看下面三個(gè)關(guān)聯(lián)查詢的 SQL 語句有何區(qū)別? SELECT * FROM film JOIN film_actor ON (film.film_i
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲一区精品无码| 吃奶摸下高潮60分钟免费视频| 国产精品亚洲mnbav网站| 亚洲最大免费视频网| 亚洲精品无码专区久久久| 国产成人无码精品久久久久免费| 免费v片在线观看品善网| 亚洲中文字幕久久无码| 四虎影院免费视频| 美国毛片亚洲社区在线观看| 色播在线永久免费视频| 羞羞视频免费观看| 亚洲精品麻豆av| 巨胸狂喷奶水视频www网站免费| 亚洲熟妇av一区二区三区| 免费无码av片在线观看| 成全影视免费观看大全二| 亚洲人成未满十八禁网站| 免费的一级片网站| 污视频网站在线观看免费| 国产L精品国产亚洲区久久| 最近免费mv在线观看动漫| 久久久久久a亚洲欧洲AV| 亚洲成年人免费网站| 亚洲免费网站观看视频| 五月天婷亚洲天综合网精品偷| caoporm超免费公开视频| 亚洲av永久无码精品漫画| 免费福利在线播放| 亚洲av无码专区亚洲av不卡| 亚洲欧洲日产国码高潮αv| 国产一区二区免费视频| 亚洲综合国产精品第一页| 中国毛片免费观看| 亚洲精品在线不卡| 精品国产麻豆免费网站| 免费人成在线观看视频高潮| 亚洲Av高清一区二区三区| 男人的天堂亚洲一区二区三区 | 18国产精品白浆在线观看免费| 亚洲欧美日本韩国|