首页 > 数据库技术 > 详细

oracle表查询

时间:2020-04-28 18:09:23      阅读:69      评论:0      收藏:0      [点我收藏+]

技术分享图片

 技术分享图片

技术分享图片

 一、简单查询语句

  查看表结构

  sql>desc dept;

  查询所有列

  sql>select * from dept;

  ※注意:不要轻易使用select * ,数据量大时 非常耗时

  查询指定列

  sql>select ename,sal,job,deptno from emp;

  取消重复列

  sql>select distinct deptno,job from emp;

  查询simth的工资,职位,所在部门

  sql>select sal,job,deptno from emp where ename = ‘simth‘;

  ※注意:约束条件区分大小写

  使用算数表达式显示每个雇员的年工资并使用列的别名

  sql>select ename ‘姓名‘,sal * 12 as ‘年收入‘ from emp;

  使用nvl函数来处理null值

  sql>selcet ename, sal * 12 + nvl(comm,0) * 12  as ‘年工资‘ from emp;

  连接字符串

  sql>select ename || ‘is a‘ || job from emp;

  

  使用where字句

  显示工资高于7k的员工

  sql>select ename ,sal from emp where sal > 7000;

  显示2020-01-01后入职的员工

  sql>select ename,hiredate from emp where hiredate > ‘2020-01-01‘

  显示工资在3k~4k的员工情况

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

  sql>select ename,sal from emp where sal between 3000 and 4000;

  在where条件中使用in

  显示empno为123,345,7844的员工情况

  sql>select ename from emp where empno in (123,345,7844);

  使用is null 操作符

  显示没有上级的员工情况

  sql>select ename from emp where mgr is null;

  使用like操作符

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

  -   : 表示任意单个字符

   显示首字符为s的员工姓名和工资

  sql>select ename,sal from emp where ename like ‘s%‘;

  显示第三个字符为小写o的所有员工的姓名和工资

  sql>select ename,sal from emp where ename like--o%‘;

  使用逻辑操作符

  显示工资高于3k或者岗位是manager的员工,并且姓名首字母为小写j

  sql>select ename from emp where (sal > 3000 or job = ‘manager‘) and ename = ‘j%‘;

  使用order by 字句

  按照工资从小到大的顺序显示员工情况

  sql>select ename from emp order by sal ;

  按照部门番号升序而工资降序显示员工情况

  sql>select ename from emp order by deptno asc,sal desc;

  使用列的别名排序

  sql>select ename, sal*12 ‘年薪‘ from emp order by "年薪" asc;

  ※注意:别名需要用双引号标注

延伸

  插入一条

  insert into user values(‘A001‘,‘西奥‘,‘123456790abcdefghijk‘);

  复制自己表中数据插入(为了测试查询时间,短时间内有万条数据)

  insert into user (userid,username,userpss) select * from user;

