天天看點

db2分頁查詢sql語句_SQL語句中的模糊查詢

Sql查詢語句中可以用like關鍵字和通配符進行模糊查詢。

1、like文法

select 字段 from 表名 where字段 Like 條件
           

準備測試用表,并構造些測試資料。

2、--建表語句,建表test_account

-- -建表語句,表test_accountDROP TABLE IF EXISTS `test_account`;CREATE TABLE `test_account` ( `id` int(20) auto_increment, `realname` varchar(500) NOT NULL, `username` varchar(500) NOT NULL, `age` int(10) NOT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB;
           

--構造完畢,查詢目前資料量,COUNT() 函數傳回比對指定條件的行數。

select count(*) from `test_account`
           
db2分頁查詢sql語句_SQL語句中的模糊查詢

3、構造些測試資料

--利用存儲過程構造些測試資料

drop procedure if exists `all_test_account`;CREATE PROCEDURE `all_test_account`(IN n int)BEGIN  DECLARE i INT DEFAULT 1; WHILE (i <= n ) DO insert into `test_account` (realname,username,age) select concat(substring('趙錢孫李周吳鄭王馮陳諸衛蔣沈韓楊朱秦尤許何呂施張孔曹嚴華金魏陶姜戚謝鄒喻柏水窦章雲蘇潘葛奚範彭郎魯韋昌馬苗鳳花方俞任袁柳酆鮑史唐費廉岑薛雷賀倪湯滕殷羅畢郝邬安常樂于時傅皮齊康伍餘元蔔顧孟平黃和穆蕭尹姚邵堪汪祁毛禹狄米貝明臧計伏成戴談宋茅龐熊紀舒屈項祝董粱杜阮藍闵席季麻強賈路婁危江童顔郭梅盛林刁鐘徐邱駱高夏蔡田樊胡淩霍虞萬支柯咎管盧莫經房裘幹解應宗丁宣贲鄧郁單杭洪包諸左石崔吉鈕龔',floor(1+190*rand()),1),substring('明國華建文平志偉東海強曉生光林小民永傑軍金健一忠洪江福祥中正振勇耀春大甯亮宇興寶少劍雲學仁濤瑞飛鵬安亞澤世漢達衛利勝敏群波成榮新峰剛家龍德慶斌輝良玉俊立浩天宏子松克清長嘉紅山賢陽樂鋒智青躍元武廣思雄錦威啟昌銘維義宗英凱鴻森超堅旭政傳康繼翔棟仲權奇禮楠炜友年震鑫雷兵萬星駿倫紹麟雨行才希彥兆貴源有景升惠臣慧開章潤高佳虎根遠力進泉茂毅富博霖順信凡豪樹和恩向道川彬柏磊敬書鳴芳培全炳基冠晖京欣廷哲保秋君勁軒帆若連勳祖錫吉崇鈞田石奕發洲彪鋼運伯滿庭申湘皓承梓雪孟其潮冰懷魯裕翰征謙航士堯标潔城壽楓革純風化逸騰嶽銀鶴琳顯煥來心鳳睿勤延淩昊西羽百捷定琦聖佩麒虹如靖日詠會久昕黎桂玮燕可越彤雁孝憲萌穎藝夏桐月瑜沛誠夫聲冬奎揚雙坤鎮楚水鐵喜之迪泰方同濱邦先聰朝善非恒晉汝丹為晨乃秀岩辰洋然厚燦卓楊钰蘭怡靈淇美琪亦晶舒菁真涵爽雅愛依靜棋宜男蔚芝菲露娜珊雯淑曼萍珠詩璇琴素梅玲蕾豔紫珍麗儀夢倩伊茜妍碧芬兒岚婷菊妮媛蓮娟一',floor(1+400*rand()),1),substring('明國華建文平志偉東海強曉生光林小民永傑軍金健一忠洪江福祥中正振勇耀春大甯亮宇興寶少劍雲學仁濤瑞飛鵬安亞澤世漢達衛利勝敏群波成榮新峰剛家龍德慶斌輝良玉俊立浩天宏子松克清長嘉紅山賢陽樂鋒智青躍元武廣思雄錦威啟昌銘維義宗英凱鴻森超堅旭政傳康繼翔棟仲權奇禮楠炜友年震鑫雷兵萬星駿倫紹麟雨行才希彥兆貴源有景升惠臣慧開章潤高佳虎根遠力進泉茂毅富博霖順信凡豪樹和恩向道川彬柏磊敬書鳴芳培全炳基冠晖京欣廷哲保秋君勁軒帆若連勳祖錫吉崇鈞田石奕發洲彪鋼運伯滿庭申湘皓承梓雪孟其潮冰懷魯裕翰征謙航士堯标潔城壽楓革純風化逸騰嶽銀鶴琳顯煥來心鳳睿勤延淩昊西羽百捷定琦聖佩麒虹如靖日詠會久昕黎桂玮燕可越彤雁孝憲萌穎藝夏桐月瑜沛誠夫聲冬奎揚雙坤鎮楚水鐵喜之迪泰方同濱邦先聰朝善非恒晉汝丹為晨乃秀岩辰洋然厚燦卓楊钰蘭怡靈淇美琪亦晶舒菁真涵爽雅愛依靜棋宜男蔚芝菲露娜珊雯淑曼萍珠詩璇琴素梅玲蕾豔紫珍麗儀夢倩伊茜妍碧芬兒岚婷菊妮媛蓮娟一',floor(1+52*rand()),1)) as realname,concat(substring('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',floor(1+52*rand()),1),substring('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',floor(1+52*rand()),1),substring('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ,floor(1+52*rand()),1)) as username,floor(18 + (RAND() * 9)) as age ; set i=i+1; END WHILE;END;
           

--調用存儲過程

call all_test_account(1000);
           

4、構造些測試資料

構造完畢,查詢目前資料量,COUNT() 函數傳回比對指定條件的行數。

select count(*) from `test_account`;
           

5、查詢執行個體

在搜尋資料庫中的資料時,SQL 通配符可以替代一個或多個字元。SQL 通配符必須與 like 運算符一起使用。SQL提供了四種比對模式:

1、% :表示任意0個或多個字元。可比對任意類型和長度的字元,有些情況下若是中文,請使用兩個百分号(%%)表示。

把realname有姓名中“飛”的記錄全找出來。

select * from test_account where realname like '%飛%';
           

要找出realname中既有“飛”又有“全”的記錄,使用and條件

select * from test_account where realname like '%飛%' AND realname like '%全%'
           

%全%飛%能搜尋出“夏全飛”,但不能搜尋出 “夏飛全”。

select * from test_account where realname like '%全%飛%'
           

2、_ : 表示任意單個字元。比對單個任意字元,它常用來限制表達式的字元長度語句:

找realname中三個字且中間一個字是“全”的;

select * from test_account where realname like '_全_';
           

找realname中三個字且第一個字是“張”的;

select * from test_account where realname like '張__';
           

注:MySQL 、SQLite 隻支援 % 和 _ 通配符,不支援[ ]、 [^ ] 或 [! ] 通配符

3、[ ] :表示括号内所列字元中的一個(類似正規表達式)。指定一個字元、字元串或範圍,要求所比對對象為它們中的任一個。

找出“曾一洪”、“鄭一洪”、“昌一洪”(而不是“曾鄭昌一洪”);

select * from test_account where realname like '[曾鄭昌]一洪'
           

4,[^ ]或者[! ] :表示不在括号所列之内的單個字元。其取值和 [] 相同,但它要求所比對對象為指定字元以外的任一個字元。

找出不姓“曾”,“ 鄭”、“ 王”的;

select * from test_account where realname like '[^曾鄭王]% '
           

除“老1”到“老4”外,尋找到其他的

select * from test_account like '老[^1-4]';