Oracle查询

简单的查询语句:

(1)查看表结构

desc  dept;

(2)查询所有列

select  *  from  dept;

(3)查询指定列

select  ename,sal,job,deptno   from  emp;

(4)取消重复行

select   distinct  deptno,job  from  emp;

注:select 语句不区分大小写,但是where中的内容区分大小写。

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

(5)使用算数表达式

select   sal*12,name   from  emp;

eg:sal*12    name   即为列名字,可以为列取别名

select  sal*12  "年工资",name   from  emp;

select  sal*12+comm*12  "年工资",name  from  emp;   用此方法,若comm为null,则整个表达式的值为Null

(5)用nvl函数处理空值null

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

若comm的值为null,则使用0代替,若comm的值不为null,则使用其本值。

(6)比较时间

where  hiredate > '1-1月-1982';

   where的多个条件用  and  分开

(7)like操作符

%:表示任意0到多个字符

_:表示任意单个字符

(8)在where条件中使用in,批量处理查询,速度快

select   *  from  emp  where  empno  in (123,234,456);

(9)使用  is  null

(10)使用  order  by

select  *  from  emp  order  by  sal   desc;  //asc默认

多个条件:select  *  from  emp  order  by  depno asc, sal   desc; //部门升序,部门内部工资降序,即部门号是外围,为主,工资顺序是内部,为从。

(11)使用列的别名排序

select name, sal+nvl(comm,0) [as] "年薪"  from  emp  order  by  "年薪";

(12)分页查询


复杂查询

(1)数据分组函数 - max,min,avg,sum,count
列中如果有一个为分组函数则其他列也为分组函数
select   name,max(sal)  from  emp 是错误的 
(2)group by 和having
group by 用于对查询的结果分组统计
若进行分组查询,则分组的字段一定要出现在列表中,否则会报错
eg: select avg(sal),max(sal),deptno from emp group bydeptno;

having 子句用于限制分组显示结果,对分组显示进行再筛选,所以要在分组后面。

数据分组的总结:

1.分组函数只能出现在选择列表、having、order by 子句中
2.如果在select语句中同时也包含 group by、having、order by, 那么他们的顺序是 group by、having、order by
3.在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则就会出错。

多表查询

select a1.name , a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno;
【笛卡儿积】多表查询条件:条件至少不能少于表的个数-1
select a1.name , a1.sal,a2.grade from emp a1,salgrade a2 where a1.sal between a2.lowsal and a2.highsal;
自连接:
select worker.ename,boss.ename from emp worker,emp boss where worker.mgr = boss.empno;


子查询:

嵌入在其他sql语句中的select语句。

单行子查询:子查询语句返回一行数据。

多行子查询:子查询语句返回多行数据。

子查询语句返回多行:select distincet job from emp where deptno=10;

总的:select * from emp where jobin(select distincet job from emp where deptno=10);

多行子查询中的all连接符:

select ename, sal, deptno from emp where sal > all ( select sal from emp where deptno = 30);

相当于:select ename, sal, deptno from emp where sal > ( select max(sal) from emp where deptno = 30);

多行子查询中的any连接符:select ename, sal, deptno from emp where sal > any ( select sal from emp where deptno = 30);

相当于:select ename, sal, deptno from emp where sal > ( select min(sal) from emp where deptno = 30);

多列子查询:上述子查询返回的都是一列,即子查询返回的是多列。

select deptno,job from emp where ename = 'SMITH';

总:select * from emp where (deptno,job)=(select deptno,job from emp where ename = 'SMITH');

在from子句中使用子查询:

将查询结果当做子表,取别名,来进行查询。(内嵌试图——将子查询当做表使用,给表取别名不能加as)

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

当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌试图,当在from子句中使用子查询时,必须给子查询指定别名。

用查询结果创建新表:

create table mytable (id,name,sal,job) as select empno,name,sal,job from emp;


分页查询:

1.rownum分页

step1:子查询 select * from emp;

step2: 显示rownum(Oracle分配的)

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

step3:按rownum挑选几条记录(rownum 一次用一下,使用二分机制。一次砍一半)

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

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

所有的改动改最里面的视图即可,如指定查询列,排序

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

2.rowId分(效率最高)

3.分析函数(效率低)


合并查询:union,union all, intersect , minus

(1)union 该操作用于取得两个结果集的并集。使用该操作符时,会自动去重。

select name,sal,job from emp where sal > 2500 unionselect name,sal,job from emp where job="manager";

(2)union all 不会取消重复行

(3)intersect 交集

(4)minus 差集,存在第一个集合中,不在第二个集合中。


创建新的数据库:

(1)Oracle提供的工具向导。

database configuration assistant[数据库配置助手dbca]

(2)手工步骤







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值