当前位置:首页 > 开发 > 数据库 > 正文

sql的复杂查询使用案列与技巧

发表于: 2014-09-23   作者:百合不是茶   来源:转载   浏览:
摘要:   本片博客使用的数据库表是oracle中的scott用户表;          -------------------  自然连接查询           查询 smith 的上司(两种方法) &

 

本片博客使用的数据库表是oracle中的scott用户表;

 

  

    -------------------  自然连接查询

          查询 smith 的上司(两种方法)

  

----查询SMITH的上司
    select ename from emp where empno=(select mgr from emp where ename  = 'SMITH');
    
    --自连接查询
      select e1.ename, e1.mgr,e2.ename from emp e1 ,emp e2 where e1.mgr= e2.empno and E1.ename = 'SMITH';

 

 

 

--------------------------in的使用

  ---查询与部门10工作相同的员工的信息

       分组查询

select ename,job,sal,deptno from emp where job in(select job from emp where deptno = 10);

  

 

-----------------------分组函数和all的查询

--查找比部门30工资高的所有员工的信息

 

 

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

 

 --------------------函数和any

--查找比部门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);
       

 

 

-----------------------------------------------------------------伪列查询  rownum  rowid
---查询部分数据
  -- 查询第五到第十条的数据
  

 select ROWNUM,ename,job from(select ROWNUM r ,ename,job from emp where ROWNUM<=10) where r>5;
    
  
  -----MYsql + sqlite分页查询的方法
    
     -- select * from emp limit 1,10;

 

 

-----------------------------------------------------------合并查询操作符 union ,unuion all,intersect,minus

union ,union all合并表的查询


select * from emp where job ='SALESMAN';
select * from emp where sal>1500;


union的合并查询  合并并且去除重复的行
  
select * from emp where job ='SALESMAN' union select * from emp where sal>1500;


union all的合并查询  取所有的数据
  
select * from emp where job ='SALESMAN' union all select * from emp where sal>1500;


interseect取交集查询
select * from emp where job ='SALESMAN' intersect select * from emp where sal>1500;


minus查询出来的结果是只显示在第一个结果集中存在 而不在第二个结果集重负存在的

select * from emp where job ='SALESMAN' minus select * from emp where sal>1500;

 

 

 

 

 

 

sql的复杂查询使用案列与技巧

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号