ETL 去重+fetch()+执行计划+行列转换

去重

#根据单一字段进行查重

select * from table
where ziduan in 
    (select  ziduan from  table 
     group by     ziduan 
     having       count (ziduan) > 1)

#根据单一字段进行查重,并保留rowid最小的记录

delete from table
where ziduan in 
  (select ziduan from table group by ziduan having count (ziduan) > 1)
and rowid not in    
 /* rowid 唯一标记表中行的伪列,它是物理表中行数据的内部地址 每条记录的rowid是唯一的 */
  (select min(rowid) from table group by ziduan having count(ziduan)>1)

#根据表中的多个字段进行查重

select * from table t
where (t.ziduan1,t.ziduan2) in   
  (select ziduan1,zidua2 from table group by ziduan1,ziduan2 having count(*) > 1)
/* count(*)   sql 92语法定义的 标准统计行数语法
count(*) 会统计行为null的行数
count(列名)不会统计此列为null的行  
有主键或联合主键的情况下,count(*)略比count(1)快一些。
没有主键的情况下count(1)比count(*)快一些。
如果表只有一个字段,则count(*)是最快的 */

ETL 去重+fetch()+执行计划+行列转换_第1张图片


在这里插入图片描述

DML (insert、update、delete、select)

DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新
一些DML命令包括insert,update,delete和select。insert命令有助于将新记录或行存储到表中;update命令有助于修改表中的现有记录;delete命令允许从表中删除某个记录或一组记录;select命令允许从一个或多个表中检索特定记录
ETL 去重+fetch()+执行计划+行列转换_第2张图片

#增加
格式1: insert into 表(列名1,列名2,列名3...) values(值1,值2,值3...);
格式2: insert into 表 values(值1,值2,值3...); //向表中插入所有列
#删除
delete from table;                           //删除整个表 保留表结构
delete from 表名 [where 条件];               //删除表(某条)内容
#更新
update 表名 set 字段名=值,字段名=值...;
update 表名 set 字段名=值,字段名=值... where 条件;

删除 drop , delect , truncate

drop table 表名 
drop database 数据库名
truncate table 表名 或者 truncate 表名       //清空表数据 即整个表删除重新创建

/*delete只删数据,不清痕迹;trancate既删数据,又清痕迹
相同点
1.truncate和不带where子句的delete、以及drop都会删除表内的数据。
2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。 
区别
1.执行速度,一般来说: drop> truncate > delete
2.delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交
3.TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)
4.truncate、drop是DLL,操作立即生效,原数据不放到 rollback segment中,不能回滚,delete可以回滚
5.对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,
而应使用不带 WHERE 子句的 DELETE 语句。
由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
6.TRUNCATE TABLE 不能用于参与了索引视图的表。 */

ETL 去重+fetch()+执行计划+行列转换_第3张图片
视图 (http://t.csdnimg.cn/Hn0Yj)


fetch()

在这里插入图片描述
http://t.csdnimg.cn/xJMHp
这是一个前端的函数,主要使用js交互,配置api
Fetch API 提供了一个 JavaScript 接口,优化了http请求和响应的操作方式。这种功能以前是使用 XMLHttpRequest (ajax)实现的。它还提供了一个全局 fetch() 方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。
etch被设计为函数,通过fetch函数调用即可发起AJAX,而不需要像XMLHttpRequest那样创建实例,然后基于xhr实例发起AJAX。
fetch函数返回的Promise对象的结果值HTTP响应是流式获取,即使HTTP响应数据很大,也不会占用过多的内存。
etch将HTTP请求信息封装在一个Request类中,将HTTP响应封装在一个Response类中,Request和Response类都是浏览器原生的,我们可以直接使用。


使用Explain Plan,查询PLAN_TABLE

ETL 去重+fetch()+执行计划+行列转换_第4张图片
ETL 去重+fetch()+执行计划+行列转换_第5张图片
1.3 使用Toad,PL/SQL Developer工具

EXPLAIN PLAN
SET STATEMENT_ID=‘QUERY1’
FOR
SELECT *
FROM a
WHERE aa=1;
SELECT operation, options, object_name, object_type, ID, parent_id
FROM plan_table
WHERE STATEMENT_ID = ‘QUERY1’
ORDER BY ID;
SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics
SET AUTOTRACE ON; 包含执行计划和统计信息

行列转换

ETL 去重+fetch()+执行计划+行列转换_第6张图片

你可能感兴趣的:(etl,数据库,sql)