ITPub博客

首页 > 数据库 > Oracle > [置顶]Oracle表的基本查询

[置顶]Oracle表的基本查询

Oracle 作者:西楼绝唱 时间:2012-05-01 11:46:23 0 删除 编辑

入门查询

                1、查看表结构

                            Desc                   dept;

                   2、取消重复行

                            Select  distinct depno from emp;

                   3、显示雇员年工资

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

       4、oracle连接字符串(||)

                            Select ename || ' is a ' || job from emp;

                   5、入职时间在1982/1/1后

                            select * from emp where hiredate >'1-1月-1982'

             6、like    操作符     % 零个或者多个  _表示一个字符

                   7、in查询方式

                   8、order by语句 asc desc

                   9、分页查询???(oracle的分页比其他的难)

       复杂查询

1、  数据分组         max 、min、avg、sum、count

2、  group by http://www.lefengcom.com/ ,having

group by 用于对查询的结果分组统计(分组字段必须在查询中)

having 用于限制分组的显示结果

实例:显示每个部门的每种岗位的平均工资和最低工资

select deptno,job ,max(sal),avg(sal) from emp group by deptno,job order by deptno;  

实例2:部门平均工资大于2000

         select deptno,avg(sal) from emp group by deptno having avg(sal)>2000

         多表查询

              1、多表查询是指基于两个或者两个以上的表后者视图的查询。在实际应用单表不 能满足你的需求。

                   2、多表查询无条件结果是笛卡尔积表1个数*表2个数

                   3、如果有2表至少有一个条件,如果有3个表至少有2个条件才能消除笛卡尔积

         自连接

1、  自连接是指同一张表的连接查询。

2、  EMP表特别形象。显示员工的上级 emp as worker ,emp as boss

实例 : 显示员工的上级领导

Select worker.ename,boss.ename from emp as worker ,emp as boss where worker.mrg=boss.empno

         子查询

                   说明:       子查询是指在其他SQL语句中的select语句,也叫嵌套查询

1、  单行子查询      (=)          single-row subqueries

解释:     单行子查询是指返回一行数据的子查询语句

2、  多行子查询      (in)             multiple-row subqueries

解释:     多行子查询是指返回多行数据的子查询

3、  多行子查询使用all操作符

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

4、  多行子查询中时用any操作符

                                     Select ename,sal,deptno from emp where sal>any(select sal from emp

                            Where deptno=30);                  

5、  多列子查询               multiple-column subqueries

解释:                  多列子查询是指返回多个列数据的子查询,而单行、多行子查询都是返回的其中一列

实例:

           Select * from emp where (deptno,job) =(select deptno,job from emp where ename=’SMITH’)

6、  在from 字句中使用子查询

解释:      当在from字句中使用子查时,官方软件该子查询会被当一个视图对该,因此叫做内嵌视图,当在from字句中使用子查询时,必须给子查询指定别名。

实例:      如何显示高于自己部门平均工资的员工信息下面是步骤

1、  查询各个部门的平均工资

Select  deptno,avg(sal) mysal from emp group by deptno

2、  把上面的查询看做是一张子表

(Select  deptno,avg(sal) mysal from emp group by deptno) a1

3、实例结果:

            Select a2.ename,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 a2.sal>a1.mysal

                   7、相关子查询               correlated   subqueries        

解释:     相关子查询是指引用了父查询中某些表或其某些列的子查询(但父查询不能引用子查询中的表或其列)。当最终结果集的内容需要子查询依赖父查询中每一行中的记录值时,需要使用相关子查询。

                            实例:        每个部门最高雇员的信息(无distinct)

select deptno ,

(select max(sal) from emp b where b.deptno=a.deptno)  maxsal

From emp a order by deptno;

                   8、标量子查询       (scalar subqueries)

                            解释:     标量子查询只返回单行单列数据。

                            实例:     查询每个部门的最高工资信息(使用了distinct)

select deptno ,

(select max(sal) from emp b where b.deptno=a.deptno)  maxsal

From emp a order by deptno;

                   9、在Create Table中使用子查询

                            实例:        create table dept1 (depton,dname,loc) as

                                                        Select depton,dname,loc from dept

                   10、在Create View中使用子查询

                            实例:        create or replace view dept_20 as

                                                        Select * from emp1 where deptno=20 order by empno;

                   11、在 update中使用子查询

                            实例:        update emp1 set (sal,comm)=

(Select sal,comm from emp1 where ename=’WARD’)

Where job=(select job from emp1 where ename-‘WARD’)

实例:        update emp set (job,sal,comm)=(select job,sal,comm. From emp where ename=’SMITH’ ) where ename=’SCOTT’

                   12、在 insert中使用子查询

                   13、在 delete中使用子查询

 

 

         分页查询

1、  oracle分页总共有三种方式

(1)、rownum分页  (rownum oracle分配的行号)效率居中

         ①、select * from emp;

         ②、select a1.* ,rownum rm from (select * from emp) a1

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

A、 如果要指定查询列,只需要修改最里层的子查询

B、 如果排序也只需要在最里层排序

C、 在子查询中只能使用rownum 不能使用rn

2、  按照分析函数分页(速度最慢)

3、  根据RowID 分页   (速度最快)

用查询结果创建新表

         解释:    导入表结构以及表数据

         实例:        create table mytable (id,name,sal,job,deptno)

                                     As select empno,ename,sal,job,deptno

合并查询

         集合操作符 union ,union all, intersect,minus

1、  union该操作符取得两个结果的并集,当使用该操作符会自动去掉重复行

2、  union all 与union相似,不会去掉重复行,不会排序

3、  intersect 取得两个结果的交集

4、  minus 使用该操作符用于取得两个结果的差集,它只会显示在第一集合中而不存在第二个集合中的数据

实例:

         Select ename,sal,job from emp where sal>2500

         (集合操作符)

         Select ename,sal,job from emp where job=’MANAGER’

 

         创新新的数据库

                   1、通过oracle提供的工具向导 dbca数据库配置助手

                   2、手工步骤直接创建09

 

         注意:

1、  运算符中如果有Null值则结果为null

2、  nvl(comm,0)如果comm为null怎变成0处理

3、  查询时列名用””  如果是字符串连接用’’

4、  Group by 、having、order by顺序不能颠倒

5、  笛卡尔积规定:多表查询的查询条件不能少于表的个数-1 才能消除

6、  Sql 执行时先执行条件在最后面的(这个可以优化速度)

7、  Max(sal) 效率比 all (select sal from emp) 高

8、  多行子查询中 all =max()  any =min()

9、  给列取别名可以加as  给表取别名不能加as

10、集合操作符速度比( and or速度快的多)(自己测试快一倍)

11、在select、update、delete语句的子查询中不能使用order by 子句,他只能用在最外面一层的父查询中。但在Create语句中的子查询可以使用order by

12、在pl/sql中按上下行翻出3行信息,修改当前行的语句才起作用。

                   13、oracle默认日期格式为: 22-11月-1988

添加时采用to_date(‘1988-11-22’,yyyy-mm-dd)等方式

[热门]wp7 ApplicationSettings让我纠结了半天

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23189550/viewspace-1117223/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-01-15