zoukankan      html  css  js  c++  java
  • Oracle笛卡尔积,分组,多表连接

    一  oracle的单行函数 

          转换函数 

          to_date(日期字符串,日期格式)  字符串的格式必须由第二个参数来判断 

                             日期格式 : 

                             年 yyyy,月mm,日dd,小时(hh12小时制,hh24 24小时制) 分钟 mi 秒 ss 

              举例 :select to_date('2015/03/09','yyyy/mm/dd') from dual 

          to_char(数字) 将数字转换成char类型 

          to_char(日期,日期格式)  将日期转换成char类型  日期格式 可以任意 输出的内容 根据日期的格式而定 

                 举例   select to_char(sysdate,'hh24')  输出24小时制的当前时间的hour 

          to_number(字符串数字) 将字符串的数字转换成number类型 

                           举例    to_number('123')输出数字 123        

       聚合函数 

            组函数会忽略空值。 
     
                      组函数可以用于任何有效的表达式。 

           如:可以对数字、字符串和日期使用COUNT、MAX、MIN。 

           组函数会忽略空值。 

           避免使用 COUNT(*) ,而使用 COUNT(ROWID) 

           count(*|1|列名|rowid) 统计总行数  

           sum(列名) 求总和 

           max(列名) 求最大值 

           avg(列名) 求平均值 

           min(列名) 求最小值 

       分组(group by)      

             语法: 

       SELECT [DISTINCT] *|[列名 别名,…]  

        FROM 表名 

       [WHERE 条件] 

        [GROUP BY 分组条件] 

        [ORDER BY 列名 [ASC]|[DESC], ...]; 

        注意: 

       如果查询中包含一个聚合函数,而所选择的列不在聚合函数中,那么这些列就必须出现在GROUP BY子句中。 

       聚合函数不能出现在WHERE子句中。 

        举例 

        id,name,dept,sal 

         1  test  10  100 

         2  test1 10  200 

         3  test2 20  300 

         4  test3 30  1000 

         如果按照部门分组  相同的值被分为一组  分组的结果为三组:10,20,30 

         分组的组的数量 也就是最终输出的结果的数量 最终的结果   
     
         dept max(sal)     其他的列 如果需要使用 必须使用聚合函数 聚合为一条记录 
     
          10   200                          分组聚合 也就是找出组中 最大或者最小或者平均值 输出 最终聚合的结果只有一条记录 
     
          20   300 

         30   1000 
     
         select deptno,count(*) from emp group by deptno having count(*)>3; 
     
         将分组后的结果 在进行条件过滤 having中的条件必须是在列中能够出现 
     
        where 是在分组之前对数据进行过滤输出后  在分组 输出 
     
        having条件 是在分组之后 对分组的结果进行过滤输出 
     
      表关联 
     
        笛卡尔方式的连接 
     
        select e.ename,d.dname  
     
        from emp e,dept d 
     
         where e.deptno=d.deptno and ename='SMITH' order by ename; 
         
      内连接 
     
        语法: 
     
       SELECT [DISTINCT] *|[列名 别名,…]  
     
        FROM 主表名 别名 
     
       [INNER] JOIN 从表名 别名 ON 连接条件 
     
       [WHERE 条件]; 

        列出所有连接表中与连接条件相匹配的数据行。 
     
       使用表别名,可以简化语句。 
     
       内连接分类 
     
       等值连接:在连接条件中使用等号(=)运算符来比较被连接列的列值 
     
       连接条件的列名相同时,可以使用USING (列名)来简化。 
     
       非等值连接:在连接条件中使用除等号运算符以外的其它比较运算符来比较被连接的列的列值。 

       !=、>、>=、<、<=、LIKE、BETWEEN AND、 
     
       内连接 是主表和从表的数据都匹配之后 输出 不匹配抛弃 
     
       A                           B 
     
        id name   deptno              deptno  name 
     
        1  test            1                    1                 研发部 
     
        2  jiaozi          2                   2                测试部 
     
        3  cherry        2                 
     
        4  qian          3             
     
        select * from A a inner join B b on a.deptno=b.deptno         
     
            输出结果为 
     
           1  test   1    研发部 
     
           2  jiaozi  2 测试部 
     
           3  cherry  2测试部 
     
           4的记录因为在从表B中找不到所以被抛弃  
     
        select * from A a left join B b on a.deptno=b.deptno          
     
            1  test   1    研发部 

           2  jiaozi  2 测试部 
     
           3  cherry  2测试部 
     
           4  qian    3 (空) 

           4 的记录因为在从表B中找不到   所以只有主表的记录被输出 
     


         
     


     


       




     
  • 相关阅读:
    2018-2019-2 网络对抗技术 20165230 Exp2 后门原理与实践
    BZOJ2038: [2009国家集训队]小Z的袜子(hose)
    BZOJ3262陌上花开 树状数组+Treap
    BZOJ1468 Tree 点分治入门练习题
    BZOJ2152 聪聪可可 点分治入门
    BZOJ3506 BZOJ1552 排序机械臂 Splay区间翻转(数组版自底向上的写法)
    BZOJ3196: Tyvj 1730 二逼平衡树 (线段树 + Treap 练习题)
    ZOJ2112 Dynamic Rankings 动态区间Kth(单点修改) 线段树+Treap写法
    OO第4单元总结&课程总结
    OO第三单无总结
  • 原文地址:https://www.cnblogs.com/t0404/p/10291072.html
Copyright © 2011-2022 走看看