ORACLE学习小记(2)

查询:

查看表的结构:desc  table_name;

查询所有列:select * from table_name;  效率低下,程序维护困难

查询指定列:select column_name1,column_name2… from table_name;

打开显示操作时间的开关:set timing on;

返回当前有多少条记录: select count(*) from user;   

查询取消重复行:select distinct column_name1,  column_name2  from table_name

select 语句不区分大小写,但是字段区分。

使用算数表达式:

select   sal*13 + nvl(comm,0)*13 "年工资",ename,comm from emp;

使用where子句:

select hiredate from emp where hiredate > '1-1月-1992';

select ename,sal from emp where sal>=2000 and sal<=3000;

like操作符:

%代表0到多个字符

_代表热议单个字符

in操作符:

select  * from  emp where empno in(123,234,567); 速度比较快,比多个 or 语句实用

is null操作符:

select * from emp where mgr is null;

order by操作符:

order by empno,sal desc;

使用列的别名排序:

select ename,sal*12 "年薪" from emp order by "年薪";

分页查询-->子查询(待续。。。)

---------------------------------------------------------------------------------------------------------------------

Oracle表的复杂查询

数据分组:-max -min -avg -sum -count

group by: 分组字段一定要出现在查询的字段里面

having:函数条件


对数据分组的总结:

1、分组函数只能出现在选择列表、having、order by 子句中

2、如果在select语句中同时包含有group  by、having 、order by那么他们的顺序是group by,  having、order  by

3、在选择列中如果有列、表达式、和分组函数、那么这些列和表达式必须有一个出现在group by子句中,否则就会出错


多表查询:

多表查询是基于两个和两个以上的表或是视图的查询,在实际应用中,查询单个表可能不能满足你的需求。

规定:多表查询的 条件  是至少不能少于 表的个数-1


自连接:指在同一张表的连接查询


子查询:嵌入在其他SQL语句中的 select 语句,也叫嵌套查询

数据库在执行sql语句是,是从左到右扫描的。

1、单行子查询:select * from emp where  deptno=(select deptn from emp where ename='SMITH');

select * from emp where job in(select  distinct job from emp where deptno=10);

All操作符 :select * from emp where sal>All(select * from emp where deptno=30);

select * from emp where sal > (select max(sal) from emp where deptno=30);此语句效率大于上面的All操作符(建议使用)

Any操作符:select * from emp where sal>Any(select * from emp where deptno=30);

select * from emp where sal > (select min(sal) from emp where deptno=30);此语句效率大于上面的All操作符(建议使用)

2、多列子查询:select * from emp where (deptno,job) = (select deptno,job from emp where ename='SMITH');


3、from子句子查询:select a2.ename, a2.sal, a2.deptno,a1.mysql from emp a2,

 (select deptno,avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.sal

当在from子句中使用子查询你的时候,该子查询会被当做一个视图来对待,因此也叫内嵌视图,

当在from子句中使用子查询时,必须给子查询指定别名,而且不可以加as,


Oracle分页:

1、rownum分页

select * from emp;

2、显示rownum[oracle 分配的]

select  a1.*, rownum rn from (select * from emp) a1;

3、筛选小于等于10的记录,rownum不能重复用

select  a1.*, rownum rn from (select * from emp) a1 where rownum<=10;

4、在(3)的筛选基础上再次筛选rownum大于等于6的记录

select  *  from (select  a1.*, rownum rn from (select * from emp) a1 where rn<=10) where rn >=6

查询变化:

a.  指定查询列,只需要更改最里面的语句即可。

b.  如何排序,只需要更改最里面的语句即可。


用查询结果创建新表:

create table table_name1 (column_name1, column_name2,column_name3,…) as select column1_name1,column2_name2,column3_name3 … from table_name2;


合并查询(比and / or速度快):

union、union all、 intersect 、 minus

union:取得两个结果集的合集,并且自动去掉重复行

union all:取得两个结果集的合集,并且不会去掉重复行

intersect:取得两个结果集的交集

minus:取得两个结果集的差集



猜你喜欢

转载自blog.csdn.net/zhangbcn/article/details/27540895
今日推荐