Peripateticism

Yuens' blog

View the Project on GitHub

header

限定查询的SQL语法

内容参考《李兴华Oracle数据库》的限定查询部分(链接见文末参考),本节主要包括:[toc]

限定查询用来控制行。

简单查询最大的问题在于可以显示一张数据表中的所有数据,但很多情况下并不需要所有数据,往往需要做一些过滤,而这样的查询就属于限定查询。限定查询的语法如下:

SELECT [DISTINCT] * | 列 [别名], 列 [别名], … FROM 表名称 [别名] [WHERE 条件(s)] 步骤三:控制要显示的数据列
步骤一:确定数据源
步骤二:根据判断条件选择参与的数据行

注:中括号都是可选的。

在使用WHERE子句操作的时候可以进行条件判断,而对于条件的判断主要使用如下的运算:

  1. (>、<、>=、<=、<>、!=);
  2. 范围运算符(BETWEEN…AND);
  3. IN子句;
  4. LIKE子句;
  5. 空判断。

而且在进行限定查询的时可使用以下的逻辑运算:

1.关系运算

关系运算是最简单的运算符号,使用的符号有:“>、<、>=、<=、<>、!=”。其中不等于有两种表示(“<>”或“!=”)

1.1 范例:要求查询出所有的基本工资高于2000的雇员信息(sal为基本工资)

SELECT *
FROM emp
WHERE sal>2000;

1.2 范例:查询工资小于等于1600的全部雇员信息。

SELECT *
FROM emp
WHERE sal<=1600;

1.3 范例:查询SMITH的雇员信息。

SELECT *
FROM emp
WHERE ename=’smith’;
SELECT *
FROM emp
WHERE ename=’SMITH’;

在Oracle中数据是区分大小写的,像一些系统发现密码是区分大小写的情况,非常适合于Oracle保存。

1.4 范例:查询所有职位不是销售人员的信息

销售人员是看职位的数据,职位的字段是job,而现在的关系是取反,不是等于。

SELECT *
FROM emp
WHERE job<>’SALESMAN’;

SELECT *
FROM emp
WHERE job!=’SALESMAN’;

两种符号都可以实现不等于,根据开发者个人决定。

2. 逻辑运算

2.1 AND连接操作

在WHERE子句中是可以同时编写多个条件的,但多个条件之间必须使用逻辑连接。

AND 条件AND条件AND条件 è所有条件同时满足
OR 条件OR条件OR条件 è所有条件只要有一个满足即可

2.1.1 范例:要求查询出的所有销售人员并且工资高于1200的所有雇员

SELECT *
FROM emp
WHERE job=’SALESMAN’ AND sal>1200;

2.1.2 范例:查询出工资范围在1200-3000之间的数据(包含1200和3000)

SELECT *
FROM emp
WHERE sal>1200 AND sal>=3000;

2.1.4 范例:查询出部门为10的经理

SELECT *
FROM emp
WHERE job=’MANAGER’ AND deptno=10;

2.2 OR连接操作

2.2.1 范例:要求查询出工资高于3000,或者职位是办事员的全部雇员信息

SELECT *
FROM emp
WHERE job=’CLERK’ OR sal>3000;

2.3 NOT取反操作

正常情况下,如果1>0,返回结果是TRUE,若加上NOT,则结果变为FALSE,即对原本的判断结果进行取反。

2.3.1 范例:观察取反——查询出所有职位不是办事员的信息

SELECT *
FROM emp
WHERE NOT job=’CLERK’;

若觉得NOT不好用,可以用!=或者<>。

所有的逻辑运算可以在任何的WHERE运算之中使用,进行条件的连接。

2.4 取值范围:BETWEEN…AND

如果现在知道了某一个范围的两个值(最大,最小),那么就可以写为:

字段 BETWEEN 最小值 AND 最大值

在进行计算过程中也会包含了最大和最小的两个值的判断。

2.4.1 范例:查询出所有工资范围在1200~3000之间的雇员信息(包含1200和3000)

这时是一个范围,所以面对范围不再需要复杂的AND连接,直接用BETWEEN:

SELECT *
FROM emp
WHERE sal BETWEEN 1200 AND 3000;

2.4.2 范例:观察不分数据类型的判断

但是通过之前的程序发现一个特点:所有的关系运算符是不区分数据类型的。比方下面两个判断:

  1. SELECT * FROM emp WHERE ename>’SMITH’;
  2. SELECT * FROM emp WHERE sal>1200;

无论字符串或数字类型,都可使用这些运算符判断,所以BETWEEN…AND也可以,即所有的符号都支持字符串、数字、日期型数据的操作。

2.4.3 范例: 查询所有在1981年雇佣的雇员信息

范围:’1981-01-01’(’01-1月-1981’)~’1981-12-31’(’31-12月-81’)

SELECT *
FROM emp
WHERE hiredate BETWEEN ’01-1月-1981’ AND ’31-12月-81’;

所有的符号都不分判断的数据类型。比方字符串也可用BETWEEN…AND。

3. 参考