Oracle笛卡尔积,分组,多表连接

2024-03-09 22:32

本文主要是介绍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中找不到   所以只有主表的记录被输出 
 


     
 


 


   




 

这篇关于Oracle笛卡尔积,分组,多表连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792154

相关文章

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的stream流分组示例详解

《Java中的stream流分组示例详解》Java8StreamAPI以函数式风格处理集合数据,支持分组、统计等操作,可按单/多字段分组,使用String、Map.Entry或Java16record... 目录什么是stream流1、根据某个字段分组2、按多个字段分组(组合分组)1、方法一:使用 Stri

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八