Oracle培训(二十七)——Oracle 11g 第二章知识点总结——过滤 排序
知识点预览
创建表
插入数据
过滤
排序
创建表
1. 创建表
create table emp(
empnonumber(4) not null,
enamevarchar2(10),
jobvarchar2(9),
mgr number(4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(4)
);
Create table dept(
Deptnonumber(4),
Dnamevarchar2(20),
Locvarchar2(13)
);
插入数据
1. 插入数据
a) 插入全字段
insert into dept values(10,’Accounting’,’NewYork’);
b)插入某个字段(非全字段插入)
insert into dept(deptno) values(40);
过滤
1.使用WHERE 子句,将不满足条件的行过滤掉。
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
2. WHERE 子句紧随 FROM 子句。
3. 字符和日期
a) 字符和日期要包含在单引号中。
b)字符大小写敏感,日期格式敏感。
c) 默认的日期格式是 DD-MON-RR。
4. 比较运算
5. 其他比较运算
6. Between
使用 BETWEEN 运算来显示在一个区间内的值。
SELECTlast_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
7. IN
使用 IN运算显示列表中的值。
SELECT employee_id, last_name,salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
8.LIKE
a)使用 LIKE 运算选择类似的值
b)选择条件可以包含字符或数字:
% 代表一个或多个字符。
_ 代表一个字符。
SELECT first_name
FROM employees
WHERE first_nameLIKE 'S%';
c)‘%’和‘-’可以同时使用。
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
d)可以使用 ESCAPE 标识符 选择‘%’和‘_’符号。
9. NULL
使用 NULL 判断空值。
SELECTlast_name, manager_id
FROM employees
WHERE manager_id IS NULL;
10. 逻辑运算
11.AND
SELECTemployee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id LIKE '%MAN%';
12.OR
OR 要求或关系为真。
SELECTemployee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%';
13.NOT
SELECTlast_name, job_id
FROM employees
WHERE job_id
NOT IN ('IT_PROG', 'ST_CLERK','SA_REP');
14.优先级
可以使用括号改变优先级顺序
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = 'SA_REP'
OR job_id = 'AD_PRES'
AND salary > 15000;
使用括号控制执行顺序。
SELECT last_name, job_id, salary
FROM employees
WHERE (job_id = 'SA_REP'
OR job_id = 'AD_PRES')
AND salary > 15000;
15.示例
a) where子句
select * from tabname
where
b)查询sal大于等于1000的所有员工
select * from emp
where sal>=1000;
c)查询sal大于等于1000的所有job是salesman的员工信息。
select * from emp
where sal>=1000 and job=’salesman’;
d)查询sal大于等于1000的并且小于等于2000的员工信息。
select * from emp
where sal>=1000 and sal<=2000;
等效于
select * from emp
where sal between 1000 and 2000;
e)查询部门编号是10和20的所有员工
select * from emp
where deptno not in (10,20);
select * from emp
where deptno=10 or deptno=20 and sal between 1000 and 2000;
--顺序问题:先查deptno=10且工资在1000到200之间的,然后再查deptno=20且工资在1000到200之间的。
select * from emp
where (deptno=10 or deptno=20) and sal between 1000 and 2000;
优先级问题——括号解决
f)查询名字里包含S的所有员工
%:匹配任意字符
select * from emp
where ename like ‘%S%’;
g)查询名字里第二个字母是A的所有员工
select * from emp
where ename like ‘_A%’;
h)查询名字里第一个字母是S的所有员工
select * from emp where ename like 'S%';
i)查询名字里第二个字母是S的所有员工
select * fromemp where ename like '_S%';
g)查询comm不为空的所有员工信息
select * from emp
where comm is not null;
--为空
select * from emp
where comm is null;
排序
1. ORDER BY子句
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[ORDERBY {column, expr, alias}[ASC|DESC]];
2.使用 ORDER BY 子句排序
a)ASC: 升序
b)DESC: 降序
3.ORDER BY 子句在SELECT语句的结尾。
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date ;
4.降序排序
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BYhire_date DESC ;
5.按别名排序
SELECTemployee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
6. 多个列排序
a)按照ORDER BY 列表的顺序排序。
SELECTlast_name, department_id, salary
FROM employees
ORDER BYdepartment_id, salary DESC;
b) 可以使用不在SELECT 列表中的列排序。
7.示例
a)按照雇员薪资高低排序
select * from emp
order by sal DESC;
ASC 升序(默认)
b)按照雇员薪资高低和按字母顺序对名字排序
select * from emp
order by sal desc,name asc;
--工资相同,才会按照名字排序
c)也可以按照列名进行排序
select ename,sal+comm as s from emp
order by s ;
d)值:区分大小写
e) != 等效于<> :不等于