oracle实验9-11:使用where和order by子句
where和order by子句
语法
SELECT *|{[DISTINCT] 列名|表达式[别名][,...]}
FROM表名
[WHERE 条件];
where一定要放在from子句的后面
符合条件的行会被筛选出来
order by放在最后,用来排序显示结果
比较运算符
- =>
- >=
- <
- <=
- <>
- between...and...
- in(列表)
- like
- is null
逻辑运算符
- and
- or
- not
实验9:显示表的部分行和部分列,使用where子句过滤出想要的行
SQL> select deptno,ename from emp where deptno=10;
DEPTNO ENAME
---------- ----------
10 CLARK
10 KING
10 MILLER
SQL> select * from emp where ename='KING'; --字符串要单引,字符串大小写敏感,日期格式敏感
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7839 KING PRESIDENT 17-11月-81 5000 10
between...and... 确定范围,在两个值之间(包含上下界)
SQL> select ename,sal from emp where sal between 1000 and 3000;
ENAME SAL
---------- ----------
ALLEN 1601
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
TURNER 1501
MILLER 1300
已选择8行。
in操作,确定集合,穷举。
SQL> select deptno,ename,sal from emp where deptno in(10,20);
DEPTNO ENAME SAL
---------- ---------- ----------
20 SMITH 801
20 JONES 2975
10 CLARK 2450
10 KING 5000
20 FORD 3002
10 MILLER 1300
已选择6行。
实验10:使用like查询近似的值
like
- _通配一个字符
- %通配任意长度字符(包括没有字符)
SQL> select ename,deptno from emp where ename like 'J%';
ENAME DEPTNO
---------- ----------
JONES 20
JAMES 30
首字母为J员工,J后有没有字符,有多少字符都可以。
SQL> select ename,deptno from emp where ename like '_A%';
ENAME DEPTNO
---------- ----------
WARD 30
MARTIN 30
JAMES 30
第二个字母为A的员工,第一个字母必须有,是什么无所谓。
escape 想查询_,%特殊字符时,用escape。
一般使用/来转义,这里的_不是通配符,而是实际意义的_。
SQL> select ename from emp where ename like '%/_%' escape '/';
ENAME
----------
FORD_A
查询null值
SQL> select ename,comm from emp where comm=null;
未选定行
null不等于null
SQL> select ename,comm from emp where comm is null;
ENAME COMM
---------- ----------
SMITH
JONES
BLAKE
CLARK
KING
JAMES
FORD
MILLER
已选择8行。
and运算 两个条件的交集,必须同时满足。
SQL> select ename,deptno,sal from emp where deptno=30 and sal>1200;
ENAME DEPTNO SAL
---------- ---------- ----------
ALLEN 30 1601
WARD 30 1250
MARTIN 30 1250
BLAKE 30 2850
TURNER 30 1501
or运算 两个条件的并集,满足一个即可。
SQL> select ename,deptno,sal from emp where deptno=30 or sal>1200
ENAME DEPTNO SAL
---------- ---------- ----------
ALLEN 30 1601
WARD 30 1250
JONES 20 2975
MARTIN 30 1250
BLAKE 30 2850
CLARK 10 2450
KING 10 5000
TURNER 30 1501
JAMES 30 950
FORD 20 3002
MILLER 10 1300
已选择11行。
not运算 补集。
SQL> select ename,deptno,sal from emp where ename not like 'T%
ENAME DEPTNO SAL
---------- ---------- ----------
SMITH 20 801
ALLEN 30 1601
WARD 30 1250
JONES 20 2975
MARTIN 30 1250
BLAKE 30 2850
CLARK 10 2450
KING 10 5000
JAMES 30 950
FORD 20 3002
MILLER 10 1300
已选择11行。
查询不是T开头的员工。
优先级
()强制优先级
1.算数运算
2.连接运算
3.关系运算
4.is[not] null ,like, [not] in
5.between
6.not
7.and
8.or
order by子句
- 不指明都是二进制排序
- 默认是升序asc
- 降序要制定desc
实验11:使用order子句来进行排序操作
不说明默认升序排列
SQL> select ename,deptno,sal from emp order by sal;
ENAME DEPTNO SAL
---------- ---------- ----------
SMITH 20 801
JAMES 30 950
WARD 30 1250
MARTIN 30 1250
MILLER 10 1300
TURNER 30 1501
ALLEN 30 1601
CLARK 10 2450
BLAKE 30 2850
JONES 20 2975
FORD 20 3002
KING 10 5000
已选择12行。
降序排列
SQL> select ename,deptno,sal from emp order by sal desc;
ENAME DEPTNO SAL
---------- ---------- ----------
KING 10 5000
FORD 20 3002
JONES 20 2975
BLAKE 30 2850
CLARK 10 2450
ALLEN 30 1601
TURNER 30 1501
MILLER 10 1300
MARTIN 30 1250
WARD 30 1250
JAMES 30 950
SMITH 20 801
已选择12行。
隐式排序
SQL> select ename from emp order by sal;
ENAME
----------
SMITH
JAMES
WARD
MARTIN
MILLER
TURNER
ALLEN
CLARK
BLAKE
JONES
FORD
KING
已选择12行。
别名排序
SQL> select sal*12 salary from emp order by salary;
SALARY
----------
9612
11400
15000
15000
15600
18012
19212
29400
34200
35700
36024
60000
已选择12行。
表达式排序
SQL> select sal*12 salary from emp order by sal*12;
SALARY
----------
9612
11400
15000
15000
15600
18012
19212
29400
34200
35700
36024
60000
已选择12行。
位置排序,对集合操作是比较方便
SQL> select ename,sal from emp order by 2;
ENAME SAL
---------- ----------
SMITH 801
JAMES 950
WARD 1250
MARTIN 1250
MILLER 1300
TURNER 1501
ALLEN 1601
CLARK 2450
BLAKE 2850
JONES 2975
FORD 3002
KING 5000
已选择12行。
多列排序
SQL> select deptno,job,ename,sal from emp order by deptno,job;
DEPTNO JOB ENAME SAL
---------- --------- ---------- ----------
10 CLERK MILLER 1300
10 MANAGER CLARK 2450
10 PRESIDENT KING 5000
20 ANALYST FORD 3002
20 CLERK SMITH 801
20 MANAGER JONES 2975
30 CLERK JAMES 950
30 MANAGER BLAKE 2850
30 SALESMAN TURNER 1501
30 SALESMAN WARD 1250
30 SALESMAN ALLEN 1601
30 SALESMAN MARTIN 1250
已选择12行。
先按照部门排序,部门相同的再按照工作排序。