oracle.数据的增删改、事务、创建表、修改表、删除表

2023-11-15

一、数据的增删改
1、备份表
(01)全表备份
CREATE TABLE 新表名 AS 子查询;

---将emp表全表备份
CREATE TABLE emp_bak AS SELECT * FROM emp;

SELECT * FROM emp_bak;

(02)只备份表结构,不备份数据
CREATE TABLE 新表名 AS 子查询 WHERE 1=2;
CREATE TABLE emp_bak1 AS SELECT * FROM emp where 1=2;

select * from emp_bak1;

(03)在备表的同时,修改列名
CREATE TABLE 新表名(新列名,新列名....) AS SELECT 列名,列名.... FROM 表名 WHERE 条件;

CREATE TABLE emp_bak2(pno,ename,work,salary) AS SELECT empno,ename,job,sal from emp;

SELECT * FROM emp_bak2;

2、新增表数据
(01)复制表数据
INSERT INTO 表名(列名,列名....) 子查询;

---将dept表的数据复制到emp表中
INSERT INTO emp(empno,ename,JOB) SELECT * FROM dept;

select * from emp;

(02)插入数据
INSERT INTO 表名[(列名,列名....)] VALUES(值1,值2....);

---不写列名,给表中的所有列赋值
INSERT INTO emp VALUES(8888,'zhangsan','java dev',7788,to_date('2018-07-11','yyyy-mm-dd'),4000,500,40);

INSERT INTO emp VALUES(8889,'zhangsan',DEFAULT,7788,to_date('2018-07-11','yyyy-mm-dd'),4000,500,40);
注意:当插入数据时,表没有指定列名,如果列想要插入null或是默认值,值不可以不写,要写成null或default

SELECT * FROM EMP;
desc EMP;
ALTER TABLE emp MODIFY(JOB DEFAULT 'clerk');

---写列名,对于没有指定的列,如果有默认值直接赋默认值,如果没有默认值,给null
INSERT INTO emp(empno,ename,sal) VALUES(6666,'JACK',1000);

select * from emp;

INSERT INTO emp(ename,JOB,sal,comm,deptno) VALUES('lily','salesman',2000,200,10);  ---出错

---使用子查询插入数据
---往emp表中给SALES部门新增一名员工
INSERT INTO emp(empno,ename,JOB,sal,deptno)
VALUES(9999,'wangwu','salesman',2000,(SELECT deptno FROM dept WHERE upper(dname)='SALES'));

3、修改表数据
UPDATE 表名 SET 列名=新值,列名=新值,... [WHERE 条件];

--修改emp表中职务为CLERK的员工的薪水,都增加20%;
UPDATE emp SET sal=sal*1.2 WHERE upper(job)='CLERK';

SELECT * FROM emp;

UPDATE emp set ename='aaa',job='test',mgr=7788,sal=sal*1.3,comm=500 WHERE empno=10;

SELECT * FROM EMP WHERE EMPNO=10;

---全表修改
UPDATE emp SET sal=sal*0.8,comm=100;

---使用子查询
UPDATE EMP SET sal=sal+500,comm=200 WHERE deptno=(SELECT deptno FROM dept WHERE UPPER(dname)='SALES');

4、删除表数据
(01)DELETE [FROM] 表名 [WHERE 条件];

DELETE FROM emp WHERE deptno=10;

DELETE emp WHERE deptno=20;

DELETE * FROM emp;  ---错误的

DELETE emp;

select * from emp;

INSERT INTO emp SELECT * FROM emp_bak;

(02)截断表:删除全表数据
TRUNCATE TABLE 表名;

truncate table emp;

DELETE 和TRUNCATE的区别:
   DELETE 可以删除部分数据,truncate只能删除全表数据
   DELETE 删除的数据可以回滚,truncate不允许回滚
   DELETE删除的速度比truncate慢,因为delete要写日志

5、事务:TPL

DQL:数据查询语言   SELECT
DML:数据操作语言   INSERT DELETE UPDATE
DDL:数据定义语言   CREATE ALTER DROP
DCL:数据控制语言   GRANT REVOKE
TPL:事务语言      COMMIT,ROLLBACK,SAVEPOINT

1、commit:提交
2、ROLLBACK; 回滚
3、SAVEPOINT 保存点名;   设置事务保存点
4、rollback TO 事务保存点;   --回滚至事务保存点

select * from emp;


INSERT INTO emp VALUES(8888,'zhangsan','java dev',7788,to_date('2018-07-11','yyyy-mm-dd'),4000,500,40);