二、复杂查询

  数据分组(max、min、avg、sum、count)

  显示所有员工中最高工资和最低工资

  sql>select max(sal),min(sal) from emp;

  显示所有员工的平均工资和工资总和

  sql>select avg(sal),sum(sal) from emp;

  计算共多少员工

  sql>select count(*) from emp;

  显示工资最高的员工姓名,职位

  sql>select ename, job from emp where sal = (select max(sal) from emp);

  显示工资高于平均工资的员工情况

  sql>select ename from emp where sal > (select avg(sal) from emp);

  group by 和having字句

  group by:对查询的结果分组统计

  having :限制分组显示结果

  显示每个部门的平均工资和最高工资

  sql>select avg(sal),max(sal),deptno from emp group by deptno;

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

  sql>select avg(sal),min(sal),deptno,job from emp group by deptno,job;

  显示平均工资低于5000的部门和平均工资

   sql>select deptno,avg(sal) from emp group by deptno having avg(sal) < 5000;

  多表查询

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

  显示员工名,工资,所在部门的名称

  sql>select ename,sal,dname from emp a join dept b on a.deptno = b.deptno;

  显示部门番号10的部门名,员工名,工资

  sql>select dname,ename,sal from emp a join dept b on a.deptno = b.deptno where a.deptno = ‘10‘;

  显示员工姓名,工资,工资级别

  sql>select ename,sal,grade from emp a , salgrade b where sal between losal and hisal;

  显示员工姓名,工资,所在部门名称 按部门排序

   sql>select ename,sal,dname from emp a join dept b on a.deptno = b.deptno order by a.deptno;

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

  显示‘ford‘员工的上级领导姓名

  sql>select work.ename,boss.ename from emp worker,emp boss where work.mgr = boss.empno and work.ename = ‘ford‘;

  子查询 :嵌在其它sql语句中的select语句也叫嵌套查询

  ※注意:最优约束条件写在第一位

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

  多行子查询:返回多行数据的子查询

  显示与smith同一部门的所有员工

  sql>select ename from emp where deptno = (select deptno from emp where ename = ‘smith‘);

  显示和部门番号10的工作相同的员工姓名,职位,工资,部门号

  sql>select ename,job,sal,deptno from emp where job in (select distinct(job) from emp where deptno = ‘10‘);

  在多行子查询中使用all操作符

  显示工资比部门番号30的所有员工的工资高的员工姓名,工资,部门号

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

  sql>select ename,sal,deptno from emp where sal > (select max(sal) from emp where deptno = ‘30‘);         //效率高

  在多行子查询中使用any操作符

  显示工资比部门番号30的任意员工的工资高的员工姓名,工资,部门号

  sql>select ename,sal,deptno from emp where sal > any(select sal from emp where deptno = ‘30‘);

  sql>select ename,sal,deptno from emp where sal > (select min(sal) from emp where deptno = ‘30‘);         //效率高

  多列子查询 : 返回多个列数据的子查询语句

  显示与smith的部门和职位完全相同的员工

  sql>select ename from emp where (deptno,job) = (select deptno,job from emp where ename = ‘smith‘);

  在from子句中使用子查询

  显示高于自己部门平均工资的员工情况

  1、先查出各个部门的平均工资和部门号

  sql>select avg(sal) as mysal,deptno from emp group by deptno;

  2、把第一步的查询看做是一张子表存在

  sql>select a.ename,a.deptno,a.sal from emp a,(select avg(sal) as mysal,deptno from emp group by deptno) b where a.deptno = b.deptno and a.sal > b.mysal

  分页查询

  1、rownum分页

  sql>select * from emp;  

  2、显示rownum[oracle分配的]

  sql>select a.*,rownum rn from (select * from emp) a;

  3、

  sql>select a.*,rownum rn from (select * from emp) a where rownum <= 10;  //前10条

  sql>select * from (select a.*,rownum rn from (select * from emp) a where rownum <= 10) where rn >= 6;  //第6条到第10条

  sql>select * from (select a.*,rownum rn from (select * from emp) a where rownum <= 9) where rn >= 4;  //第4条到第9条

  4、

  查询指定列时,只需要修改最里层

  sql>select * from (select a.*,rownum rn from (select ename,sal from emp) a where rownum <= 10) where rn >= 6;

  排序也只需要修改最里层

  sql>select * from (select a.*,rownum rn from (select ename,sal from emp order by sal desc) a where rownum <= 10) where rn >= 6;

  ※注意:所有改动只需要改最里层

 技术分享图片

  

  用查询结果创建新表:快捷的建表方式(导表,备份表可以用到)

  sql>create table mytable (id,name,sal,job,deptno) as select emptno,ename,sal,job,deptno from emp;

三、合并查询

  union:取得两个结果集的并集(使用此操作符时,会自动去掉结果集中重复行)//或的关系

  select ename,sal,job from emp where sal > 5000 

  union

  select ename,sal,job from emp where job = ‘manager‘;

  union all :不会去掉重复行且不会排序

  select ename,sal,job from emp where sal > 5000 

  union all

  select ename,sal,job from emp where job = ‘manager‘;

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

   select ename,sal,job from emp where sal > 5000 

  intersect

  select ename,sal,job from emp where job = ‘manager‘;

  minus:取得两个结果集的差集(显示存在第一个结果集中而不存在第二个结果集中的数据)

  select ename,sal,job from emp where sal > 5000 

   minus

   select ename,sal,job from emp where job = ‘manager‘; 

技术分享图片

 技术分享图片

 技术分享图片

 技术分享图片

 技术分享图片

创建数据库

  1、通过Oracle提供的向导工具(推荐)

    创建数据库使用工具

    Oracle Database Configuration Assistant(数据库配置助手)

  2、手工步骤直接创建

 

oracle表查询

原文:https://www.cnblogs.com/yvette-hathaway/p/12792836.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!