模糊查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模糊查询相关的知识,希望对你有一定的参考价值。

select * from teacher where '姓名 like %李%'
查询teacher表中姓名字段中姓李的字段
select * from teacher where 姓名 like '李%
查询teacher表中[姓名]字段所有以'李'开头的记录
select * from teacher where 姓名 like %李'
查询teacher表中[姓名]字段所有以'李'结尾的记录
select * from teacher where 姓名 like '李'
查询teacher表中[姓名]字段所有以'李'开头且只有两个字的记录
分别这样写为什么不对,正确的应怎样写,请大虾指教

根据你的问题描述,你所需要的模糊查询的正确写法有如下几种:

1、查询以某字符开头的数据

例如,查询teacher表中[姓名]字段所有以'李'开头的记录可写为:

select * from teacher where 姓名 like '李%'

2、查询以某字符结尾的数据

例如,查询teacher表中[姓名]字段所有以'李'结尾的记录可写为:

select * from teacher where 姓名 like '%李'

3、查询包含某字符的数据

例如,查询teacher表中[姓名]字段所有包含'李'的记录(不论该字符在开头、结尾、中间)可写为:

select * from teacher where 姓名 like '%李%'

注:以上SQL写法是通用性的写法,像Oracle、Sqlserver、mysql等数据库都是支持的。

拓展资料

SQL语句的各种模糊查询:

一、语法:

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

二、关于语法中的条件,SQL提供了四种匹配模式:

1、%:表示任意0个或多个字符。可匹配任意类型和长度的字符。

2、_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

3、[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

4、[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

5、查询内容包含通配符时:由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。

参考技术A select * from teacher where '姓名 like %李%'--正确
查询teacher表中姓名字段中姓李的字段
select * from teacher where 姓名 like '李%---正确
查询teacher表中[姓名]字段所有以'李'开头的记录
select * from teacher where 姓名 like %李'--正确
查询teacher表中[姓名]字段所有以'李'结尾的记录
select * from teacher where 姓名 like '李'--错误
查询teacher表中[姓名]字段所有以'李'开头且只有两个字的记录

错误的那句这样改正
select * from teacher where 姓名 like '李_'本回答被提问者采纳
参考技术B select * from teacher where 姓名 like '李%'
查询teacher表中姓名字段中姓李的字段
select * from teacher where 姓名 like '李%'
查询teacher表中[姓名]字段所有以'李'开头的记录
select * from teacher where 姓名 like '%李'
查询teacher表中[姓名]字段所有以'李'结尾的记录
select * from teacher where 姓名 like '李_'
查询teacher表中[姓名]字段所有以'李'开头且只有两个字的记录
参考技术C 1.查询teacher表中姓名字段中姓李的字段:
select * from teacher where 姓名 like '%李%'

2.查询teacher表中[姓名]字段所有以'李'开头的记录
select * from teacher where 姓名 like '李%'

3.查询teacher表中[姓名]字段所有以'李'结尾的记录
select * from teacher where 姓名 like '%李'

4.查询teacher表中[姓名]字段所有以'李'开头且只有两个字的记录
select * from teacher where 姓名 like '李%' and len(姓名)=2

看看是不是你想要的啊!!

mybatis中的模糊查询

模糊查询被我们片面的理解为只有一种,其实模糊查询查询包括左模糊查询,右模糊查询和整个模糊查询

左模糊查询:

/**
* 左模糊查询
* @param student
* @return
*/
public List<Student> findSomeStudent(Student student);


<!--左模糊查询-->
<select id="findSomeStudent" resultType="student">
SELECT *from Student WHERE name LIKE ‘‘ #{name } ‘%‘ AND age>#{age}
</select>


/**
* 左模糊查询
*/
@Test
public void find() throws Exception{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
IStudentDAO mapper = session.getMapper(IStudentDAO.class);
Student student=new Student();
student.setName("飞");
student.setAge(20);
List<Student> students = mapper.findSomeStudent(student);
for (Student item :students){
System.out.println(item.getName());
}
//提交事务
session.commit();
//关闭会话,释放资源
session.close();
}


右模糊查询
/**
* 右模糊查询
* @param student
* @return
*/
public List<Student> findSomeStudent(Student student);



<!--右模糊查询-->
<select id="findSomeStudent" resultType="student">
SELECT *from Student WHERE name LIKE ‘%‘ #{name } ‘‘ AND age>#{age}
</select>



/**
* 右模糊查询
*/
@Test
public void find() throws Exception{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
IStudentDAO mapper = session.getMapper(IStudentDAO.class);
Student student=new Student();
student.setName("张");
student.setAge(20);
List<Student> students = mapper.findSomeStudent(student);
for (Student item :students){
System.out.println(item.getName());
}
//提交事务
session.commit();
//关闭会话,释放资源
session.close();
}


整个模糊查询

/**
* 整个模糊查询
* @param student
* @return
*/
public List<Student> findSomeStudent(Student student);



<!--整个模糊查询-->
<select id="findSomeStudent" resultType="student">
SELECT *from Student WHERE name LIKE ‘%‘ #{name } ‘%‘ AND age>#{age}
</select>



/**
* 整个模糊查询
*/
@Test
public void find() throws Exception{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
IStudentDAO mapper = session.getMapper(IStudentDAO.class);
Student student=new Student();
student.setName("张");
student.setAge(20);
List<Student> students = mapper.findSomeStudent(student);
for (Student item :students){
System.out.println(item.getName());
}
//提交事务
session.commit();
//关闭会话,释放资源
session.close();
}


模糊查询的sql语句三种形式
前二种不会引起sql注入,第三种会引起sql注入
SELECT  *from Student WHERE  name LIKE  concat(‘%‘,#{name },‘%‘ AND age>#{age})
SELECT  *from Student WHERE  name LIKE ‘%‘ #{name } ‘%‘ AND age>#{age}

SELECT *from Student WHERE name LIKE ‘%${name}%‘ AND age>#{age}
 
 



 
 

以上是关于模糊查询的主要内容,如果未能解决你的问题,请参考以下文章

C# Linq的模糊查询(包含精确模糊查询)

java 中模糊查询

模糊查询

mybatis中的模糊查询

怎样基于Redis实现模糊查询

jsp如何实现模糊查询