当前位置:   article > 正文

Oracle基本的SQL语句_oracle新增数据sql语句

oracle新增数据sql语句

1.最基本的增删改查

1.1.新增 insert

1.1.1.单表新增

  1. INSERT INTO table_count_output (
  2. data_date,
  3. table_name,
  4. table_count
  5. ) VALUES (
  6. '2023-03-15',
  7. 'FMCUSLVL',
  8. 351
  9. );
  10. COMMIT;

1.1.2.关联新增

  1. INSERT INTO table_count_output (
  2. data_date,
  3. table_name,
  4. table_count
  5. )
  6. SELECT
  7. data_date,
  8. table_name,
  9. table_count
  10. FROM
  11. table_count_output;
  12. COMMIT;

注意:
(1)SQL1中有VALUES 关键字,SQL2中没有。
(2)执行完SQL记得提交,否则会锁表。

1.2.修改 update

1.2.1.单表更新

  1. UPDATE table_count_output
  2. SET
  3. table_name = 'FMCUSLVL',
  4. table_count = 2
  5. WHERE
  6. id = 1;
  7. COMMIT;

1.2.2.多表关联更新

  1. MERGE INTO target t
  2. USING source s ON ( t.id = s.aid ) --用source去更新target
  3. WHEN MATCHED THEN UPDATE --如果source中的数据在target中存在,则更新
  4. SET t.year = s.year
  5. WHEN NOT MATCHED THEN --如果source中的数据在target中不存在,则新增
  6. INSERT (
  7. t.id,
  8. t.name,
  9. t.year )
  10. VALUES
  11. ( s.aid,
  12. s.name,
  13. s.year );
  14. COMMIT;

1.3.删除 delete

1.3.1.删除

  1. DELETE FROM table_count_output
  2. WHERE
  3. id = 1;
  4. COMMIT;

优点:可以精确的指定行删除
缺点:删除慢

1.3.2.截断

TRUNCATE TABLE table_count_output;

优点:删除快
缺点:只能清空表,无法精确的行级删除

1.3.复制表

(1)复制表结构和数据

  1. CREATE TABLE table_count_output_cop
  2. AS
  3. SELECT
  4. *
  5. FROM
  6. table_count_output;

(2)只复制表结构

  1. CREATE TABLE table_count_output_cop
  2. AS
  3. SELECT
  4. *
  5. FROM
  6. table_count_output
  7. WHERE
  8. 1 = 2;

1.4.查询

1.4.1.条件查询

  1. SELECT
  2. *
  3. FROM
  4. table_count_output
  5. WHERE
  6. data_date = DATE '2023-03-15';

1.4.2.统计数据量

  1. SELECT
  2. COUNT(1)
  3. FROM
  4. table_count_output
  5. WHERE
  6. data_date = DATE '2023-03-15';

1.4.3.去重后统计数据量

  1. SELECT
  2. COUNT(DISTINCT table_name)
  3. FROM
  4. table_count_output;

1.4.4.查询字符数与字节数

  1. SELECT
  2. table_name, --原字段
  3. length(table_name), --字符数
  4. lengthb(table_name) --字节数
  5. FROM
  6. table_count_output;

1.4.5.分组函数,查询某个字段是否重复

  1. SELECT
  2. table_name,
  3. COUNT(1)
  4. FROM
  5. table_count_output
  6. WHERE
  7. data_date = DATE '2023-03-15'
  8. GROUP BY
  9. table_name
  10. HAVING
  11. COUNT(1) > 1;

1.4.6.查询交易表中每个账户最新的一条交易记录

  1. SELECT
  2. *
  3. FROM
  4. ( SELECT
  5. t.ntransaccountid, --账号ID
  6. dtexecute, --交易日期
  7. stransno, --交易号
  8. ROW_NUMBER() OVER(
  9. PARTITION BY ntransaccountid
  10. ORDER BY
  11. dtexecute DESC, stransno DESC
  12. ) row_no
  13. FROM
  14. sett_transaccountdetail t
  15. )
  16. WHERE
  17. row_no = 1;

1.4.7.注意

Oracle中的null既不属于in(...),也不属于not in(...)

3.SQL规范

3.1.建议用(+)代替 LEFT JOIN,RIGHT JOIN,INNER JOIN

  1. SELECT
  2. *
  3. FROM
  4. source.sett_account a
  5. LEFT JOIN source.sett_subaccount b ON a.id = b.naccountid
  6. WHERE
  7. a.id < 500;
  8. --可以替换为:
  9. SELECT
  10. *
  11. FROM
  12. source.sett_account a,
  13. source.sett_subaccount b
  14. WHERE
  15. a.id = b.naccountid (+)
  16. AND a.id < 500;

3.2.不要在select字段里面写查询语句

  1. SELECT
  2. a.id,
  3. a.saccountno,
  4. (select 1 from dual)
  5. FROM
  6. source.sett_account a;
  7. --可替换为
  8. SELECT
  9. a.id,
  10. a.saccountno
  11. FROM
  12. source.sett_account a,
  13. (select 1 from dual) b;
  14. --因为表B只有一条数据,不需要加任何关联条件

