SQL限定查询
WHERE
运算符
- 关系运算:>、<、=、!=(<>)
- 范围运算:BETWEEN…AND
- 空判断:IS NULL、IS NOT NULL
- IN判断:IN、NOT、EXISTS()(复杂查询)
- 模糊查询:LIKE、NOT LIKE
各关系运算符之间可用逻辑运算符(AND、OR)进行连接。
NO
查找工资低于2000的雇员信息:
SELECT *
FROM EMP
WHERE NOT SAL > 2000;
BETWEEN…AND
主要功能是进行范围的查询,效率比关系与逻辑的组合更高一些。
WHERE 字段|数值 BETWEEN 最小值 AND 最大值
查询出工资在1500~3000的雇员信息:
SELECT *
FROM EMP
WHERE SAL BETWEEN 1500 AND 3000;
日期判断
查询所有在1981年雇佣的雇员信息:
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN '01-1月-81' AND '31-12月 -1981';
IS NULL & IS NOT NULL
在数据库里,关系可以判断数据,但null既不是字符串,也不是数字,所以在SQL中只能够通过IS NULL与IS NOT NULL来判断是否为空。
查询奖金为NULL的雇员信息:
SELECT *
FROM EMP
WHERE COMM IS NULL;
IN
IN指的是根据一个指定的范围进行数据查询。
1)查询出雇员编号是7369、7566、7788、9999的雇员信息:
SELECT *
FROM EMP
WHERE EMPNO IN(7369,7566,7788,9999);
2)IN和NOT IN
在使用NOT IN的时候如果查找的数据范围之中包含有NULL值,那么不会有任何的结果返回,IN操作无此操作。
SELECT *
FROM EMP
WHERE EMPNO NOT IN(7369,7566,7788,9999,null);
结果不会有任何数据返回。所以使用NOT IN操作时要保证没有null出现。
LIKE
实现模糊查询,使用LIKE必须使用一下两个匹配符号:
- “_”:匹配任意的一位符号;
- “%”:匹配任意的符号(包含匹配0位、1位、多位)。
查询所有雇员姓名中以字母A开头的雇员信息:
SELECT *
FROM EMP
WHERE ENAME LIKE 'A%';
注意:
- 如果在使用LIKE进行限定查询的时候,没有设置任何关键字,那么表示查询全部。
- LIKE可以在任意的数据类型(数值、字符串、日期等)上使用(原生支持)。
查询排序
1)语法格式及执行顺序
【③选出所需的数据列】SELECT [DISTINCT] *|列 [别名], 列 [别名], 列 [别名]…..
【①确定数据来源】FROM 表名称 [别名]
【②筛选数据】[WHERE 限定条件(s)]
【④数据排序】[ORDER BY 排序字段[ASC|DESC], 排序字段[ASC|DESC], …..];
由于ORDER BY子句在SELECT之后执行,所以可以使用别名。
- ASC:升序(默认);
- DESC:降序,从高到低。
2)查询所有的雇员信息,按工资从高到低排序:
SELECT *
FROM EMP
ORDER BY SAL DESC;
排序可以在任意数据类型上进行。
3)查询所有的雇员信息,按雇佣日期从早到晚排序:
SELECT *
FROM EMP
ORDER BY HIREDATE;
4)混合排序
按照工资由高到低排序,如果相同,则按雇用日期由早到晚排序:
SELECT *
FROM EMP
ORDER BY SAL DESC, HIREDATE;
查询出所有办事员的编号、姓名、职位、年薪,按年薪由高到低排序:
SELECT EMPNO,ENAME,JOB,SAL*12 INCOME
FROM EMP
WHERE JOB = 'CLERK'
ORDER BY INCOME DESC;