本篇文章主要介绍SQL的条件查询和过滤,上一次我们介绍了基本的查询语句。由于数据库表包含大量的数据,很少需要检索表中的所有行,通常只会根据特定操作或报告的需要提取部分数据,条件查询也是过滤查询。条件查询是我们最常用的场景,这次我们详细展开说明下条件查询和排序。
关键词:where and or not in order by asc desc distinct like limit
一、条件查询
返回计算机系并且年龄为20岁的学生信息:
SELECT * FROM student WHERE department = '计算机系' AND age = 20;
返回计算机系和信息系的学生信息:
SELECT * FROM student WHERE department='计算机系' OR department='信息系';
同时也可以用In来实现,多个或条件,结果一样:
SELECT * FROM student WHERE department IN ('计算机系','信息系');
二、查询结果排序
默认系统一般都是按照主键ID进行排序,如果我们需要进行结果按照某种规则排序,使用以下ORDER BY关键词,排序分为ASC和DESC两种,升序和降序两种,可以采用多种排序方式组合,按照顺序来表达先按什么条件排序,再按什么条件排序:
Select * from <表名> where <条件表达式> order by <排序表达式> [ASC|DESC], <排序表达式> [ASC|DESC]
比如要获取所有学生信息按照年龄排序:
SELECT * FROM student ORDER BY age;
同时可以按照多个列排序,获取所有学生信息按照年龄排序,如果年龄相同按照性别进行排序:SELECT * FROM student ORDER BY age,sex;
排序可以按照正序,或者逆序,分别用asc和desc关键词来处理。比如年龄按照从大到小排序:SELECT * FROM student ORDER BY age DESC;
按照列的位置排序,同样的查询使用SELECT * FROM student ORDER BY 3 DESC;
三、查询结果排重
如果我们想看到共有哪些系,但是不想看到重复数据,这时候我们需要用distinct关键词。
SELECT DISTINCT department FROM student ;
同样可以应用于多个列,它会作用于所有列,比如SELECT DISTINCT sex,department FROM student ;
四、限制结果数量
如果只想返回第一行或者一定数量的行,我们需要使用limit关键词,不同数据库关键词不同,sqlserver使用top,oracle使用rownum,比如默认返回结果前5条:SELECT * FROM student LIMIT 5;
指定从哪儿开始以及检索的行数,有的数据库支持offset,这样可以方便的实现分页查询。比如SELECT * FROM student LIMIT 5 OFFSET 3;
分页查询要确定每页需要显示的结果数量LIMIT,然后要查询哪一页index,OFFSET计算公式为LIMIT * (index - 1),这样就能正确查询出第index页的记录集。
五、通配符查询
Like关键词和通配符主要用于字符串的匹配和查询条件,比如我们要查询名字中姓张的学生信息,SELECT * FROM student WHERE NAME LIKE '张%';
返回no中以952110开头最后一位任意字符的学生信息,SELECT * FROM student WHERE NO LIKE '951210_';
%百分号通配符: 表示任何字符出现任意次数 (可以是0次)。
_下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。
不同数据库有所不同,根据情况查询使用。通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长,不建议过渡使用通配符。