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;
  • 相关阅读:
    06-python基础-基本数据类型介绍
    05 python开发的IDE之一--pycharm以及基本的运算符
    04 python基础-变量及如果语句的作业
    03 python基础-变量
    02 python的安装及分类
    es6的标签整体引用及引入变量
    django之auth组件【知识点补充】
    BootStrap让两个控件在一行显示(label和input同行)
    django 将view视图中的对象传入forms表单验证模块中
    Django ajax异步请求分页的实现
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4214388.html
Copyright © 2011-2022 走看看