zoukankan      html  css  js  c++  java
  • 003

    列的别名 
    当一个SELECT子句中的字段是一个函数 
    或者表达式时,那么结果集中对应的该字段 
    的名字就是这个函数或表达式,可读性差, 
    这时可以为该字段指定别名。 
    别名可以使用双引号括起来以区分大小写 
    和添加空格 
    SELECT  
     ename,sal*12 sal, 
     TO_CHAR(hiredate,'YYYY-MM-DD') hiredate 
    FROM emp 
     
    WHERE在查询中是用来添加过滤条件的, 
    它的过滤时机是在查询表的过程中进行 
    的,每当遍历表中一条数据时就会检查 
    其是否满足WHERE条件,满足则会被查询 
    出来,不满足则被忽略。 
     
     
    AND和OR是用来连接多个过滤条件的,并且 
    AND的优先级是高于OR的。 
     
    查看工资高于1000的职位是CLERK和SALESMAN 
    的员工信息 
    SELECT ename,job,sal 
    FROM emp 
    WHERE sal>1000 
    AND (job='SALESMAN' 
    OR job='CLERK') 
     
    LIKE用于模糊匹配字符串,支持两个通配符: 
    _:表示任意的一个字符 
    %:表示任意个字符 
     
    查看名字第三个字母是L的员工 
    SELECT ename,sal,deptno 
    FROM emp 
    WHERE ename LIKE '__L%' 
     
    IN和NOT IN是判断是否在列表 
    中或者不能在列表中 
    IN和NOT IN通常用作子查询 
    SELECT ename, job FROM emp   
    WHERE job IN ('MANAGER', 'CLERK'); 
     
    SELECT ename, job FROM emp  
    WHERE deptno NOT IN (10, 20); 
     
    BETWEEN...AND... 
    判断是否在一个范围内 
    SELECT ename, sal FROM emp   
    WHERE sal BETWEEN 1500 AND 3000 
     
    ANY与ALL是用作判断一个值是否 
    >,>=,<,<=列表中的内容 
    >ALL(list):大于列表中最大的 
    <ALL(list):小于列表中最小的 
    >ANY(list):大于列表中最小的 
    <ANY(list):小于列表中最大的 
    AND与ALL的列表通常不会给定确定的 
    值,都是配合一个子查询使用。 
    SELECT empno, ename, job, sal, deptno 
    FROM emp 
    WHERE sal > ANY (3500,4000,4500); 
     
     
    DISTINCT关键字 
    用于将结果集中指定的字段的重复 
    记录去除,DISTINCT应当紧跟在 
    SELECT关键字之后,可以对单列 
    去重也可以对多列去重。 
     
    查看公司的职位有哪些? 
    SELECT DISTINCT job 
    FROM emp 
     
    多字段去重,不保证每个字段没有重复 
    值。结果集中这些字段值的组合没有重复 
    记录。 
    SELECT DISTINCT job,deptno 
    FROM emp 
     
    排序结果集 
    ORDER BY子句可以将当前结果集 
    按照给定的字段的值进行升序或者 
    降序排列。 
    ORDER BY子句只能写在DQL语句的 
    最后一个子句上。 
    ASC:升序(默认就是升序,通常不写) 
    DESC:降序。 
     
    查看公司中工资的排名 
    SELECT ename,sal,deptno 
    FROM emp 
    ORDER BY sal DESC 
     
    排序的字段中若含有NULL值,那么NULL 
    被视作最大值。 
    按照奖金排序 
    SELECT ename,sal,comm 
    FROM emp 
    ORDER BY comm DESC 
     
    多字段排序 
    排序存在优先级,先按照第一个字段排序 
    结果集,当第一个字段的值有重复的时候 
    才会将这些记录中按照第二个字段的排序 
    规则进行排序,以此类推。 
    每个字段都需要单独指定排序方式。 
    SELECT ename,deptno,sal 
    FROM emp 
    ORDER BY deptno DESC,sal DESC 
     
    聚合函数,又称为多行函数,分组函数 
    聚合函数是用来统计的,可以将多条记录 
    中指定的字段值进行统计,然后得到一个 
    结果。 
    MAX(),MIN() 
    统计最大值与最小值 
    SELECT MAX(sal),MIN(sal) 
    FROM emp 
     
    AVG(),SUM() 
    求平均值,总和 
    SELECT AVG(sal),SUM(sal) 
    FROM emp 
     
    COUNT() 
    统计记录数 
    SELECT COUNT(ename) 
    FROM emp \
     
    聚合函数都是忽略NULL值的。 
    SELECT COUNT(comm) 
    FROM emp 
     
    通常统计表中记录数可以使用 
    SELECT COUNT(*) FROM emp 
     
    SELECT SUM(comm),AVG(comm) 
    FROM emp 
     
    SELECT AVG(NVL(comm,0)) 
    FROM emp 
     
    GROUP BY子句 
    GROUP BY可以将当前查询的结果集 
    按照GROUP BY子句给定的字段的值 
    相同的记录划分为一个组,配合聚合 
    函数可以进行更细分的统计工作。 
    查看每个部门的平均工资? 
    SELECT AVG(sal),deptno 
    FROM emp 
    GROUP BY deptno 
     
    SELECT MAX(sal),job 
    FROM emp 
    GROUP BY job 
     
    当SELECT子句中出现了聚合函数,那么 
    凡不在聚合函数中的其他字段必须出现在 
    GROUP BY子句中,反过来则不是必须的。 
    通常不使用聚合函数就没必要使用GROUP BY 
     
    GROUP BY根据多字段分组 
    分组原则是将结果集中,GROUP BY指定的 
    这些字段的值的组合相同的记录看做一组 
     
    查看每个部门每个职位都有多少人? 
    SELECT COUNT(*),job,deptno 
    FROM emp 
    GROUP BY job,deptno 
     
    查看部门平均工资高于2000的这些 
    部门的具体平均工资是是多少? 
    SELECT AVG(sal),deptno 
    FROM emp 
    WHERE AVG(sal)>2000 
    GROUP BY deptno 
     
    WHERE中不允许是由聚合函数,原因 
    在于过滤的时机并不对。 
    聚合函数的统计是建立在结果集的基础 
    之上的,这就说明在统计前,数据应当 
    已经查询出来并生成了结果集,而WHERE 
    的过滤就是在查询生成结果集的过程中 
    进行的。所以WHERE在前,统计在后, 
    所以不能再WHERE中使用聚合函数进行过滤。 
     
    HAVING子句 
    HAVING子句可以使用聚合函数的结果进行 
    过滤。HAVING是配合GROUP BY分组的, 
    目的是根据过滤条件取舍某些分组的记录。 
    HAVING必须跟在GROUP BY之后。不能单独 
    定义。 
    SELECT AVG(sal),deptno 
    FROM emp 
    GROUP BY deptno 
    HAVING AVG(sal)>2000 
     
    查看平均工资高于2000的那些部门的 
    最高工资和最低工资都分别是多少? 
    SELECT MAX(sal),MIN(sal),deptno 
    FROM emp 
    GROUP BY deptno 
    HAVING AVG(sal)>2000 
     
    关联查询 
    联合多张表进行查询,结果集中的字段 
    可能来自多个表。 
    关联查询要添加连接条件,数据库根据 
    连接条件将满足的记录进行连线,从而 
    提取这些记录中对应查询的字段值构成 
    结果集。若不添加连接条件会产生笛卡尔 
    积,这通常是一个无意义的结果集。 
     
    查看每个员工以及其部门信息 
    SELECT e.ename,e.job, 
           e.deptno,d.dname 
    FROM emp e,dept d 
    WHERE e.deptno=d.deptno 
     
    不添加连接条件会产生笛卡尔积 
    笛卡尔积的记录数数参与关联查询 
    的表的记录数的乘积。 
    会将表的每一条记录与另一张表的 
    每条记录连接一次并产生一条记录 
    SELECT e.ename,d.dname 
    FROM emp e,dept d 
     
    通常N张表关联查询就要有至少N-1个 
    连接条件。 
     
    关联查询中的连接条件要与过滤条件 
    同时成立。 
    查看在NEW YORK工作的员工? 
    SELECT e.ename,e.job, 
           d.dname,d.loc 
    FROM emp e,dept d 
    WHERE e.deptno=d.deptno 
    AND d.loc='NEW YORK' 
     
    内连接 
    内连接也是关联查询的一种 
    查看在NEW YORK工作的员工? 
    SELECT e.ename,e.job, 
           d.dname,d.loc 
    FROM emp e JOIN dept d 
    ON e.deptno=d.deptno 
    WHERE  
       d.loc='NEW YORK' 
     
    不满足连接条件的记录是不会出现在结果集中的 
     
    外连接 
    外连接在进行关联查询时除了会将满足连接条件 
    的记录列出来,也会将不满足连接条件的记录 
    列出来。 
    外连接分为: 
    左外连接:以JOIN左侧表作为驱动表(主要显示记录的表) 
            该表中的所有记录都要显示出来,当某条记录 
            不满足连接条件时,该条记录中来自JOIN右侧 
            表中的字段全部以NULL作为值。 
    右外连接,全外连接 
     
    SELECT e.ename,e.job,d.dname 
    FROM emp e  
    LEFT|RIGHT|FULL OUTER JOIN  
    dept d 
    ON e.deptno=d.deptno 
     
    自连接 
    自连接保存的数据是当前表的一条记录 
    可以对应当前表的多条记录 
    这种设计用于解决记录属性相同但记录间 
    又存在上下级关系的树状结构时使用。 
     
    查看每个员工以及其上司的名字? 
    SELECT e.ename,m.ename 
    FROM emp e,emp m 
    WHERE e.mgr=m.empno 
     
    SELECT e.ename,m.ename 
    FROM emp e JOIN emp m 
    ON e.mgr=m.empno 
     
    查看SMITH的上司在哪个城市? 
    SELECT e.ename,m.ename,d.loc 
    FROM emp e JOIN emp m 
    ON e.mgr = m.empno 
    JOIN dept d 
    ON m.deptno = d.deptno 
    WHERE e.ename='SMITH' 
     
    SELECT e.ename,m.ename,d.loc 
    FROM emp e,emp m,dept d 
    WHERE e.mgr = m.empno 
    AND m.deptno = d.deptno 
    AND e.ename='SMITH' 
     
    作业: 
    1:查看工资高于2000的员工 
    2:查看不是"CLERK"职位的员工 
    3:查看工资在1000-2500之间的员工 
    4:查看名字是以K结尾的员工 
    5:查看20,30号部门的员工 
    6:查看奖金为NULL的员工 
    7:查看年薪高于20000的员工 
    8:查看公司共有多少种职位 
    9:按部门号从小到大排列查看员工 
    10:查看每个部门的最高,最低,平均工资,和工资总和 
    11:查看平均工资高于2000的部门的最低薪水 
    12:查看在NEWYORK工作的员工 
    13:查看所有员工及所在部门信息,若该员工没有部门,则 
        部门信息以NULL显示 
    14:查看ALLEN的上司是谁 
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    AtCoder Beginner Contest 205
    Codeforces Round #725 (Div. 3)
    Educational Codeforces Round 110 (Rated for Div. 2)【A
    Codeforces Round #722 (Div. 2)
    AtCoder Beginner Contest 203(Sponsored by Panasonic)
    AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    PTA 520 钻石争霸赛 2021
    Educational Codeforces Round 109 (Rated for Div. 2)【ABCD】
    AtCoder Beginner Contest 200 E
    Educational Codeforces Round 108 (Rated for Div. 2)【ABCD】
  • 原文地址:https://www.cnblogs.com/wangyuyanhello/p/8940903.html
Copyright © 2011-2022 走看看