INSERT INTO emp VALUES(8889,'zhangsan',DEFAULT,7788,to_date('2018-07-11','yyyy-mm-dd'),4000,500,40);
savepoint aa;
INSERT INTO emp(empno,ename,sal) VALUES(6666,'JACK',1000);

insert into emp select * from emp_bak;

ROLLBACK TO aa;

rollback;

INSERT INTO emp VALUES(8888,'zhangsan','java dev',7788,to_date('2018-07-11','yyyy-mm-dd'),4000,500,40);

INSERT INTO emp VALUES(8889,'zhangsan',DEFAULT,7788,to_date('2018-07-11','yyyy-mm-dd'),4000,500,40);
commit;
INSERT INTO emp(empno,ename,sal) VALUES(6666,'JACK',1000);

INSERT INTO emp SELECT * FROM emp_bak;

CREATE TABLE dept_bak AS SELECT * FROM dept;

select * from emp;

ROLLBACK;

二、新增表:
1、查询表结构:  sqlplus命令
DESC 表名;

2、创建表:
CREATE TABLE 表名(
  列名 数据类型 [DEFAULT 默认值 约束],
  列名 数据类型 [DEFAULT 默认值 约束],
  ...
  列名 数据类型 [DEFAULT 默认值 约束]
);

3、数据类型:
数值型:  NUMBER
字符串类型: VARCHAR2
日期型 :   DATE
大对象类型:  clob,blob

踩过的雷:char(n)固定长度的字符串

                  varchar2(n)可变长度的字符串,用户指定最大长度n

                  建议永远使用varchar2

(01)数值 NUMBER(p,s)  p有效位数,s精度
s=0:NUMBER(p)
s>0:小数点右边的位数为s,小数点左边的有效位数为p-s位
s<0:小数点左边的有效位数为:p+|s|位

CREATE TABLE A(
  id1 NUMBER(5),
  id2 NUMBER(5,2),
  id3 NUMBER(5,-2)
);

select * from a;
INSERT INTO A(id1) VALUES(455.55);
INSERT INTO A(id1) VALUES(45555.55);
INSERT INTO A(id1) VALUES(455555); ---插入失败

INSERT INTO A(id2) VALUES(455.55);
INSERT INTO A(id2) VALUES(455.55555);
INSERT INTO A(id2) VALUES(455);

INSERT INTO A(id3) VALUES(455.55);
INSERT INTO A(id3) VALUES(45555);
INSERT INTO A(id3) VALUES(4555555);
INSERT INTO A(id3) VALUES(45555555);---插入失败

(02)字符串类型
CHAR(n):固长字符串,无论字符串的长度是否为N,结果都为n,
不足的补空格

(此种类型的属性列,当为判断条件时,会报错,因为带上空格作为条件,尽量不要用)

VARCHAR2(n):变长字符串,字符串有几位占用几位

drop table a;

CREATE TABLE A(
  name1 CHAR(10) references emp(ename),
  name2 VARCHAR2(10)
);

INSERT INTO A VALUES('aaa','aaa');
INSERT INTO A VALUES('aaabbbccca','aaa');
SELECT name1,LENGTH(name1),name2,LENGTH(name2)
FROM A;

(03)日期型:
默认日期:日-月-年
DROP TABLE A;

CREATE TABLE A(
  birthday DATE
);

INSERT INTO A VALUES('10-10月-2018');
insert into a values(to_date('20181010','yyyymmdd'));

SELECT * FROM A;

(04)对象(4G以内):
CLOB:文件对象
blob:二进制对象

drop table a;

CREATE TABLE A(
  obj CLOB,
  obj2 BLOB
);

insert into a values('fdcvgsjkmadqwjkrwerghejwklfdsnmkasdfbwekrqwetrwerqwere','000000000111111000011111');

select * from a;

三. 修改表
1.添加列
ALTER TABLE 表名 ADD(列名 数据类型 [DEFAULT 默认值 约束],列名 数据类型 [DEFAULT 默认值 约束]...);
2.修改列的属性:修改数据类型,长度,默认值,约束
alter table 表名 modify(列名 数据类型 [DEFAULT 默认值 约束]...);
3.修改列名
alter table 表名 rename column 旧的列名 to 新的列名;
4.删除列
alter table 表名 drop column 列名;
5.修改表名
rename 旧的表名 to 新的表名;

四.删除表
drop table 表名 [cascade constraints];

CASCADE CONSTRAINTS:---当主键记录被外键引用时,可以添加此选项删除表的同时删除相关约束.

    有某个学生运动会比赛信息的数据库,保存了如下的表:
    运动员sporter表:(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系department)
    项目item表(项目编号itemid,项目itemname,loc地区)
    成绩grade表(运动员编号sporterid,项目编号itemid,积分mark)
   
