模糊查询sql怎么写(模糊查询的sql语句用法详解)

 分类:IT知识时间:2022-10-27 07:31:02点击:


Sql查询语句中可以用like关键字和通配符进行模糊查询。

1、like语法

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

准备测试用表,并构造些测试数据。

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

-- -建表语句,表test_account DROP 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` 

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]';
除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址: