1、如果你什么也沒有輸入的話,sql語句就如下:
目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、五臺網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
select * from tablename where name like '%%';
這樣的話就是 name 等于任何字符都會被查出,當然所有內(nèi)容都會出來了。
2、這不是問題,從查詢的設(shè)計角度看,什么都不輸入自然是要匹配所有數(shù)據(jù),相反輸入了東西就是匹配它了。
*****************
補充:
*****************
如果你想什么都不輸入的時候什么也不返回的話方法如下:
在后臺寫兩個sql,類似如下
if ($name == ""){
$exec="select * from tablename where 1=2";
}else{
$exec="select * from tablename where name like '%$name%'";
}
---
以上,希望對你有所幫助。
a LEFT JOIN b ON a.id = b.id。
a.name LIKE CONCAT(CONCAT("%","param.name"),"%")。
import com.baomidou.mybatisplus.core.metadata.IPage;
dao,Ipageentity pageRecord(Ipageentity page, Param param)
xml,sql語句不需要做顯式分頁,Ipage會代替做。
service,Ipageentity res = dao.pageRecord(new Page(current, size), param); int sum = res.getTotal(); Listentity records = res.getRecords();
在mapper中直接分頁沒法得到數(shù)據(jù)總數(shù),此時可以使用MyBatis的自定義分頁Ipage,Ipageentity page(new Page(current, size)),賦值分頁參數(shù),返回用Ipageentity接收,總數(shù)在Ipage.getTotal()里面,數(shù)據(jù)在Ipage.getRecords()里面。
Ipage會先根據(jù)條件執(zhí)行count(*),再執(zhí)行SQL獲取數(shù)據(jù)。
例子如下:SELCET * FROM T-USER U WHERE CONCAT(U.LASTNAME,U.FIRSTNAME) LIKE '%$LSP_NAME$%'
LASTNAME 字段是姓;
FIRSTNAME字段是名字;
當查詢字段為null時,返回結(jié)果為null。與concat_ws(...)不同。
如果為多個字段同時進行查詢時,使用concat_ws(...)。
select concat_ws(',','11','22','33');
select concat_ws(',','11','22','33',null);都返回11,22,33。
CONCAT_WS() 代表 CONCAT With Separator,是CONCAT()的特殊形式。第一個參數(shù)是其它參數(shù)的分隔符。分隔符的位置放在要連接的兩個字符串之間。分隔符可以是一個字符串,也可以是其它參數(shù)。
CONCAT()可以連接一個或者多個字符串,CONCAT_WS()可以添加分割符參數(shù)。
索引功能
索引是一種特殊的文件(InnoDB 數(shù)據(jù)表上的索引是表空間的一個組成部分),它們包含著對數(shù)據(jù)表里所有記錄的引用指針。索引不是萬能的,索引可以加快數(shù)據(jù)檢索操作,但會使數(shù)據(jù)修改操作變慢。每修改數(shù)據(jù)記錄,索引就必須刷新一次。為了在某種程度上彌補這一缺陷,許多 SQL 命令都有一個 DELAY_KEY_WRITE 項。這個選項的作用是暫時制止 MySQL 在該命令每插入一條新記錄和每修改一條現(xiàn)有之后立刻對索引進行刷新,對索引的刷新將等到全部記錄插入/修改完畢之后再進行。在需要把許多新記錄插入某個數(shù)據(jù)表的場合,DELAY_KEY_WRITE 選項的作用將非常明顯。另外,索引還會在硬盤上占用相當大的空間。因此應(yīng)該只為最經(jīng)常查詢和最經(jīng)常排序的數(shù)據(jù)列建立索引。注意,如果某個數(shù)據(jù)列包含許多重復(fù)的內(nèi)容,為它建立索引就沒有太大的實際效果。
從理論上講,完全可以為數(shù)據(jù)表里的每個字段分別建一個索引,但 MySQL 把同一個數(shù)據(jù)表里的索引總數(shù)限制為16個。
1.InnoDB 數(shù)據(jù)表的索引
與?InnoDB數(shù)據(jù)表相比,在 InnoDB 數(shù)據(jù)表上,索引對 InnoDB 數(shù)據(jù)表的重要性要大得多。在 InnoDB 數(shù)據(jù)表上,索引不僅會在搜索數(shù)據(jù)記錄時發(fā)揮作用,還是數(shù)據(jù)行級鎖定機制的苊、基礎(chǔ)?!皵?shù)據(jù)行級鎖定”的意思是指在事務(wù)操作的執(zhí)行過程中鎖定正在被處理的個別記錄,不讓其他用戶進行訪問。這種鎖定將影響到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE 命令以及 INSERT、UPDATE 和 DELETE 命令。出于效率方面的考慮,InnoDB 數(shù)據(jù)表的數(shù)據(jù)行級鎖定實際發(fā)生在它們的索引上,而不是數(shù)據(jù)表自身上。顯然,數(shù)據(jù)行級鎖定機制只有在有關(guān)的數(shù)據(jù)表有一個合適的索引可供鎖定的時候才能發(fā)揮效力。
2.限制
如果 WHERE 子句的查詢條件里有不等號(WHERE coloum !=),MySQL 將無法使用索引。類似地,如果 WHERE 子句的查詢條件里使用了函數(shù)(WHERE DAY(column)=),MySQL 也將無法使用索引。在 JOIN 操作中(需要從多個數(shù)據(jù)表提取數(shù)據(jù)時),MySQL 只有在主鍵和外鍵的數(shù)據(jù)類型相同時才能使用索引。
如果 WHERE 子句的查詢條件里使用比較操作符 LIKE 和 REGEXP,MySQL 只有在搜索模板的第一個字符不是通配符的情況下才能使用索引。比如說,如果查詢條件是 LIKE 'abc%‘,MySQL 將使用索引;如果查詢條件是 LIKE '%abc’,MySQL 將不使用索引。
在 ORDER BY 操作中,MySQL 只有在排序條件不是一個查詢條件表達式的情況下才使用索引。(雖然如此,在涉及多個數(shù)據(jù)表查詢里,即使有索引可用,那些索引在加快 ORDER BY 方面也沒什么作用)。如果某個數(shù)據(jù)列里包含許多重復(fù)的值,就算為它建立了索引也不會有很好的效果。比如說,如果某個數(shù)據(jù)列里包含的凈是些諸如 “0/1” 或 “Y/N” 等值,就沒有必要為它創(chuàng)建一個索引。
索引類別
1.普通索引
普通索引(由關(guān)鍵字 KEY 或 INDEX 定義的索引)的唯一任務(wù)是加快對數(shù)據(jù)的訪問速度。因此,應(yīng)該只為那些最經(jīng)常出現(xiàn)在查詢條件(WHERE column =)或排序條件(ORDER BY column)中的數(shù)據(jù)列創(chuàng)建索引。只要有可能,就應(yīng)該選擇一個數(shù)據(jù)最整齊、最緊湊的數(shù)據(jù)列(如一個整數(shù)類型的數(shù)據(jù)列)來創(chuàng)建索引。
2.唯一索引
普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。比如說,因為人有可能同名,所以同一個姓名在同一個“員工個人資料”數(shù)據(jù)表里可能出現(xiàn)兩次或更多次。
如果能確定某個數(shù)據(jù)列將只包含彼此各不相同的值,在為這個數(shù)據(jù)列創(chuàng)建索引的時候就應(yīng)該用關(guān)鍵字UNIQUE 把它定義為一個唯一索引。這么做的好處:一是簡化了 MySQL 對這個索引的管理工作,這個索引也因此而變得更有效率;二是 MySQL 會在有新記錄插入數(shù)據(jù)表時,自動檢查新記錄的這個字段的值是否已經(jīng)在某個記錄的這個字段里出現(xiàn)過了;如果是,MySQL 將拒絕插入那條新記錄。也就是說,唯一索引可以保證數(shù)據(jù)記錄的唯一性。事實上,在許多場合,人們創(chuàng)建唯一索引的目的往往不是為了提高訪問速度,而只是為了避免數(shù)據(jù)出現(xiàn)重復(fù)。
3.主索引
在前面已經(jīng)反復(fù)多次強調(diào)過:必須為主鍵字段創(chuàng)建一個索引,這個索引就是所謂的“主索引”。主索引與唯一索引的唯一區(qū)別是:前者在定義時使用的關(guān)鍵字是 PRIMARY 而不是 UNIQUE。
4.外鍵索引
如果為某個外鍵字段定義了一個外鍵約束條件,MySQL 就會定義一個內(nèi)部索引來幫助自己以最有效率的方式去管理和使用外鍵約束條件。
5.復(fù)合索引
索引可以覆蓋多個數(shù)據(jù)列,如像 INDEX (columnA, columnB) 索引。這種索引的特點是 MySQL 可以有選擇地使用一個這樣的索引。如果查詢操作只需要用到 columnA 數(shù)據(jù)列上的一個索引,就可以使用復(fù)合索引 INDEX(columnA, columnB)。不過,這種用法僅適用于在復(fù)合索引中排列在前的數(shù)據(jù)列組合。比如說,INDEX (A,B,C) 可以當做 A 或 (A,B) 的索引來使用,但不能當做 B、C 或 (B,C) 的索引來使用。
索引長度
在為 CHAR 和 VARCHAR 類型的數(shù)據(jù)列定義索引時,可以把索引的長度限制為一個給定的字符個數(shù)(這個數(shù)字必須小于這個字段所允許的最大字符個數(shù))。這么做的好處是可以生成一個尺寸比較小、檢索速度卻比較快的索引文件。在絕大多數(shù)應(yīng)用里,數(shù)據(jù)庫中的字符串數(shù)據(jù)大都以各種各樣的名字為主,把索引的長度設(shè)置為10~15 個字符已經(jīng)足以把搜索范圍縮小到很少的幾條數(shù)據(jù)記錄了。在為 BLOB 和 TEXT 類型的數(shù)據(jù)列創(chuàng)建索引時,必須對索引的長度做出限制;MySQL 所允許的最大索引全文索引文本字段上的普通索引只能加快對出現(xiàn)在字段內(nèi)容最前面的字符串(也就是字段內(nèi)容開頭的字符)進行檢索操作。如果字段里存放的是由幾個、甚至是多個單詞構(gòu)成的較大段文字,普通索引就沒什么作用了。這種檢索往往以的形式出現(xiàn),這對 MySQL 來說很復(fù)雜,如果需要處理的數(shù)據(jù)量很大,響應(yīng)時間就會很長。
這類場合正是全文索引(full-textindex)可以大顯身手的地方。在生成這種類型的索引時,MySQL 將把在文本中出現(xiàn)的所有單詞創(chuàng)建為一份清單,查詢操作將根據(jù)這份清單去檢索有關(guān)的數(shù)據(jù)記錄。全文索引即可以隨數(shù)據(jù)表一同創(chuàng)建,也可以等日后有必要時再使用下面這條命令添加:
ALTER TABLE tablename ADD FULLTEXT(column1,column2)有了全文索引,就可以用 SELECT 查詢命令去檢索那些包含著一個或多個給定單詞的數(shù)據(jù)記錄了。下面是這類查詢命令的基本語法:
SELECT * FROM tablename
WHERE MATCH (column1,column2) AGAINST('word1','word2','word3')
上面這條命令將把 column1 和 column2 字段里有 word1、word2 和 word3 的數(shù)據(jù)記錄全部查詢出來。
注解:InnoDB 數(shù)據(jù)表不支持全文索引。
SQL模糊查詢的語法為
“SELECT column FROM table WHERE column LIKE ';pattern';”。
SQL提供了四種匹配模式:
1. % 表示任意0個或多個字符。如下語句:
SELECT * FROM user WHERE name LIKE ';%三%';
將會把name為“張三”,“三腳貓”,“唐三藏”等等有“三”的全找出來;
2. _ 表示任意單個字符。語句:
SELECT * FROM user WHERE name LIKE ';_三_';
只找出“唐三藏”這樣name為三個字且中間一個字是“三”的;
SELECT * FROM user WHERE name LIKE ';三__';
只找出“三腳貓”這樣name為三個字且第一個字是“三”的;
3. [ ] 表示括號內(nèi)所列字符中的一個(類似與正則表達式)。語句:
SELECT * FROM user WHERE name LIKE ';[張李王]三';
將找出“張三”、“李三”、“王三”(而不是“張李王三”);
如 [ ] 內(nèi)有一系列字符(01234、abcde之類的)則可略寫為“0-4”、“a-e”
SELECT * FROM user WHERE name LIKE ';老[1-9]';
將找出“老1”、“老2”、……、“老9”;
如要找“-”字符請將其放在首位:';張三[-1-9]';
4. [^ ] 表示不在括號所列之內(nèi)的單個字符。語句:
SELECT * FROM user WHERE name LIKE ';[^張李王]三';
將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等;
SELECT * FROM user WHERE name LIKE ';老[^1-4]';
將排除“老1”到“老4”尋找“老5”、“老6”、……、“老9”。
!最后是重點!
由于通配符的緣故,導(dǎo)致我們查詢特殊字符“%”、“_”、“[”、“';”的語句無法正常實現(xiàn),而把特殊字符用“[ ]”括起便可正常查詢。據(jù)此我們寫出以下函數(shù):
function sqlencode(str)
str=replace(str,"';","';';")
str=replace(str,"[","[[]") ';此句一定要在最先
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function