文章导览:
- 条件查询:条件表达式、逻辑表达式、范围查询、空值判断、模糊查询(like、匹配符)
- 排序查询:语法、执行顺序、特点、不同使用方式示例
一、条件查询(where子句)
数据库表中包含大量的数据,在实际应用中,通常只会根据需要查询特定数据。在select语句中,数据根据where子句指定的筛选条件进行过滤。
- 语法:select <查询列表> from <表名> where <筛选条件>;
- 执行顺序:表→筛选条件→查询列表
1. 第一类:按照条件表达式筛选
例1:查询最低工资小于5000元的工种名称和最低工资数目
例2:查询工种名称不为(Marketing Manager)的工种信息
Q:where子句中的条件为什么有的值包括在单引号内,有的值未包括?
A:单引号用来限定字符串。如果将值与 字符串类型的列进行比较,就需加引号。如果将值用与数值类型的列进行比较,则不用引号。
2. 第二类:按照逻辑表达式筛选
作用:连接多个条件表达式
例3:查询工资在8000元到15000元之间的工种信息
例4:查询工资小于5000元,或者大于20000元的工种信息
例5:查询部工种名称不是president的工种信息
① 关于or操作符:许多DBMS在where子句中使用or操作符时,当第一个条件得到满足时,就不再计算第二个条件(不管是否满足,相应行都将被检索) ②优先级:通过使用圆括号()对操作符进行明确分组,以确定处理优先级
3. 第三类:范围查询
(1)between and
含义:在……之间,等价于>= and <=
特点:包含临界值,between+小的值,and+大的值
例6:查询最低工资在1000元到5000元之间的工种信息
(2)in
含义:判断某字段的值是否属于in列表中的某一项(相当于= or =)
特点:
- 提高语句简洁度
- in列表的值类型必须统一或兼容(兼容指的是可以转换)
- in列表中不支持通配符
例7:查询工种编号是IT_PRG、AD_VP 、AD_PRES中的工种信息
4. 第四类:空值检查( is null 和 is not null)
NULL:无值(no value),指的是此处没有值,与字段包含0、空字符串不同
特点:=或者<>不能用于判断null值;is null 或is not null可以判断null值
例8:查询没有最低工资,但标明最高工资的工种信息
安全等于<=>与IS NULL的区别: ① is null:仅仅可以判断null值,可读性较高 ② <=>:既可以判断NULL值,又可以判断普通的数值,可读性低
5. 第五类:模糊查询(Like操作符)
前面所述的所有条件查询都是针对已知值,但是如果要搜索工种名称中包含manager的工种,用上述查询肯定不行,这时,我们就需要利用通配符,创建比较特定数据的搜索模式。
通配符:用来匹配(值的一部分)的特殊字符。
例9:查询工种名称中包含“manager”的工种信息
例10:查询工种编号中第二个字符为C,第四个字符为M的工种信息
转义符号:在字符前加 或 在字符前加【任意字母】其后加escape‘任意字母’;
例11:查询工种编号中第三个字符为_的工种信息
通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索
二、排序查询(order by子句)
关系数据库设计理论认为:如不明确规定排序顺序,则不应假定检索出的数据顺序有任何意义
1. 语法:
select <查询列表> from <表名> where <筛选条件> order by <排序列表> ASC|DESC
2. 执行顺序:
表→筛选条件→查询列表→排序
3. 特点:
- ASC代表的是升序,DESC代表的是降序。不写的话,默认是升序ASC
- order by子句中可支持单个字段、多个字段、表达式、别名、函数
- order by子句一般是放在查询语句的最后面,但limit子句除外
4. order by子句使用示例:
首先,先说明一下本示例使用的数据表字段含义:
例12:【按单个字段排序】查询员工信息,要求工资从高到底进行排序
例13:【按多个字段排序】查询员工信息,要求先按照工资升序,再按照员工编号降序
注意:ASC、DESC均只应用到直接位于其前面的列
例14:【按表达式排序】查询员工的信息和年薪,要求按照年薪降序
例15:【按别名排序】查询员工的信息和年薪,要求按照年薪降序
例16:【按函数排序】查询员工的姓名和工资 ,要求按照姓名的长度降序