1.求出总积分最高的系名及总积分
SELECT department,sum(mark)
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
GROUP BY department
HAVING sum(mark)=(SELECT max(sum(mark))
                  FROM sporter s,grade g
                  WHERE s.sporterid=g.sporterid
                  GROUP BY department);

2.查询在一操场进行比赛的项目名称及其冠军的姓名
SELECT itemname,NAME
FROM sporter s,item i,grade g
WHERE s.sporterid=g.sporterid and i.itemid=g.itemid and loc='一操场' and mark=6;
 
3.找出参加了王玥所参加过的项目的其他同学的姓名
SELECT NAME
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
      AND itemid IN(SELECT itemid
                    FROM sporter s,grade g
                    where s.sporterid=g.sporterid and name='王玥') and name!='王玥';

4.经查,王玥因为使用了违禁药品,其成绩都记为0分,请在数据库中做出相应修改
update grade set mark=0 where sporterid=(select sporterid from sporter where name='王玥');

5.经组委会协商,需要删除女子跳高比赛项目

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle.数据的增删改、事务、创建表、修改表、删除表 的相关文章

  • Oracle SQL 函数中可以有 commit 语句吗

    在 SQL 函数中使用 COMMIT 语句是否可能 有意义 从技术上来说 答案是肯定的 你can请执行下列操作 create or replace function committest return number as begin upd
  • Oracle Text:如何清理用户输入

    如果有人有使用 Oracle 文本的经验 CTXSYS CONTEXT 我想知道当用户想要搜索可能包含撇号的名称时如何处理用户输入 在某些情况下 转义 似乎有效 但对于单词末尾的 s 则不起作用 s 在停用词列表中 因此似乎已被删除 目前
  • 如何使用 ADO 连接字符串以 SYS 身份连接到 Oracle 数据库?

    我正在尝试这个 Provider MSDASQL 1 Persist Security Info False User ID sys Password pwd Initial Catalog DATABASE Data Source Odb
  • 我在 MacBook M1 max 中的 nodejs 连接到数据库 oracle 时遇到问题帮助我

    Node js 中的错误消息 nodemon 启动node server js错误 错误 DPI 1047 无法找到 64 位 Oracle 客户端库 dlopen Users pitidev ldb Downloads instantcl
  • Oracle OLE DB 提供程序未在 SSIS 中列出

    我在 SSIS 和 VS2015 CM 方面遇到问题 我有一个包需要连接 Oracle 来获取一些数据 我安装了适用于 Win64 的 ODAC 和 Oracle 客户端 但看不到提供程序列表中列出的 OLE DB 的 Oracle 提供程
  • 如何使用非标准的一周第一天在 Oracle 中计算一年中的第几周?

    我有一个查询需要返回日期字段的 一年中的第几周 但查询的客户使用非标准的一周第一天 所以TO CHAR with IW 没有返回预期的结果 在这种情况下 一周的第一天是周六 周五是一周的第七天 对于 T SQL 我会使用DATEPART a
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • 如何为“%abc%”搜索创建文本索引?

    我想对查询进行索引x like abc 如果我有一个如下表 create table t data varchar 100 我想创建一个索引以便能够有效地执行以下操作 select from t where contains abc 和这个
  • ODP.Net - OracleDataReader.读取速度非常慢

    我在 ODP Net 中的 OracleDataReader 方面遇到很多麻烦 基本上 我有一个参数化查询 需要 1 5 秒的时间来运行 返回大约 450 条记录 然后需要 60 90 秒的时间来循环 甚至没有代码在循环中运行 实际上是迭代
  • 在 Oracle 中使用数据透视表的建议

    我需要一份报告 我应该使用数据透视表 报告将按类别分组 使用 case when 语句不好 因为有很多类别 您可以将 Northwind 数据库视为示例 所有类别将显示为列和报告将显示客户在类别中的偏好 我不知道另一个解决方案 并在互联网上
  • 仅使用 SQL 进行 Base 36 到 Base 10 的转换

    出现了一种情况 我需要在 SQL 语句的上下文中执行以 36 为基数到以 10 为基数的转换 Oracle 9 或 Oracle 10 中似乎没有内置任何内容来解决此类问题 我的 Google Fu 和 AskTom 建议创建一个 pl s
  • 使用 Oracle Wallet 身份验证从 Spring-jdbc 连接到 Oracle DB

    我将 Spring jdbc 与 org apache commons dbcp BasicDataSource 结合使用 使用用户名和密码进行连接 我想使用BasicDataSource 因为我只有一个连接 我有这个代码
  • 从 Oracle 获取包方法和参数

    我正在寻找 Oracle 查询来获取 Oracle 包 过程的所有参数 我知道有一个视图或表可以提供此功能 但我似乎不记得它是什么 注意 我并不是要从 user objects 获取包列表 而是要获取包 中每个过程的数据类型和参数名称 Th
  • Oracle 时间戳数据类型

    不带参数的时间戳数据类型和带参数 0 的时间戳数据类型有什么不同 timestamp VS timestamp 0 括号中的数字指定要存储的小数秒的精度 所以 0 意味着不存储任何一小部分秒 而仅使用整秒 如果未指定 则默认值为小数点分隔符
  • Oracle 奇怪的 SUM 行为

    我有两个查询 据我了解 这两个查询应该提供相同的结果 但事实并非如此 显然我在这里遗漏了一些重要的观点 我希望你能帮助我 查询 我认为这是错误的 SELECT SUM a amount AS A SUM 10 727 470 FROM bi
  • 将整数值从数据库列转换为Oracle中的文本

    我对数据库有一个要求 1 表ABC 列 check amount number number 18 4 这基本上包含例如支票金额 3000 50 支付给雇员 现在签发了一张支票 该支票包含数字和文本形式的 check amount 例如 支
  • 浏览多个字段的值并将它们插入到同一列中

    我正在尝试使用重复行为我的 oracle apex 应用程序创建一个功能 假设我有一个车辆表 CREATE TABLE vehicles brand VARCHAR2 50 model VARCHAR2 50 comment VARCHAR
  • oracle嵌套表的最大行数是多少

    CREATE TYPE nums list AS TABLE OF NUMBER Oracle 嵌套表中最大可能的行数是多少 UPDATE CREATE TYPE nums list AS TABLE OF NUMBER CREATE OR
  • 如何在 Pro*C 查询中指定变量表达式列表?

    我尝试优化的 Pro C 查询出现问题 解释一下 我们的应用程序在一个巨大的数据库中搜索行 这些行存在于多种语言中 旧代码为数组中的每种语言选择一行 现在 由于这些查询是我们应用程序中最耗时的部分 因此我只想进行一个直接写入数组的查询 语言
  • DBMS_SCHEDULER.DROP_JOB 仅当存在时

    我有一个 sql 脚本 在导入转储后必须运行该脚本 该脚本除了执行其他操作外 还执行以下操作 BEGIN remove program SYS DBMS SCHEDULER DROP PROGRAM program name gt STAT

