国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL 語句中 where 條件后 寫上1=1 是什么意思

這篇具有很好參考價(jià)值的文章主要介紹了SQL 語句中 where 條件后 寫上1=1 是什么意思。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

SQL 語句中 where 條件后 寫上1=1 是什么意思

程序員在編程過程中,經(jīng)常會在代碼中使用到“where 1=1”,這是為什么呢?

SQL注入

初次看到這種寫法的同學(xué)肯定很納悶,加不加where 1=1,查詢不都一樣嗎?例如:

select * from customers;select * from customers where 1=1;

查詢出來的結(jié)果完全沒有區(qū)別呀。

是的,上面的查詢結(jié)果是沒有區(qū)別,但是這并不是我們要添加它的目的。我們知道1=1表示true,即永真,在SQL注入時配合or運(yùn)算符會得到意向不到的結(jié)果。

例如,當(dāng)我們要刪除客戶名稱為“張三”的記錄,我們可以這樣寫:

delete from customers where name='張三'

這個時候如果在where語句后面加上 or 1=1會是什么后果?

即:

delete from customers where name='張三' or 1=1

本來只要刪除張三的記錄,結(jié)果因?yàn)樘砑恿薿r 1=1的永真條件,會導(dǎo)致整張表里的記錄都被刪除了。

當(dāng)然這種事我們可千萬不能干,也不能讓別人有機(jī)可乘,這里只是為了表述where 1=1的作用之一。

語法規(guī)范

我們在寫代碼的過程中,為了保證語法規(guī)范的時候,也會使用到where 1=1。

我們先看下面這段Java代碼:

String sql="select * from table_name where 1=1";
if( condition 1) {
  sql=sql+"  and  var2=value2";
}
if(condition 2) {
  sql=sql+"  and var3=value3";
}

如果我們不寫1=1的話,當(dāng)condition 1為真時,代碼拼接后被執(zhí)行的SQL代碼如下:

select * from table_name where and var2=value2;

很明顯,這里會出現(xiàn)一個SQL 的語法錯誤:and必須前后都有條件。

有人說我直接把where寫在if語句里面,我就不寫where 1=1。

String sql="select * from table_name";
if( condition 1) {
  sql=sql+" where var2=value2 ";
}
if(condition 2) {
  sql=sql+" where var3=value3";
}

當(dāng)condition 1為真,condition 2為假時,上面被執(zhí)行的SQL代碼為:

select * from table_name where var2=value2;

這個確實(shí)沒有語法錯誤,但是當(dāng)condition 1和condition 2都為真呢?那么SQL語句就變成了這樣:

select * from table_name
where var2=value2
where var3=value3;

很明顯這是不符合SQL語法規(guī)范的。

這里寫上where 1=1 是為了避免where 關(guān)鍵字后面的第一個詞直接就是 “and”而導(dǎo)致語法錯誤,加上1=1后,不管后面有沒有and條件都不會造成語法錯誤了。

拷貝表

在我們進(jìn)行數(shù)據(jù)備份時,也經(jīng)常使用到where 1=1,當(dāng)然其實(shí)這兩可以不寫,寫上之后如果想過濾一些數(shù)據(jù)再備份會比較方便,直接在后面添加and條件即可。

create table  table_name
as   
select * from  Source_table
where   1=1;

復(fù)制表結(jié)構(gòu)

有1=1就會有1<>1或1=2之類的永假的條件,這個在拷貝表的時候,加上where 1<>1,意思就是沒有任何一條記錄符合條件,這樣我們就可以只拷貝表結(jié)構(gòu),不拷貝數(shù)據(jù)了。文章來源地址http://www.zghlxwxcb.cn/news/detail-810192.html

create table  table_name
as   
select  * from   
Source_table where   1 <> 1;

