這篇文章將為大家詳細講解有關(guān)如何解決SQL語(yǔ)句中AND和OR執行順序遇到的問(wèn)題,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
場(chǎng)景
1、有一張學(xué)生表Student,表字段包括Id(用戶(hù)主鍵)、Name(用戶(hù)名)、Grade(年級)、Class(班級)、Sex(性別)。如下:
表結構
2、在表中導入十條測試數據,如下:
表數據
3、現需要查詢(xún)出性別為女的1年級女學(xué)生,或者性別為女的2班級女學(xué)生。SQL語(yǔ)句如下:
select * from student where sex='女' and grade=1 or class=2
但是該sql查詢(xún)出來(lái)的結果并不符合要求,執行結果如下:
執行結果
執行的結果中還查詢(xún)出了班級為2的男學(xué)生,顯然結果是不正確的。
4、修改下SQL語(yǔ)句,添加上括號。如下:
select * from student where sex='女' and (grade=1 or class=2)
該sql查詢(xún)出來(lái)的結果符合要求
分析
從上面的場(chǎng)景中,問(wèn)題的關(guān)鍵就在于A(yíng)ND和OR的執行順序問(wèn)題。
查閱資料,關(guān)系型運算符優(yōu)先級高到低為:NOT >AND >OR
如果where 后面有OR條件的話(huà),則OR自動(dòng)會(huì )把左右的查詢(xún)條件分開(kāi)。
就如上面場(chǎng)景中的第一條語(yǔ)句,他的查詢(xún)條件分為兩部分(或):
1、sex='女' and grade=1 2、 class=2
這也就是查詢(xún)出1年級的女學(xué)生,2班級的學(xué)生。不符合最初查詢(xún)的要求。
那么解決辦法就是使用括號區分執行的順序
就如上面場(chǎng)景的第二條語(yǔ)句,查詢(xún)條件分為兩部分(并):
1、 sex='女' 2、 (grade=1 or class=2)
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站