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