zoukankan      html  css  js  c++  java
  • 关于oracle数据库(9)

    内连接:从多张表中获取综合数据

    inner join  on

      select 表1.字段,表2.字段 from 表1 inner join 表2 on 关系;

      select 表1.*,表2.* from 表1 inner join 表2 on 关系;

    如:要查询员工的名字以及部门的编号,和部门地址

    select e.ename,d.loc from emp e inner join dept d on e.deptno=d.deptno;

    如:查询员工工资和员工工资等级(losal是同等级中的最低薪水,hisal是同等级中的最高薪水)

    select ename 员工姓名,sal 员工工资,grade 薪水等级 from salgrade s inner join emp on e.sal>=s.losal and e.sal<=s.hisal;

    外连接(把不满足条件的存在在表中的字段也显示出来)

    左外连接 left join 把左表没有关联的字段也显示出来

    如:select * from student s left join myclass m on s.cid=m.cid;

    右外连接 right join 把右表没有关联的字段也显示出来

    如:select * from student s right join myclass m on s.cid=m.cid;

    全连接 full join 把左边和右边没有关联的字段都显示出来

    如:select * from student s full join myclass m on s.cid=m.cid;

    交叉连接:生成笛卡尔积

    cross

    如:select * from student s cross join myclass m;

    笛卡尔积筛选(直接加where条件)

    如:select * from student s cross join myclass m where s.cid=m.cid;

    自连接:自己和自己做连接查询(将1张表理解为2张表)

    如:查询每个员工的领导信息

    select * from 员工表 y inner join 老板表 i on i.主键=y.外键;
    select y.ename||'他的老板是'||i.ename from emp i on i.empno=y.mgr;

    子查询:在SQL语句嵌套查询,必须使用()括起来

    如:查询与SMITH同部门的员工信息

    select ename,deptno from emp where deptno=(select deptno from emp where ename='smith');

    多行子查询(in,not in)

    如:查询与部门10员工同岗位的员工信息

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

    多列子查询

    如:查询与SMITH同部门同岗位的员工信息

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

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

    内联视图子查询,作为数据源使用

    select * from (select * from emp);

    --把查询的结果排序

    select rownum r,e.* from emp e;

    --把查询的结果看做一张表

    select * from (select rownum r,e.* from emp e) where r=4;

    --查询公司设置了几个岗位

    select count(*) from (select distinct job from emp);

    --查询薪水最低的5个员工的信息

    select * from (select ename,sal from emp order by sal) where rownum<=5;

    (每个查询都会有rownum,排序后rownum也会随着打乱)

    分页查询

    select * from emp where rownum<=3;

    --取4-6条

    select * from (select rownum r,e.* from emp e) where r>3 and r<=6;

    begin=(page-1)*max;

    end=begin+max;

    相关子查询:子查询依赖于父查询数据(子查询可以代替连接查询,但连接查询不能代替子查询)

    select ename,'随便' from emp;

    select ename,sal 自己的薪水,(select max(sal) from emp) 最高薪水 from emp;

    --查询员工姓名和部门名称(不使用连接查询)(先执行外查询,后执行内查询)

    select ename,deptno,(select loc from dept d where d.deptno=e.deptno) 部门地址 from emp e;

  • 相关阅读:
    centOS6.8 安装Nginx
    Linux 的su 与sudo 的区别,查看所有用户
    查看电脑 8080端口号被哪个应用占用
    配置文件出错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    IDEA 代码格式化,快捷键
    学习servlet心得
    nodejs笔记
    Tomcat 7.0.3x 启动慢并且遇到StackOverflowError的异常的解决办法
    国管公积金取房本
    前端准备技术汇总
  • 原文地址:https://www.cnblogs.com/xsl1995/p/5334060.html
Copyright © 2011-2022 走看看