SQL限定查询

◇◆丶佛笑我妖孽 提交于 2020-04-03 17:06:14

在很多时候并不需要查询所有数据行内容,此时就可以通过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模糊查询的时候,如果不设置查询关键字,那么表示查询全部。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!