本篇文章主要介绍SQL的条件查询和过滤,上一次我们介绍了基本的查询语句。由于数据库表包含大量的数据,很少需要检索表中的所有行,通常只会根据特定操作或报告的需要提取部分数据,条件查询也是过滤查询。条件查询是我们最常用的场景,这次我们详细展开说明下条件查询和排序。

关键词:where and or not in order by asc desc distinct like limit

一、条件查询

返回计算机系并且年龄为20岁的学生信息:

SELECT * FROM student WHERE department = '计算机系' AND age = 20;


sqlalchemy 过滤空数据 sql过滤空字段_sqlalchemy 过滤空数据


返回计算机系和信息系的学生信息:

SELECT * FROM student WHERE department='计算机系' OR department='信息系';


sqlalchemy 过滤空数据 sql过滤空字段_asp sql查询过滤空格_02


同时也可以用In来实现,多个或条件,结果一样:

SELECT * FROM student WHERE department IN ('计算机系','信息系');


sqlalchemy 过滤空数据 sql过滤空字段_asp.net怎么实现按条件查询_03


二、查询结果排序

默认系统一般都是按照主键ID进行排序,如果我们需要进行结果按照某种规则排序,使用以下ORDER BY关键词,排序分为ASC和DESC两种,升序和降序两种,可以采用多种排序方式组合,按照顺序来表达先按什么条件排序,再按什么条件排序:

Select * from <表名> where <条件表达式> order by <排序表达式> [ASC|DESC], <排序表达式> [ASC|DESC]

比如要获取所有学生信息按照年龄排序:

SELECT * FROM student ORDER BY age;


sqlalchemy 过滤空数据 sql过滤空字段_asp sql查询字段 过滤空格_04


同时可以按照多个列排序,获取所有学生信息按照年龄排序,如果年龄相同按照性别进行排序:SELECT * FROM student ORDER BY age,sex;


sqlalchemy 过滤空数据 sql过滤空字段_asp.net怎么实现按条件查询_05


排序可以按照正序,或者逆序,分别用asc和desc关键词来处理。比如年龄按照从大到小排序:SELECT * FROM student ORDER BY age DESC;


sqlalchemy 过滤空数据 sql过滤空字段_asp.net怎么实现按条件查询_06


按照列的位置排序,同样的查询使用SELECT * FROM student ORDER BY 3 DESC;

三、查询结果排重

如果我们想看到共有哪些系,但是不想看到重复数据,这时候我们需要用distinct关键词。

SELECT DISTINCT department FROM student ;


sqlalchemy 过滤空数据 sql过滤空字段_sqlalchemy 过滤空数据_07


同样可以应用于多个列,它会作用于所有列,比如SELECT DISTINCT sex,department FROM student ;


sqlalchemy 过滤空数据 sql过滤空字段_asp sql查询字段 过滤空格_08


四、限制结果数量

如果只想返回第一行或者一定数量的行,我们需要使用limit关键词,不同数据库关键词不同,sqlserver使用top,oracle使用rownum,比如默认返回结果前5条:SELECT * FROM student LIMIT 5;


sqlalchemy 过滤空数据 sql过滤空字段_sqlalchemy 过滤空数据_09


指定从哪儿开始以及检索的行数,有的数据库支持offset,这样可以方便的实现分页查询。比如SELECT * FROM student LIMIT 5 OFFSET 3;


sqlalchemy 过滤空数据 sql过滤空字段_asp sql查询过滤空格_10


分页查询要确定每页需要显示的结果数量LIMIT,然后要查询哪一页index,OFFSET计算公式为LIMIT * (index - 1),这样就能正确查询出第index页的记录集。

五、通配符查询

Like关键词和通配符主要用于字符串的匹配和查询条件,比如我们要查询名字中姓张的学生信息,SELECT * FROM student WHERE NAME LIKE '张%';


sqlalchemy 过滤空数据 sql过滤空字段_asp sql查询字段 过滤空格_11


返回no中以952110开头最后一位任意字符的学生信息,SELECT * FROM student WHERE NO LIKE '951210_';


sqlalchemy 过滤空数据 sql过滤空字段_asp.net怎么实现按条件查询_12


%百分号通配符: 表示任何字符出现任意次数 (可以是0次)。

_下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。

不同数据库有所不同,根据情况查询使用。通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长,不建议过渡使用通配符。