阅读量:0
一、基础查询 1)单表查询 1. 查看表结构 使用两种方式可查看数据库的表结构: 查询后会显示该表的创建语句以及结构 2. 查询全表 使用 SELECT * 查询全表,此时数据库会返回表所有列 3. 行过滤 使用条件查询进行过滤,例如查询所有 ID 大于 103 的行:4. 查找控制 使用 IS NULL 为条件查找控制: 5. 查询满足多个条件的行 使用 OR 字句来查询满足多个条件的行,但在实际应用中使用 OR 会严重降 低数据库的性能,所以尽量避免使用 OR,可以改为 IN 6. 别名 使用 AS 在查询时给列取别名 7. 列拼接 使用||可将几条列拼接起来,可以拼为一句话8. 根据条件查询并对返回的信息进行标识 使用 CASE...END AS 对返回的信息进行标识,用 AS 为新的列取别名作为返回 的信息 9. 使用 limit 限制返回结果的行数 2)查询结果排序 使用 ORDER BY 对查询结果进行排序,ASC 为升序,DESC 为降序 3)使用 UNION ALL 进行多表联合检索需注意多表联合检索时列的数据类型必须匹配,否则会报错 使用 UNION ALL 合并结果集后如果有重复数据可以使用 UNION 来合并, UNION 有去重功能,例如使用 UNION ALL: 使用 UNION 后就不会出现重复行 二、层次查询 1. 概念 在实际生产应用中有很多地方会用到树状的数据结构,例如某部门的组织结 构,下辖有各个分部门,各个分部门下辖又有各个组织,这种数据结构在进行查 询时就使用到层次查询,涉及到父节点、子节点、叶节点等的应用。2. 层次查询子句 1)LEVEL 伪列 LEVEL 伪列是表示当前数据在树状的数据结构图中的层级,不存在于表中, 查询时动态生成,树状数据结构的根节点 LEVEL 为 1,以它开始依次向下递增, 例如: 2)CONNECT_BY_ISLEAF 伪列 CONNECT_BY_ISLEAF 伪列是表示当前节点是否是叶节点(即不存在子节点, 例如上图中最下排三个节点就是叶节点),1 表示是叶节点,0 表示不是叶节点。 3)CONNECT_BY_ISCYCLE 伪列 检测 CONNECT BY 查询中 是否存在 循环。当 查询到达 一个循环 时, CONNECT_BY_ISCYCLE 会返回 1,表示存在循环;否则返回 0,表示不存在循环。 这对于避免无限循环非常重要,因为在处理层次结构数据时,循环可能导致查询 永远无法结束。 4)connect by 与 PRIOR 关键字 使用 connect by 指定一个或多个父子关系的列,数据库根据这些关系递归地检 索数据,然后使用 PRIOR 关键字指定从一个行到另一个行建立连接,建立父子关 系,在以下这个例子中,通过 CONNECT BY 递归地查询所有下属员工。通过指定 PRIOR 关键字来建立员工之间的父子关系,可以构建整个层次结构的数据。 例如 EMPLOYEE_ID=101 的员工上级节点为 MANAGER_ID=100,这两个节点 之 间 就 建 立 了 父 子 关 系 , 子 节 点 记 录 的 MANAGER_ID= 父 节 点 记 录 的 EMPLOYEE_ID查询 LEVEL、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 伪列 5)start with 关键字 使用 start with 关键字指定从哪一行开始查询,即将该节点作为根节点进行 查询 三、并行查询 1.自动并行 1)查询默认的并行策略,此时是关闭的 2)开启并行,并设置最大并行查询数为 4,执行完成后重启数据库生效3)未开启并行时查看查询表 T1 的执行计划 开启并行查询后查看查询表 T1 的执行计划 可以看到此时执行计划出现 LOCAL COLLECT,这指的是在并行查询过程中, 各个并行执行的节点将它们处理的数据局部汇总的操作。 2.手动并行 1)修改 PARALLEL_POLICY 参数为 2,开启手动并行模式,并重启数据库 2)执行命令查看执行计划,可以看到此时不是并行查询的3)因为开启了手动并行,所以需要使用 HINT 来指定并行度,语法如下 /*+ PARALLEL([<表名>] <并行任务个数>) */ 四、闪回查询 1. 闪回技术 当用户操作不当导致错误的删改数据时,可以使用闪回技术可以帮助查询找 回,通过 ENABLE_FLASHBACK 参数控制闪回功能的开启关闭(1 为开启,0 为关 闭),开启闪回功能后数据库会保留回滚段一段时间,由 UNDO_RETENTION 参 数指定回滚段的时长(缺省 90 秒,最大一天)。 限制:MPP 不支持闪回,数据守护环境下,备库不支持闪回。 不能对系统表、临时表、HUGE 表、内部辅助表、动态表等执行闪回 表操作。 2. 操作 1)开启闪回功能 2)查看当前回滚段保留时间,显示当前默认回滚段保留时间为 90s 3)修改回滚段保留时间4)按时间查询历史记录,通过指定一个 timestamp 时间类型,来查询过去某个 特定时刻的表; 查询当前时间表的状态和时间 在表中插入新的数据: 闪回查询之前时间点的表(因为我的虚拟机时间和数据库时间不一样,所以更换 为 Windows 上的数据库操作): 5)创建临时表并进行闪回查询 查看当前时间在临时表 T2 中插入数据,使用闪回查询查询插入之前的 T2 执行命令后出现报错,由此可见数据库不支持临时表的闪回查询 同样的,创建视图也不支持闪回查询达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台