到了這里,關(guān)于SQL 語句中 where 條件后 寫上1=1 是什么意思的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 簡明SQL條件查詢指南:掌握WHERE實(shí)現(xiàn)數(shù)據(jù)篩選

    簡明SQL條件查詢指南:掌握WHERE實(shí)現(xiàn)數(shù)據(jù)篩選

    條件查詢是用于從數(shù)據(jù)庫中根據(jù)特定條件篩選數(shù)據(jù)行的一種方式,它避免了檢索整個表中的數(shù)據(jù)。通常,使用 WHERE 子句來定義過濾條件,只有符合這些條件的數(shù)據(jù)行才會被返回。 SQL中的運(yùn)算符有:=、!=、、 等,用于進(jìn)行條件判斷。 在邏輯運(yùn)算中,常見的運(yùn)算符包括: and:

    2024年02月09日
    瀏覽(57)
  • SQL 語句中 WHERE 1=1 的作用

    SQL 語句中 WHERE 1=1 的作用

    你是否曾在 SELECT 查詢中看到過 WHERE 1=1 條件。我在許多不同的查詢和許多 SQL 引擎中都有看過。這條件顯然意味著 WHERE TRUE,所以它只是返回與沒有 WHERE 子句時相同的查詢結(jié)果。此外,由于查詢優(yōu)化器幾乎肯定會刪除它,因此對查詢執(zhí)行時間沒有影響。那么,WHERE 1=1 的作用是

    2024年02月06日
    瀏覽(16)
  • 【ABAP】OPEN SQL(八)「WHERE語句大全」

    【ABAP】OPEN SQL(八)「WHERE語句大全」

    ?? 作者簡介: THUNDER王,一名熱愛財(cái)稅和SAP ABAP編程以及熱愛分享的博主。目前于江西師范大學(xué)本科在讀,同時任漢碩云(廣東)科技有限公司ABAP開發(fā)顧問。在學(xué)習(xí)工作中,我通常使用偏后端的開發(fā)語言ABAP,SQL進(jìn)行任務(wù)的完成,對SAP企業(yè)管理系統(tǒng),SAP ABAP開發(fā)和數(shù)據(jù)庫具有較

    2024年02月08日
    瀏覽(11)
  • SQL group by、where和having語句用法

    SQL 語句中的 GROUP BY 子句用于將具有相同值的行分組在一起,通常與聚合函數(shù)(如 COUNT、SUM、AVG 等)一起使用。WHERE 子句用于篩選符合條件的行。HAVING 子句則在分組后對分組結(jié)果進(jìn)行進(jìn)一步篩選。 以下是一個使用 SQL 語句中的 GROUP BY、WHERE 和 HAVING 子句的示例: 在這個示例中

    2024年02月07日
    瀏覽(59)
  • ORM 自定義sql,where條件變量值為null,轉(zhuǎn)為:where remark=null是不對的

    ORM 自定義sql,where條件變量值為null,轉(zhuǎn)為:where remark=null是不對的 該如何解決呢? 例子如下: 需要在變量的值為null時,改為: remark is null 這是SQL的語法. 使用ORM自定義sql, 在where條件,使用remark=#{remark @toIsNULL1}才是對的. 代碼參考: https://gitee.com/automvc/bee-exam Bee,一個簡單易用,功能強(qiáng)大的

    2024年02月12日
    瀏覽(21)
  • SQL 語句中 left join 后用 on 還是 where,區(qū)別大了!

    SQL 語句中 left join 后用 on 還是 where,區(qū)別大了!

    目錄 情況 小結(jié) 舉例 ????????前天寫SQL時本想通過 A left B join on and 后面的條件來使查出的兩條記錄變成一條,奈何發(fā)現(xiàn)還是有兩條。 ????????后來發(fā)現(xiàn) join on and 不會過濾結(jié)果記錄條數(shù),只會根據(jù)and后的條件是否顯示 B表的記錄,A表的記錄一定會顯示。 ????????不

    2024年02月14日
    瀏覽(21)
  • 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(三十):數(shù)倉報(bào)表場景?樹形(分層)查詢?nèi)绾闻判??以及如何在樹形查詢中正確的使用where條件

    【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(一):關(guān)于SQL不得不說的那些事 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(二):簡單單表查詢 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(三):SQL排序的那些事 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(四):從執(zhí)行計(jì)劃討論UNION ALL與空字符串UNION與OR的使用注意事項(xiàng) 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列

    2023年04月09日
    瀏覽(28)
  • sql語句轉(zhuǎn)為es查詢條件(elasticsearch-sql使用)

    github源碼地址: https://gitee.com/weiyxiong_admin/elasticsearch-sql/blob/master/src/test/java/org/nlpcn/es4sql/ExplainTest.java 1、添加pom.xml依賴 2、scala 將sql轉(zhuǎn)為es查詢json語句 3、測試 4、查詢返回結(jié)果展示(即步驟三esJSON結(jié)果打?。?5、打開postman

    2024年02月13日
    瀏覽(23)
  • SQL之CASE WHEN函數(shù)語句多條件下使用詳解

    針對CASE WHEN函數(shù)語句,實(shí)現(xiàn)簡單CASE函數(shù)和CASE搜索函數(shù)兩種格式。 同時配合 SUM以及COUNT方法的使用 1、CASE 的兩種格式: ?簡單CASE函數(shù)和CASE搜索函數(shù) 兩種格式示例: 狀態(tài): state 訂單號: orderId 這兩種格式式,可以實(shí)現(xiàn)相同的功能。但是簡單CASE函數(shù)和CASE搜索函數(shù)相比,功能

    2024年02月11日
    瀏覽(38)
  • MySQL 參考文檔:SQL 語句優(yōu)化(SELECT 語句優(yōu)化)之索引條件下推(索引下推)優(yōu)化

    索引下推優(yōu)化官方文檔說明 (Section 8.2.1.5):https://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html 1. 什么是索引下推? qquad 索引條件下推 (Index Condition Pushdown,ICP) 是 MySQL 在使用索引從表中檢索行時的一種優(yōu)化方法。在沒有 ICP 的情況下,存儲引擎遍歷索引以定位基

    2024年02月16日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包