• 关联查询之92语法和99语法


    92语法

    -- 查询部门编号为10的员工信息和所在部门的信息
    -- 92 等值连接
    select e.ename,d.dname
    from emp e,dept d
    where e.deptno = d.deptno

    --92非等值连接
    -- 查询员工姓名 薪资 和薪资等级
    select e.ename, e.sal, sg.grade
    from emp e, salgrade sg
    where e.sal between sg.losal and sg.hisal

    --92 外连接
    -- 左外连接 以左边的表为主表 右边为添加的数据 
    -- 左边表中所有的数据都会出现在结果集 右边表对应跟左边有合适的就显示出来,没有合适的就空着
    select e.ename,d.dname
    from emp e,dept d
    where e.deptno(+) = d.deptno

    -- 92 自连接
    -- 本表中的一条数据 使用到了本表中的另外一条数据
    -- 查询出来员工以及他的上司的名字 
    select e.ename || '的上司是:' || mgr.ename
    from emp e, emp mgr
    where e.mgr = mgr.empno


    --- 查询员工姓名 薪资 部门名称 薪资等级
    select
    from emp e,dept d,salgrade sg
    where e.deptno = d.deptno
    and e.sal between sg.losal and sg.hisal

    select * from emp,dept

     

     

    -- 99语法
    -- 99交叉连接 相当于是92语法中的笛卡尔积
    select * from emp e cross join dept d

    -- 自然连接
    -- 系统自动使用两张表中同名的列进行等值连接
    select * from emp e natural join dept d

    --制定某一列左自然连接
    select * from emp e join dept d using (deptno)


    -- 如果两张表没有同名的列 或者做的不是等值连接
    -- join on(万能,除了外连接)
    select *
    from emp e
    join salgrade sg
    on e.sal between sg.losal and sg.hisal
    where e.deptno = 10

    -- 99 左外连接
    select e.ename, d.dname
    from emp e
    left outer join dept d
    on e.deptno = d.deptno

    -- 99 右外连接
    select e.ename, d.dname
    from emp e
    right outer join dept d
    on e.deptno = d.deptno

    99语法练习
    --使用99语法更改相应作业:
    --1.列出所有雇员的姓名及其上级的姓名。
    --92语法
    select e.ename, mgr.ename from emp e, emp mgr where e.mgr = mgr.empno

    --99语法
    select e.ename, mgr.ename from emp e join emp mgr on e.mgr = mgr.empno

    --2.列出入职日期早于其直接上级的所有雇员。
    select e.ename, mgr.ename
    from emp e
    join emp mgr
    on e.mgr = mgr.empno
    and e.hiredate < mgr.hiredate

    --3.列出所有部门名称及雇员


    select e.ename, d.dname from emp e join dept d on e.deptno = d.deptno


    --4.列出所有“CLERK”(办事员)的姓名及其部门名称。
    select e.ename, d.dname
    from emp e
    join dept d
    on e.deptno = d.deptno
    and e.job = 'CLERK'


    --5.列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。
    select e.*
    from emp e
    where e.deptno = (select d.deptno from dept d where d.dname = 'SALES')


    --6.列出在每个部门工作的雇员的数量以及其他信息。
    select *
    from (select e.deptno, count(e.ename) from emp e group by e.deptno) t01 natural
    join dept d


    --7.列出所有雇员的雇员名称、部门名称和薪金。
    select ename, dname, sal from emp e natural join dept d


    --8.求出部门编号为20的雇员名、部门名、薪水等级
    select e.ename, e.ename, sg.grade
    from emp e
    join dept d
    on e.deptno = d.deptno
    join salgrade sg
    on e.sal between sg.losal and sg.hisal

  • 相关阅读:
    MySQL next-key lock 加锁范围是什么?
    使用 Docker 安装并连接 MySQL
    Mac 常用软件推荐 —— Java 开发工程师
    Toolkit 大更新:UI 更美观,用起来更方便!
    工作中的设计模式 —— 建造者模式
    工作中的设计模式 —— 策略模式
    工作中的设计模式 —— 原型模式
    Centos7 安装Oracle记录
    Centos7 常用命令和自己平时使用命令
    AutoHotKey 简易自动化脚本的一些资料
  • 原文地址:https://www.cnblogs.com/su-chu-zhi-151/p/11171508.html
Copyright © 2020-2023  润新知