最近做web的时候遇到一个问题,在对列表数据进行查询时,会有多个查询条件,有些查询条件有数据,有些查询条件则为空,某个查询条件为空时则要默认查询此字段下的全部数据,这样的SQL查询语句该怎么写呢?以下介绍两种写法。

1. 朴素的写法:

select * fromwhere (字段=条件 or 条件='')

        这条SQL语句的意思就是当条件不为空时SQL语句等价于:select * from 表 where 字段=条件; 当条件为空时SQL语句等价于:select * from 表 where ''='';这样就实现了当查询条件为空时默认查询全部数据,当查询结果非空时则查询对应的数据。

下面是一个简单的例子:

在这里插入图片描述
        这是一张简单的学生信息表,假设查询时允许输入的条件有两个,分别是sex和math,假设用户只输入的sex的值’F’,并没有输入math对应的值,那么就应该对表中sex的值为’F’的数据进行查询,因为math输入的值为空,则默认查询math等于任何值的数据,则SQL语句的编写应该如下:

SET @sex='F';
SET @math='';
SELECT * FROM student_test WHERE (sex=@sex OR @sex='') AND (math=@math OR @math='');

查询的结果:

在这里插入图片描述

2. 运用sql的like关键字实现模糊查询功能

实现上述查询功能的SQL语句用like关键字实现:

SELECT * FROM student_test WHERE (字段 LIKE '%条件%');

其中“%”表示可以为任意字符,这句SQL语句也不难理解,这样一样可以处理条件为空的情况。

依旧是处理上面的例子,以下是运用like关键字的SQL语句:

SELECT * FROM student_test WHERE (sex LIKE '%F%') AND (math LIKE '%%');

查询的结果:

在这里插入图片描述

        这样就实现了当查询条件为空时默认查询全部数据,不为空是则按照条件进行查询。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