最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql查詢語句join、on、where的執(zhí)行順序

 更新時(shí)間:2022年11月16日 10:50:23   作者:lihongbao80  
這篇文章主要介紹了mysql查詢語句join、on、where的執(zhí)行順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MySQL 的執(zhí)行順序

一、典型SELECT語句完整的執(zhí)行順序

1)from子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù);

2)使用on進(jìn)行join連接的數(shù)據(jù)篩選

3)where子句基于指定的條件對(duì)記錄行進(jìn)行篩選;

4)group by子句將數(shù)據(jù)劃分為多個(gè)分組;

5)cube, rollup

6)使用聚集函數(shù)進(jìn)行計(jì)算;

7)使用having子句篩選分組;

8)計(jì)算所有的表達(dá)式;

9)計(jì)算select的字段;

10)使用distinct 進(jìn)行數(shù)據(jù)去重

11)使用order by對(duì)結(jié)果集進(jìn)行排序。

12)選擇TOPN的數(shù)據(jù)

二、from

如果是采用的 關(guān)聯(lián) from tableA, tableB ,這2個(gè)表會(huì)先組織進(jìn)行笛卡爾積,然后在進(jìn)行下面的 where、group by 等操作。

三、on

如果使用left join, inner join 或者 outer full join的時(shí)候,使用on 進(jìn)行條件篩選后,在進(jìn)行join。

看下面的2個(gè)sql 和結(jié)果。2者的區(qū)別僅僅是在on后面的一個(gè)語句在on和where位置的不同。 由此可以看出是先通過on 進(jìn)行條件篩選,然后在join,最后在進(jìn)行where條件篩選。

  • 假如:是先進(jìn)行join,在進(jìn)行on的話,會(huì)產(chǎn)生一個(gè)笛卡爾積,然后在篩選。這樣的left join 和 直連接 沒有任何的區(qū)別。 所以肯定是先on 條件篩選后,在進(jìn)行join。
  • 假如:是在進(jìn)行where 后,在on,在進(jìn)行join, 下面2個(gè)sql的返回結(jié)果應(yīng)該是一樣的。由此可以見,where是針對(duì) join 后的集合進(jìn)行的篩選。

綜上: 先 執(zhí)行on 條件篩選, 在進(jìn)行join, 最后進(jìn)行where 篩選

SELECT DISTINCT a.domain , b.domain
FROM mal_nxdomains_raw a
LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain AND b.date = ‘20160403'
WHERE a.date = ‘20160403'

SELECT DISTINCT a.domain , b.domain
FROM mal_nxdomains_raw a
LEFT JOIN mal_nxdomains_detail b ON a.domain = b.domain #and b.date = ‘20160403'
WHERE a.date = ‘20160403'
AND b.date = ‘20160403'

四、on 條件與where 條件

1、使用位置

on 條件位置在join后面

where 條件在join 與on完成的后面

2、使用對(duì)象

on 的使用對(duì)象是被關(guān)聯(lián)表

where的使用對(duì)象可以是主表,也可以是關(guān)聯(lián)表

3、選擇與使用

主表?xiàng)l件篩選:只能在where后面使用。

被關(guān)聯(lián)表,如果是想縮小join范圍,可以放置到on后面。如果是關(guān)聯(lián)后再查詢,可以放置到where 后面。

如果left join 中,where條件有對(duì)被關(guān)聯(lián)表的 關(guān)聯(lián)字段的 非空查詢,與使用inner join的效果后,在進(jìn)行where 篩選的效果是一樣的。不能起到left join的作用。

五、join 流程

tableA join tableB, 從A表中拿出一條數(shù)據(jù),到B表中進(jìn)行掃描匹配。所以A的行數(shù)決定查詢次數(shù),B表的行數(shù)決定掃描范圍。例如A表100條,B表200表,需要100次從A表中取出一條數(shù)據(jù)到B表中進(jìn)行200次的比對(duì)。

相對(duì)來說從A表取數(shù)據(jù)消耗的資源比較多。所以盡量tableA選擇比較小的表。同時(shí)縮小B表的查詢范圍。