随机推荐

  • 解决Vue引用Swiper4插件无法重写分页器样式问题

    最近在尝试用nuxtjs来搭建新的站点 但是平时在jquery里面用惯的一些插件一到vue上面引用就各种不顺畅 本文记录一下在用Swiper插件来做轮播图的时候遇到的问题 至于怎么在vue里面引用插件就不累赘了 npm能告诉你 Swiper
  • 一个小时内学习 SQLite 数据库

    SQLite 是一个开源的嵌入式关系数据库 实现自包容 零配置 支持事务的SQL数据库引擎 其特点是高度便携 使用方便 结构紧凑 高效 可靠 与其他数据库管理系统不同 SQLite 的安装和运行非常简单 在大多数情况下 只要确保SQLite
  • 好用的插件介绍-Clear Cache Chrome插件

    clear cache插件是一款用于清理谷歌浏览器的chrome清理缓存插件 该插件支持清理应用程序缓存 缓存 Cookie 下载 文件系统 表单数据 历史 索引数据库 本地存储 插件数据 密码和WebSQL 你只需要在安装了这款插件后在设
  • VSCode中Python代码自动提示

    自己写的模块 VSCode中无法自动提示 可以按下面步骤试试 1 添加模块路径 文件 设置 首选项 搜索autoComplete 点击 在settings json中编辑 添加模块路径 python autoComplete extraPa
  • nrm安装与配置

    1 nrm安装与配置 npm 介绍 nrm npm registry manager 是npm的镜像源管理工具 有时候国外资源太慢 使用这个就可以快速地在 npm 源间切换 参考文章 西北码农 安装 在命令行执行命令 npm install
  • html 邮件乱码怎么办,如何解决html邮件乱码问题

    html邮件乱码的解决办法 1 在mail函数前一行打印message内容 2 将邮件内容保存为html文件后查看 3 设置UTF 8编码 本文操作环境 windows7系统 HTML5版 Dell G3电脑 如何解决html邮件乱码问题
  • Jenkins 持续集成:Linux 系统 两台机器互相免密登录

    背景知识 我们把public key放在远程系统合适的位置 然后从本地开始进行ssh连接 此时 远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地 本地会用private key进行解密并把这个随机数发回给远
  • day21

    530 二叉搜索树的最小绝对差 先转换为有序list 再比较差值 501 二叉搜索树中的众数 先转换为有序list 再进行众数统计寻找 236 二叉树的最近公共祖先 后序遍历 再根据返回的值寻找祖先 package algor traini
  • 3d打印,机器人,计算机,3D打印的机器人将教孩子计算机编码!

    原标题 3D打印的机器人将教孩子计算机编码 随着我们的世界变得日益数字化的 越来越多的编码和计算机编程工作如雨后春笋般冒出 需要越来越多的人在编码语言 成为精通 这种先进的计算机知识将更加为下一代更重要 因为2024年 超过100万以上的编
  • Linux 三分钟学会虚拟机与外网和主机互通

    首先准备好一台安装好的虚拟机 字符界面也一样 配置虚拟网卡 添加一张虚拟网卡用来连接主机和虚拟机 通过图中步骤设置好 最后和最后那张图显示一样 确定 右击需要配置网络的虚拟机 单击添加 选中网络适配器 然后单击确定 点击自定义 然后选择刚刚
  • C++ 多态虚函数表(VS2013)

    对于含有虚函数的类 基类或者自身 自身非纯虚函数 的对象 都拥有一个指向虚函数表的指针 占一个指针大小的内存 在类成员变量之前 相当于第一个成员变量 多重继承的时候 几个基类就几个指针 就几个虚函数表 每个类的虚函数表确定了各个方法指向那个
  • Hadoop3.0.3 HDFS 常用shell 命令

    1 启动Hadoop start all sh root elk server sbin start all sh Starting namenodes on elk server 上一次登录 日 11月 24 21 57 43 CST 2
  • 【linux多线程(四)】——线程池的详细解析(含代码)

    目录 什么是线程池 线程池的应用场景 线程池的实现 线程池的代码 C linux线程 壹 初识线程 区分线程和进程 线程创建的基本操作 线程 二 互斥量的详细解析 线程 三 条件变量的详细解析 什么是线程池 线程池是一种线程使用模式 它是将
  • GDB 和 windbg 命令对照(转载)

    From http blog csdn net joeleechj article details 10020501 命令 windbg gdb 附加 attach attach 脱离附加 detach detach 运
  • CSS总结div中的内容垂直居中的六种方法

    一 行高 line height 法如果要垂直居中的只有一行或几个文字 那它的制作最为简单 只要让文字的行高和容器的高度相同即可 比如 p height 30px line height 30px width 100px overflow
  • VMware vSphere中三种磁盘规格(厚置备延迟置零\厚置备置零\Thin Provision

    在VMware vSphere中 不管是以前的5 1版本 或者是现在的6 5版本 创建虚拟机时 在创建磁盘时 都会让选择磁盘的置备类型 如下图所示 分为 1 厚置备延迟置零 2 厚置备置零 3 Thin Provision 精简置备 在创建
  • unity 基本寻径

    一 实现效果 敌人追逐玩家 自动躲避障碍物 二 游戏框架 Plane 平面 是玩家和敌人可以行走的区域 Player 玩家 可以在平面上移动 绕开障碍物 Enemy 敌人 可以追逐玩家 绕开障碍物 障碍物 五个正方体 玩家在移动的过程中和敌
  • java中,在一个类中调用另一个类的属性和方法

    在java当中 在一个类中调用另一个类的情况有多种 可能是调用不同包中的类 也可能是同包不同类 如果调用不同包中的类 需要先导入该包 然后才能调用 这里主要分享一个调用同包中的不同类的属性和方法的操作 比如这里有一个Card类和一个Card
  • ubuntu apt update 报错Err:6 https://download.docker.com/linux/ubuntu jammy InRelease

    目录 尝试清除已存在的软件源信息并重新添加 重新配置ubunut镜像源 我这边用的是阿里云的源 阿里源配置 Ubuntu换阿里云源后更新提示 GPG error缺少公钥解决方法 尝试清除已存在的软件源信息并重新添加 Clear your p
  • oracle.数据的增删改、事务、创建表、修改表、删除表

    一 数据的增删改 1 备份表 01 全表备份 CREATE TABLE 新表名 AS 子查询 将emp表全表备份 CREATE TABLE emp bak AS SELECT FROM emp SELECT FROM emp bak 02