2
1
programming
1
Oracle SQL开发基础
2
2
programming
课程结构
内容
课时(H)
第一章 Oracle数据库基础
2.5
第二章 编写简单的查询语句
1.5
第三章 限制数据和对数据排序
2
第四章 单行函数
4
第五章 多表查询
4
第六章 分组函数
3
第七章 子查询
4
第八章 数据操作与事务控制
4
第九章 表和约束
4
第十章 其他数据库对象
4
2
3
programming
第三章 限制数据和对数据排序
目标:
本章旨在向学员介绍限制数据的
应用,通过本课的学习,学员应
该掌握如下知识:
1) 运算符的使用
2)Order by的使用
时间:学时
教学方法:
2
4
programming
第三章 限制数据和对数据排序
限制数据和对数据排序:
3.1WHERE子句的使用
3.2ORDER BY子句的使用
2
5
programming
3.1WHERE子句的使用 1/2
查询
20
部门的所有员工
查询20部门的所有员工
EMP
EMP
EMPNO ENAME SAL ... DEPTNO
7839 KING 5100 10
7369 SMITH 800 20
7499 ALLEN 1600 30
7782 CLARK 2450 10
...
SELECT *
FROM emp
WHERE deptno= 20;
EMP
EMP
EMPNO ENAME SAL ... DEPTNO
7369 SMITH 800 20
7566 JONES 2975 20
7902 FORD 3000 20
带有限制条件的查询
2
6
programming
3.1WHERE子句的使用 2/2
.使用WHERE子句限定返回的记录
.WHERE子句在 FROM 子句后
.语法:
.查询公司月薪高于12000的员工信息。
SELECT *|{[DISTINCT] 列名|表达式 [别名][,...]}
FROM 表名
[WHERE 条件];
SELECT employee_id, last_name, salary
FROM employees
WHERE salary >= 12000;
2
7
programming
3.1.1比较运算符的使用
运算符
=
>
>=
<
<=
<>
含义
等于
大于
大于等于
小于
小于等于
不等于
2
8
programming
3.1.2字符型与日期型大小写敏感的实例 1/2
.使用比较运算符需要遵循以下原则:
– 字符及日期类型需要在两端用单引号;
– 字符类型大小写敏感;
– 日期类型格式敏感,默认格式’DD-MON-RR’;
.查询在1999年1月1日以后进入公司的雇员信息。
SELECT last_name, hire_date
FROM employees
WHERE hire_date >= '01-1月-1999';
2
9
programming
3.1.2字符型与日期型大小写敏感的实例 1/2
.转换英文环境
–查询在1999年1月1日以后进入公司的雇员信息(英文环境)
SELECT last_name, hire_date
FROM employees
WHERE hire_date >= '01-JAN-1999';
ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
2
10
programming
3.1.3特殊比较运算符
运算符
IN( 列表)
含义
确定集合
确定范围,在两个值之间 (包含比较值)
IS NULL
LIKE
字符串匹配查询
判断空值
BETWEEN...AND...
2
11
programming
3.1.4BETWEEN…AND…运算符的使用
.查询月薪在4200元到6000公司的雇员。
SELECT employee_id, last_name, salary
FROM employees
WHERE salary BETWEEN 4200 AND 6000;
2
12
programming
3.1.5IN运算符的使用
.IN运算符主要对指定的值进行比较查看的时候使用。
.查询部门编号为10、90或110的雇员信息。
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE department_id IN (10, 90, 110);
2
13
programming
SELECT employee_id, last_name, salary
FROM employees
WHERE last_name LIKE 'S%';
3.1.6LIKE运算符的使用 1/3
.使用LIKE运算符完成模糊查询功能
.使用通配符来代替未知的信息。常用通配符有 %和_ 。
– %可以代替任意长度字符(包括长度为0)。
– _可以代替一个字符。
.查询last_name首字母是S的雇员信息。
2
14
programming
.%与_组合使用
.查询last_name第二个字母是b的雇员信息。
3.1.6LIKE运算符的使用 2/3
SELECT employee_id, last_name, salary
FROM employees
WHERE last_name LIKE '_b%';
2
15
programming
.使用ESCAPE 标识符来查找带特殊符号的字符号。
.查询JOB_ID以“FI_”开头的雇员信息。
3.1.6LIKE运算符的使用 3/3
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE job_id LIKE 'FI\_%' ESCAPE '\';
2
16
programming
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE department_id IS NULL;
3.1.7IS NULL运算符的使用
.查询包含空值的记录
.未分配部门的雇员信息。
2
17
programming
3.1.8逻辑运算符的使用 1/6
运算符
OR
含义
如果组合的条件之一是TRUE,返回TRUE。NULL和
TRUE组合,返回TRUE。
如果组合的条件都是TRUE,返回TRUE。NULL和
FALSE组合,返回FALSE。
NOT
如果下面的条件是FALSE,返回TRUE。
AND
2
18
programming
3.1.8逻辑运算符的使用 2/6
.查询月薪在4200元到6000元公司的雇员。
SELECT employee_id, last_name, salary
FROM employees
WHERE salary>=4200 AND salary<=6000;
2
19
programming
3.1.8逻辑运算符的使用 3/6
.月薪大于10000元,并且在60和90号部门工作的员工。
SELECT last_name, salary, department_id
FROM employees
WHERE salary>10000 AND department_id in (60,90);
2
20
programming
3.1.8逻辑运算符的使用 4/6
.月薪大于10000元,或者在60和90号部门工作的员工。
SELECT last_name, salary, department_id
FROM employees
WHERE salary>10000 OR department_id in (60,90);
2
21
programming
3.1.8逻辑运算符的使用 5/6
.查找职位不是IT_PROG,ST_CLERK,FI_ACCOUNT的员工
信息。
SELECT last_name, job_id, salary
FROM employees
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK',
'FI_ACCOUNT');
2
22
programming
3.1.8逻辑运算符的使用 6/6
NOT运算符还可以和BETWEEN…AND、LIKE、IS NULL一起使用。
–...WHERE department_id NOT IN (60, 90);
–... WHERE salary NOT BETWEEN 10000 AND 25000;
–... WHERE last_name NOT LIKE 'D%'
–... WHERE manager_id IS NOT NULL
2
23
programming
3.1.9运算符的优先级 1/3
.括号’()’优先于其他操作符。
优先级
1
4
3
2
5
6
7
运算分类
逻辑非
逻辑与
逻辑或
其他比较运算符
数学运算符
通用比较运算符
连接运算符
运算符举例
NOT
AND
OR
IS [NOT] NULL, LIKE, [NOT] BETWEEN, [NOT] IN
*, \, +, -
=, <>, <, >, <=, >=
||
2
24
programming
3.1.9运算符的优先级 2/3
查找职位是FI_ACCOUNT或工资超过16000的职位是AD_VP的员
工。
SELECT last_name, job_id, salary, department_id
FROM employees
WHERE job_id = 'FI_ACCOUNT'
OR job_id = 'AD_VP'
AND salary > 16000;
2
25
programming
3.1.9运算符的优先级 3/3
查找工作超过16000并且职位是FI_ACCOUNT或是AD_VP的员工。
SELECT last_name, job_id, salary, department_id
FROM employees
WHERE (job_id = 'FI_ACCOUNT'
OR job_id = 'AD_VP')
AND salary > 16000;
2
26
programming
第三章 限制数据和对数据排序
限制数据和对数据排序:
3.1WHERE子句的使用
3.2ORDER BY子句的使用
2
27
programming
3.2.1使用ORDER BY子句排序的应用 1/5
.ORDER BY子句后的语法结构如下:
查看公司员工信息,按照员工部门降序排列。
SELECT *|{[DISTINCT] 列名|表达式 [别名][,...]}
FROM 表名
[WHERE 条件]
[ORDER BY {列名|表达式|别名} [ASC|DESC],…];
SELECT last_name, job_id, salary, department_id
FROM employees
ORDER BY department_id DESC;
2
28
programming
3.2.1使用ORDER BY子句排序的应用 2/5
.不同数据类型排序规则(以升序为例)
–数字升序排列小值在前,大值在后。即按照数字大小顺序由
小到大排列。
–日期升序排列相对较早的日期在前,较晚的日期在后。例
如:’01-SEP-06’在’01-SEP-07’前。
–字符升序排列按照字母由小到大的顺序排列。即由A-Z排列;
中文升序按照字典顺序排列。
–空值在升序排列中排在最后,在降序排列中排在最开始。
2
29
programming
3.2.1使用ORDER BY子句排序的应用 3/5
.使用列别名排序,多列排序。
查看员工信息,结果按照年薪升序排列。
查看员工信息,结果按照job_id升序排列,月薪按照降序排列。
SELECT last_name, job_id, salary*12 annual, department_id
FROM employees
ORDER BY annual;
SELECT last_name, job_id, salary, department_id
FROM employees
ORDER BY job_id, salary desc;
2
30
programming
3.2.1使用ORDER BY子句排序的应用 4/5
.ORDER BY特殊使用
–ORDER BY子句可以出现在SELECT子句中没有出现过的列。
–ORDER BY子句后的列名,可以用数字来代替。这个数字是
SELECT语句后列的顺序号。
查看公司员工信息,按照月薪由高到低排列,而具体的工资数不
显示。
SELECT last_name, job_id, hire_date
FROM employees
ORDER BY salary;
2
31
programming
3.2.1使用ORDER BY子句排序的应用 5/5
.查看员工信息,结果按照按照job_id升序排列,月薪按照降序
排列。
SELECT last_name, job_id, salary, department_id
FROM employees
ORDER BY 2, 3 desc;
2
32
programming
本章小结
.选择表中的部分行
.比较运算符的使用
.特殊比较运算符的使用
.逻辑运算符的使用
.ORDER BY的使用
2
33
programming
练习
1.查询last_name是Chen的员工的信息。
2.查询参加工作时间在1997-7-9之后,并且不从事IT_PROG工作
的员工的信息。
3.查询员工last_name的第三个字母是a的员工的信息。
4.查询除了10、20、110号部门以外的员工的信息。
5.查询部门号为50号员工的信息,先按工资降序排序,再按姓名
升序排序。
6.查询没有上级管理的员工(经理号为空)的信息。
7.查询员工表中工资大于等于4500并且部门为50或者60的员工的
姓名(last_name)、工资、部门号。
2
34
programming
谢谢