但是實(shí)際應(yīng)用中,因?yàn)槎叻祷氐臄?shù)據(jù)結(jié)果不同,使用的索引也不同,導(dǎo)致條件放置在on 和 where 效率是不一定誰更好。要根據(jù)需求來確定。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • centos7下安裝mysql6初始化安裝密碼的方法

    centos7下安裝mysql6初始化安裝密碼的方法

    這篇文章主要介紹了centos7下安裝mysql6初始化安裝密碼的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 淺談MySQL數(shù)據(jù)同步到 Redis 緩存的幾種方法

    淺談MySQL數(shù)據(jù)同步到 Redis 緩存的幾種方法

    本文主要介紹了淺談MySQL數(shù)據(jù)同步到 Redis 緩存的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • MySQL中觸發(fā)器入門簡(jiǎn)單實(shí)例與介紹

    MySQL中觸發(fā)器入門簡(jiǎn)單實(shí)例與介紹

    本文章來mysql初學(xué)者介紹在mysql怎么創(chuàng)建觸發(fā)器及觸發(fā)器在mysql執(zhí)行順序,下面我來給大家詳細(xì)介紹
    2013-08-08
  • union和子查詢中order?by一起使用導(dǎo)致排序失效問題及解決

    union和子查詢中order?by一起使用導(dǎo)致排序失效問題及解決

    這篇文章主要介紹了union和子查詢中order?by一起使用導(dǎo)致排序失效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 詳解MySQL查詢時(shí)區(qū)分字符串中字母大小寫的方法

    詳解MySQL查詢時(shí)區(qū)分字符串中字母大小寫的方法

    MySQL默認(rèn)是不區(qū)分大小寫的,這個(gè)涉及到collate字符集與校驗(yàn)規(guī)則方面的知識(shí),下面會(huì)講到,這里我們就來詳解MySQL查詢時(shí)區(qū)分字符串中字母大小寫的方法.
    2016-05-05
  • MySQL配置主從服務(wù)器(一主多從)

    MySQL配置主從服務(wù)器(一主多從)

    本文主要介紹了MySQL配置主從服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 去掉mysql連接時(shí)報(bào)警聲音的方法

    去掉mysql連接時(shí)報(bào)警聲音的方法

    這篇文章主要介紹了去掉mysql連接時(shí)報(bào)警聲音的方法,本文直接給出設(shè)置命令和參數(shù),其中起作用的就是1個(gè)-p參數(shù),需要的朋友可以參考下
    2015-01-01
  • MySQL啟動(dòng)報(bào)錯(cuò):InnoDB表空間丟失問題及解決方法

    MySQL啟動(dòng)報(bào)錯(cuò):InnoDB表空間丟失問題及解決方法

    在啟動(dòng)MySQL時(shí),遇到了InnoDB: Tablespace 5975 was not found ,該錯(cuò)誤表明MySQL在啟動(dòng)過程中無法找到指定的 sw_rtu_message_202408.ibd 表空間文件,導(dǎo)致InnoDB存儲(chǔ)引擎無法繼續(xù)操作,本文給大家詳細(xì)介紹了解決方案,需要的朋友可以參考下
    2025-05-05
  • mysql數(shù)據(jù)庫的分區(qū)表示例代碼

    mysql數(shù)據(jù)庫的分區(qū)表示例代碼

    這篇文章主要介紹了mysql數(shù)據(jù)庫的分區(qū)表的相關(guān)資料,文章介紹了兩種創(chuàng)建SQL表分區(qū)的方法,分別是手動(dòng)創(chuàng)建和使用MySQL的定時(shí)事件來自動(dòng)創(chuàng)建分區(qū),手動(dòng)創(chuàng)建分區(qū)時(shí),需要在代碼中判斷分區(qū)并新增,可能會(huì)引入一些問題,需要的朋友可以參考下
    2024-11-11
  • MySQL完整性約束的定義與實(shí)例教程

    MySQL完整性約束的定義與實(shí)例教程

    數(shù)據(jù)完整性約束是對(duì)關(guān)系性模型完整性規(guī)則做某種約束條件,這篇文章主要給大家介紹了關(guān)于MySQL完整性約束的相關(guān)資料,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

双峰县| 甘泉县| 滦平县| 江口县| 伊金霍洛旗| 于田县| 卓尼县| 湘乡市| 汪清县| 元朗区| 锦屏县| 石棉县| 玉山县| 陇南市| 上蔡县| 庄浪县| 临江市| 肇庆市| 阿鲁科尔沁旗| 辽中县| 茌平县| 云林县| 盱眙县| 浮梁县| 左贡县| 潜山县| 建阳市| 德保县| 绥德县| 兰坪| 永修县| 华安县| 鹰潭市| 祁门县| 金山区| 江西省| 永清县| 凤冈县| 常州市| 化隆| 霞浦县|