佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 關(guān)于SQL語句中的AND和OR執(zhí)行順序遇到的問題

關(guān)于SQL語句中的AND和OR執(zhí)行順序遇到的問題

熱門標(biāo)簽:網(wǎng)站排名優(yōu)化 服務(wù)外包 百度競價排名 鐵路電話系統(tǒng) 呼叫中心市場需求 地方門戶網(wǎng)站 AI電銷 Linux服務(wù)器

問題

昨天在寫數(shù)據(jù)庫SQL的時候遇到一個問題。問題的根結(jié)在SQL語句的AND和OR關(guān)鍵字的執(zhí)行優(yōu)先級問題。下面就針對這個問題進行一下測試。

場景

1、有一張學(xué)生表Student,表字段包括Id(用戶主鍵)、Name(用戶名)、Grade(年級)、Class(班級)、Sex(性別)。如下:

表結(jié)構(gòu)

2、在表中導(dǎo)入十條測試數(shù)據(jù),如下:

表數(shù)據(jù)

3、現(xiàn)需要查詢出性別為女的1年級女學(xué)生,或者性別為女的2班級女學(xué)生。SQL語句如下:
    select * from student where sex='女' and grade=1 or class=2
但是該sql查詢出來的結(jié)果并不符合要求,執(zhí)行結(jié)果如下:

執(zhí)行結(jié)果

執(zhí)行的結(jié)果中還查詢出了班級為2的男學(xué)生,顯然結(jié)果是不正確的。

4、修改下SQL語句,添加上括號。如下:

select * from student where sex='女' and (grade=1 or class=2)

該sql查詢出來的結(jié)果符合要求

分析

從上面的場景中,問題的關(guān)鍵就在于AND和OR的執(zhí)行順序問題。
查閱資料,關(guān)系型運算符優(yōu)先級高到低為:NOT >AND >OR
如果where 后面有OR條件的話,則OR自動會把左右的查詢條件分開。
就如上面場景中的第一條語句,他的查詢條件分為兩部分(或):

1、sex='女' and grade=1
2、 class=2

這也就是查詢出1年級的女學(xué)生,2班級的學(xué)生。不符合最初查詢的要求。
那么解決辦法就是使用括號區(qū)分執(zhí)行的順序
就如上面場景的第二條語句,查詢條件分為兩部分(并):

1、 sex='女' 
2、 (grade=1 or class=2)

您可能感興趣的文章:
  • SQL語句執(zhí)行順序圖文介紹
  • SQL語句執(zhí)行順序詳解
  • SQL語句執(zhí)行深入講解(MySQL架構(gòu)總覽->查詢執(zhí)行流程->SQL解析順序)
  • 從零開始學(xué)習(xí)SQL查詢語句執(zhí)行順序
  • 一文告訴你Sql的執(zhí)行順序是怎樣的

標(biāo)簽:崇左 衡水 銅川 蘭州 湘潭 黃山 湖南 仙桃

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于SQL語句中的AND和OR執(zhí)行順序遇到的問題》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    含山县| 南开区| 徐水县| 灵石县| 富阳市| 德昌县| 桃源县| 乌拉特中旗| 大安市| 遂溪县| 金平| 资源县| 银川市| 霍林郭勒市| 南宁市| 涞水县| 肥西县| 莱州市| 电白县| 连云港市| 郯城县| 巴彦县| 元江| 湖南省| 琼海市| 海丰县| 林甸县| 台中县| 璧山县| 望江县| 蒲城县| 商水县| 嘉定区| 盈江县| 依兰县| 聂荣县| 贵德县| 徐州市| 敖汉旗| 司法| 鸡东县|