之前的查询,结果是表中所有的记录。如果想要只是显示满足一定条件的记录,就要使用条件查询或者称为限定查询。
条件查询的基本语法:
SELECT * |(具体的列名,如 ename ,empno)
FROM table(表名)
WHERE 限定条件
小记:where字句要紧跟在from字句之后。
例:查询emp表中,工资大于2000的员工的所有信息
SQL> select * from emp where sal > 2000 ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
6 rows selected
在上例中,使用了 > ,在操作条件中,还可以使用 >= ,= ,<= ,<,等操作符号。关于不等号,特别说明一下,使用 != 和<>都是可以的。
例:查询员工号不是7566的雇员信息。
SQL> select * from emp where empno != 7566 ;
SQL> select * from emp where empno <> 7566 ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
13 rows selected
上面两种方式的查询结果都是一样的。
逻辑运算:
1)AND ,逻辑并;
2)OR , 逻辑或;
3)NOT,逻辑否;
例:查询员工部门号为10且工资大于2000的雇员信息。
SQL> select * from emp where deptno = 10 and sal > 2000 ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7839 KING PRESIDENT 1981/11/17 5000.00 10
如果要同时满足两个甚至是多个条件,使用and 连接条件字句。
例:查询员工部门号为10 或者员工工资大于2000 的雇员信息。
SQL> select * from emp where deptno = 10 or sal > 2000 ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
7 rows selected
两个条件之间是一种或者的关系,我们使用逻辑或 OR ,来连接两个条件。
例:查询员工工资大于2000,同时可以领取奖金的员工信息。上面的查询结果中,comm是空的,表示查询结果是null。
SQL> select * from emp where sal > 1000 and comm is not null;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
上面查询的是奖金不为空,所以使用了not ,如果要查询comm为空的雇员信息,则条件改为 comm is null 。
其他比较运算符:
BETWEEN ... ON ...在两个值之间,包括边界
IN(set)值为列表set中的一个
LIKE模糊查询
IS NULL查询空值
between on 语法格式:
字段 between 小值 on 大值
例:查询工资在1500 到 2500 的雇员信息
SQL> select * from emp where sal between 1500 and 2500 ;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
77