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) != 等效于<> :不等于

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值