Oracle培训(二十七)——Oracle 11g 第二章知识点小结——过滤 排序
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) != 等效于<> :不等于