zoukankan      html  css  js  c++  java
  • JAVA-Unit03: SQL(基础查询) 、 SQL(关联查询)

        Unit03: SQL(基础查询) 、 SQL(关联查询)    

    列别名
    当SELECT子句中查询的列是一个函数
    或者表达式时,那么查询出来的结果集
    中对应的该字段的名字就是这个函数或者
    表达式的名字。为此可以为这一列添加
    别名,这样结果集中该字段就使用别名
    作为该列的名字。
    若希望别名区分大小写或者含有空格,那么
    该别名可以使用双引号括起来。
    SELECT ename,sal*12 "s al"
    FROM emp
    
    ANDOR
    AND优先级高于OR,可以通过括号
    提高优先级。
    SELECT ename,job,sal
    FROM emp
    WHERE sal>1000
    AND job='SALESMAN'
    OR job='CLERK'
    
    LIKE可以模糊匹配字符串
    支持两个通配符:
    %:任意个字符(0-多个)
    _:单一的一个字符
    
    查看名字第二个字母是A的员工:
    SELECT ename,sal,deptno
    FROM emp
    WHERE ename LIKE '_A%'
    
    
    IN(list)与NOT IN(list)
    判断在列表中或者不在列表中。
    常用在判断子查询的结果。
    
    
    BETWEEN...AND...
    判断在一个区间范围内
    
    查看工资在1500到3000之间的员工信息
    SELECT ename,sal,deptno
    FROM emp
    WHERE sal BETWEEN 1500 AND 3000
    
    ANY,ALL
    配合>,>=,<,<=判断使用,
    判断一个列表中的内容是否满足要求
    >ANY(list):大于列表之一即可(大于最小)
    >ALL(list):大于列表所有(大于最大)
    ANY,ALL通常用在子查询结果的判断上。
    
    DISTINCT关键字
    对结果集指定字段值重复的记录行
    去除。
    
    SELECT DISTINCT job FROM emp
    
    对多列去重是指:这这些列的值的组合没有重复
    SELECT DISTINCT job,deptno FROM emp
    
    
    ORDER BY子句,用于结果集排序
    ORDER BY只能写在DQL的最后一个子句中
    ORDER BY可以对结果集按照给定字段的值
    进行升序(ASC)或降序(DESC)进行排序
    
    查看公司的工资排名?
    SELECT ename,sal
    FROM emp
    ORDER BY sal DESC
    
    
    多字段排序是有优先级的,首先按照
    第一个字段的排序规则对结果集排序,
    当第一个字段有重复值时再按照第二个
    字段的值排序,以此类推。
    SELECT ename,deptno,sal
    FROM emp
    ORDER BY deptno,sal DESC
    
    排序的字段若含有NULL值,NULL被
    认作最大值。
    SELECT ename,comm
    FROM emp
    ORDER BY comm 
    
    
    
    聚合函数
    聚合函数也称为:多行函数分组函数
    聚合函数是用来统计结果集中的数据的
    四个对值进行统计的函数:MAX,MIN,AVG,SUM
    一个对记录数统计的函数:COUNT
    
    统计公司工资的最大值与最小值
    SELECT MAX(sal),MIN(sal)
    FROM emp
    
    公司的工资总和和平均值?
    SELECT SUM(sal),AVG(sal)
    FROM emp
    
    查看公司总共多少人?
    SELECT COUNT(ename)
    FROM emp
    
    聚合函数忽略NULL值。
    SELECT SUM(comm),AVG(NVL(comm,0))
    FROM emp
    
    SELECT NVL(comm,0) FROM emp
    
    统计一张表记录总数常用:
    SELECT COUNT(*)
    FROM emp
    
    
    SELECT AVG(sal) FROM emp
    WHERE deptno=20
    
    分组
    GROUP BY子句
    GROUP BY子句可以将结果集按照指定
    字段进行分组,分组原则为该字段值一
    样的记录看作一组,配合聚合函数可以
    进行细致的统计。
    
    查看每个部门的平均工资?
    SELECT AVG(sal),deptno
    FROM emp
    GROUP BY deptno
    
    
    查看每个职位的平均工资与工资总和?
    SELECT AVG(sal),SUM(sal),job
    FROM emp
    GROUP BY job
    
    GROUP BY可以按照多字段分组,分组
    原则为这几个字段值的组合相同的记录
    看作一组
    
    查看同部门同职位的员工各多少人?
    SELECT COUNT(*),deptno,job
    FROM emp
    GROUP BY deptno,job
    
    
    查看部门的平均工资,前提是该部门
    平均工资要高于2000
    SELECT AVG(sal),deptno
    FROM emp
    WHERE AVG(sal)>2000
    GROUP BY deptno
    
    WHERE中不能使用聚合函数作为过滤
    条件,原因在于过滤时机不对。WHERE
    是在第一次查询表中数据进行过滤的,
    逐行过滤,将满足条件的记录查询出来。
    聚合函数是建立在结果集基础上进行统计
    的。这已经是在WHERE之后进行了。
    
    HAVING子句
    HAVING子句必须跟在GROUP BY子句之后,
    用来对GROUP BY分组后对每一个分组进行
    过滤。
    HAVING可以使用聚合函数并根据结果来取舍
    分组。
    
    查看部门的平均工资,前提是该部门
    平均工资要高于2000
    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
    
    查看平均工资高于2000的职位各多少人?
    SELECT COUNT(*),job
    FROM emp
    GROUP BY job
    HAVING AVG(sal)>2000
    
    关联查询
    关联查询的结果集中字段来自多张表
    联合查询的结果。
    关联查询的关键在于连接条件,即:
    表之间数据的对应关系。
    
    查看每个员工以及其所在部门的名称?
    SELECT e.ename,e.deptno,d.dname
    FROM emp e,dept d
    WHERE e.deptno=d.deptno
    
    关联查询中连接条件要与过滤条件同时
    成立!
    查看在NEW YORK工作的员工?
    SELECT e.ename,d.dname,d.loc
    FROM emp e,dept d
    WHERE e.deptno=d.deptno
    AND d.loc='NEW YORK'
    
    
    关联查询中不添加链接条件或链接条件
    无效则会出现笛卡儿积,这通常是一个
    无意义的结果集。
    笛卡儿积的记录数是由参与查询的表的记
    录数乘积得到。
    
    SELECT d.deptno,d.dname
    FROM dept d
    
    
    不满足连接条件的记录是不会被查询
    出来的。
    SELECT e.ename,d.dname
    FROM emp e,dept d
    WHERE e.deptno=d.deptno
    
    查看KING在哪个城市工作?
    SELECT e.ename,d.loc
    FROM emp e,dept d
    WHERE e.deptno=d.deptno
    AND e.ename='KING'
    
    关联查询中N张表关联查询,至少要有
    N-1个连接条件。
    
    内连接
    内连接也是用来完成关联查询的。
    SELECT e.ename,d.loc
    FROM emp e JOIN dept d
    ON e.deptno=d.deptno
    WHERE e.ename='KING'
    
    
    外连接
    外连接在进行关联查询时除了可以将
    满足连接条件的记录查询出来之外,也
    可以将不满足连接条件的记录列出来。
    外连接分为:左外连接,右外连接,全外连接
    左外连接:以JOIN左侧表作为驱动表(所有记录
            都会列出来),那么当驱动表中不满足
            连接条件的记录来自右侧表中的字段值
            为NULL。
    
    SELECT e.ename,d.dname
    FROM emp e 
     LEFT|RIGHT|FULL OUTER JOIN 
    dept d
    ON e.deptno=d.deptno
    
    
    SELECT e.ename,d.dname
    FROM emp e,dept d
    WHERE e.deptno=d.deptno(+)
    
    自连接
    当前表的一条记录可以对应当前表自己的
    多条记录这样的设定就是自连接。
    自连接保存属性相同的数据但是之间有存在
    上下级关系的树状结构数据使用。
    
    SELECT empno,ename,mgr
    FROM emp
    
    
    查看每个员工的名字以及其上司的名字?
    SELECT e.ename,m.ename
    FROM emp e,emp m
    WHERE e.mgr=m.empno
    
    查看SMITH的上司在哪个城市工作?
  • 相关阅读:
    非科班学习路线
    非科班秋招面试总结
    招银网络Java面经
    派分糖果
    修改CentOS7网卡名称为传统名称eth0格式
    浅谈$* 和$@的区别
    Cobbler无人值守安装
    使用kickstart + pxe 部署无人值守安装
    CentOS 7 忘记root密码解决方法
    linux系统开机流程详解
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/6295095.html
Copyright © 2011-2022 走看看