3.3.查询条件中不建议写in

  1. SELECT
  2. *
  3. FROM
  4. sett_account a
  5. WHERE
  6. id IN ( SELECT
  7. naccountid
  8. FROM
  9. sett_subaccount
  10. );
  11. --可以替换为:
  12. SELECT
  13. *
  14. FROM
  15. sett_account a,
  16. sett_subaccount b
  17. WHERE
  18. a.id = b.naccountid (+)
  19. AND b.naccountid IS NULL;
  20. --或者
  21. SELECT
  22. *
  23. FROM
  24. sett_account a
  25. WHERE
  26. EXISTS ( SELECT
  27. 1
  28. FROM
  29. sett_subaccount b
  30. WHERE
  31. a.id = b.naccountid
  32. );

4.SQL优化

4.1.建索引

4.1.1.联合索引的特点

索引有序+高度较低+存储列值

4.1.2.联合索引的好处

避免回表。两个单列查询返回行较多,同时查返回行较少,联合索引更高效。

4.1.3.什么时候该用联合索引以及如何设计组合索引更高效

(1)等值查询中,查询条件a返回的条目比较多,查询条件b返回的条目比较多,而同时查询a、b返回的条目比较少,那么适合建立联合索引;
(2)对于有等值查询的列和范围查询的列,等值查询的列建在前、范围查询的列建在后比较实用;
(3)如果联合索引列的前置列与索引单列一致,那么单列查询可以用到索引,这样就避免了再建单列索引,因此联合索引的前置列应尽量与单列一致;

4.1.4.使用索引需要注意的地方

(1)超过3个列的联合索引不合适,否则虽然减少了回表动作,但索引块过多,查询时就要遍历更多的索引块了;
(2)建索引动作应谨慎,因为建索引的过程会产生锁,不是行级锁,而是锁住整个表,任何该表的DML操作都将被阻止,在生产环境中的繁忙时段建索引是一件非常危险的事情;
(3)对于某段时间内,海量数据表有频繁的更新,这时可以先删除索引,插入数据,再重新建立索引来达到高效的目的。

4.1.5.另外有些情况不适合建索引

(1)很少参与查询的列。
(2)对于增、删、改操作远大于查询的列。
(3)对于很少数据值的列,例如性别。
(4)对于那些结果集占了表数据总量很大比例的查询。
(5)对于备注、文本框等长度很大的列。

5.查询锁表并解锁

  1. --查询被锁的表
  2. SELECT
  3. l.session_id sid,
  4. s.serial#,
  5. l.locked_mode,
  6. l.oracle_username,
  7. s.user#,
  8. l.os_user_name,
  9. s.machine,
  10. s.terminal,
  11. a.sql_text,
  12. a.action
  13. FROM
  14. v$sqlarea a,
  15. v$session s,
  16. v$locked_object l
  17. WHERE
  18. l.session_id = s.sid
  19. AND s.prev_sql_addr = a.address
  20. ORDER BY
  21. sid,
  22. s.serial#;
  23. --解锁
  24. ALTER SYSTEM KILL SESSION 'sid,serial#' immediate;

6.数据泵导入与导出

6.1.创建表空间

CREATE TABLESPACE idms DATAFILE '/opt/oracle/oradata/smcw/idms.dbf' SIZE 2048M AUTOEXTEND ON NEXT 200M MAXSIZE UNLIMITED LOGGING ONLINE PERMANENT;

6.2.创建用户

CREATE USER idms PROFILE DEFAULT IDENTIFIED BY idms DEFAULT TABLESPACE idms TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;

6.3.用户授权

  1. 1.grant resource,connect,dba to idms;
  2. 2.grant read,write on directory IDMS_DIR to idms;

6.4.导入

  1. 1.impdp idms2/idms2@10.0.11.85:1521/ora19c directory=IDMS_DIR DUMPFILE=idms_20230419.dmp REMAP_SCHEMA=idms:idms2 remap_tablespace=idms:idms2 TABLE_EXISTS_ACTION=REPLACE
  2. 2.imp target/target@10.10.2.51:1521/db file='target_20230302.dmp' fromuser='target' touser='target' ignore=y;

6.5.导出

  1. --expdp导出
  2. expdp idms/idms@10.0.11.85:1521/ora19c schemas=idms directory=IDMS_DIR dumpfile=idms_20230419.dmp logfile=idms_20230419.log;
  3. --exp导出表结构和数据
  4. exp target/target@10.10.2.51:1521/db file=E:\target_20230510.dmp owner=('target');
  5. --exp只导出表结构 rows=n
  6. exp target/target@10.10.2.51:1521/db file=E:\target_20230510.dmp owner=('target') rows=n;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/871270
推荐阅读
相关标签
  

闽ICP备14008679号