在很多时候并不需要查询所有数据行内容,此时就可以通过WHERE子句筛选要显示的数据行。语法结构:
SELECT [DISTINCT] * | 列名称 [别名],列名称 [别名],... FROM 表名称[别名] [WHERE 过滤条件(s)];
如果要想实现限定查询,那么需要掌握一些列的限定查询的符号,有如下几种:
●关系运算符:>、<、>=、<=、<>(!=)
●逻辑运算符:AND、OR、NOT
●范围运算符:BETWEEN...AND...
●谓词运算符:IN、NOT IN
●空判断:IS NULL、IS NOT NULL
●模糊查询:LIKE
1.关系运算符
范例:
1)要求查询出所有基本工资高于1500的雇员信息
SQL> SELECT * FROM emp WHERE sal>1500;
2)查询Smith的基本信息
SQL> SELECT * FROM emp WHERE ename='SMITH';
在Oracle数据库之中,所有数据需要区分大小写
3)查询职位不是销售人员的雇员编号、姓名、职位
SQL> SELECT empno,ename,job FROM emp WHERE job<>'SALESMAN';
2.逻辑运算符
范例:
1)查询出工资范围在1500-3000之间的雇员信息
SQL> SELECT * FROM emp WHERE sal>=1500 AND sal<=3000;
2)查询工资大于2000或者职位是办事员的所有雇员信息
SQL> SELECT * FROM emp WHERE sal>2000 OR job='CLERK';
不要写过于复杂的逻辑操作
3.范围查询
在进行查询条件过滤的时候可以针对某一个范围的数据进行过滤,使用BETWEEN...AND,语法如下:
BETWEEN 最小值(数字、日期) AND 最大值
此最小值(包含最小值)与最大值(包含最大值)之间的内容都满足条件。
范例:
1)查询工资在1500到2000之间的雇员(包含1500,2000)
SQL> SELECT * FROM emp WHERE sal>=1500 AND sal<=2000;
SQL> SELECT * FROM emp WHERE sal BETWEEN 1500 AND 2000;
第一个查询需要匹配两个条件,而第二个查询只需要匹配一个条件。
2)查询所有在1981年雇佣的雇员
SQL> SELECT * FROM emp WHERE hiredate BETWEEN '01-JAN-1981' AND '31-DEC-1981';
4.空判断
范例:
1)查询领取佣金的雇员信息(佣金不为空)
SQL> SELECT * FROM emp WHERE comm IS NOT NULL;
SQL> SELECT * FROM emp WHERE NOT comm IS NULL;
5.IN操作符
IN操作符类似于BETWEEN...AND,但是BETWEEN...AND是给了一个大的范围,而IN给出的是一个指定的可选范围。
范例:
1)要求查询出雇员编号是7369、7566、7788、9999的雇员操作
SELECT * FROM emp WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999;
SELECT * FROM emp WHERE empno IN(7369,7566,7788,9999);
在指定值查询的过程之中,IN的操作是最简短的。
2)要求查询出雇员编号不是7369、7566、7788、9999的雇员操作
SELECT * FROM emp WHERE empno NOT IN(7369,7566,7788,9999);
SELECT * FROM emp WHERE NOT empno IN(7369,7566,7788,9999);
注意:关于NOT IN与NULL的问题
在使用NOT IN进行范围判断的时候,如果范围里面包含有NULL,那么不会有任何的结果返回。不允许在使用NOT IN查询时,查询内容为NULL。
范例:
1)使用IN操作中包含有NULL
SQL>SELECT * FROM emp WHERE empno IN(7369,7566,7788,NULL); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- ------------ ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7566 JONES MANAGER 7839 02-APR-81 2975 20 7788 SCOTT ANALYST 7566 1 9-APR-87 3000 20
2)使用NOT IN操作中包含有NULL
SQL>SELECT * FROM emp WHERE empno NOT IN(7369,7566,7788,NULL); no rows selected
实际上使用WHERE最大的用处在于控制显示的数据行,再简单一点:别显示全部数据行(如果要显示全部数据行,几乎是宣判了一个程序的死刑)。使用NOT IN的目的是为了查询部分数据行,但是如果有了null(某些数据永远不可能为空),就变成了查询全部了。
6.模糊查询:LIKE
可以在数据库之中执行数据的模糊查询,在使用LIKE的时候可以使用两个通配符。
"_":匹配任意的一位字符
"%":匹配任意的零位、一位或多位字符
范例:
1)查询姓名是以字母以A开头的雇员信息
SQL> SELECT * FROM emp WHERE ename LIKE 'A%';
2)查询姓名的第二个字母是以A开头的雇员信息
SQL> SELECT * FROM emp WHERE ename LIKE '_A%';
3)查询姓名中任意位置包含字母A的雇员信息
SQL> SELECT * FROM emp WHERE ename LIKE '%A%';
说明一:LIKE可以应用在各种数据类型上,不一定非要是字符串。
说明二:在以LIKE模糊查询的时候,如果不设置查询关键字,那么表示查询全部。
来源:https://www.cnblogs.com/muhehe/p/7966547.html