zoukankan      html  css  js  c++  java
  • 多表查询(学习笔记)

    语法:

    SELECT [DISTINCT] * | 列名称 [AS]别名,........
    FROM 表名称1 [别名1],表名称2 [别名2],...
    [WHERE 条件(s)]
    [ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....] 
    • 示例一 查询所有员工的信息和部门信息

       

    SELECT * FROM EMP,DEPT;

    查询结果可以看到有56条记录,而emp表只有14条,dept表只有4条,很多重复记录,这就是多表查询所产生的笛卡尔积

    消除笛卡尔积,在where中加入条件来消除

    • 示例二 查询所有员工的信息和部门信息
    SELECT * FROM emp e,dept d
    WHERE e.deptno=d.deptno;

    这样结果就正常了

    •    示例三 查询每个员工的编号、姓名、职位、基本工资、部门名称、部门位置
    SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc
    FROM emp e,dept d
    WHERE e.deptno=d.deptno;
    • 示例四 查询出每个员工的编号、姓名、入职日期、基本工资、工资等级

    此时要想进行等级查询就要用要salgrade表,但是salgrade表中并没有字段与emp表中字段相对应,但是在salgrade表中有losal(最低工资)、hisal(最高工资)用于表示一个工资等级的范围,所以,可以通过BETWEEN...AND进行笛卡尔积的消除

    SELECT e.empno,e.ename,e.hiredate,e.sal,s.grade
    FROM emp e,salgrade s
    WHERE e.sal BETWEEN s.losal AND s.hisal;
    • 示例五 示例四中的工资等级替换 1显示为E等级工资,2显示为D等级工资3显示为C等级工资,4显示为B等工资,5显示为A等工资
    SELECT e.empno,e.ename,e.hiredate,e.sal,
    DECODE(s.grade,1,'E等工资',
                    2,'D等工资',
                    3,'C等工资',
                    4,'B等工资',
                    5,'A等工资'
    ) 工资等级
    FROM emp e,salgrade s
    WHERE e.sal BETWEEN s.losal AND s.hisal;
    • 示例六 查询每个员工的姓名、职位、基本工资、部门名称、工资等级

    数据在3张表中emp,dept,salgrade

    SELECT e.ename,e.sal,d.dname,
    DECODE(s.grade,1,'E等工资',
                    2,'D等工资',
                    3,'C等工资',
                    4,'B等工资',
                    5,'A等工资'
    ) 工资等级
    FROM emp e,dept d,salgrade s
    WHERE e.deptno=d.deptno 
        AND e.sal BETWEEN s.losal AND s.hisal;
  • 相关阅读:
    什么是子网掩码?(转)
    测试LM414-IOT网关MQTT功能
    连接s7-200时,提示未找到指定的访问点
    github中文件夹后面跟@+数字什么意思?为什么git clone下来里面是空的?
    Java知识32 数据结构 枚举 向量【多测师】
    java知识31 void 、实例化对象后面带参数、 实例变量(重点)【多测师】
    Java知识30 package【多测师】
    Java知识29 接口【多测师】
    java知识28 Java封装【多测师】
    Java知识27 抽象类【多测师】
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4214388.html
Copyright © 2011-2022 走看看