Oracle-day5:新增、复制建表、表结构、表数据、删除

目录

一、insert新增数据

二、复制建表

三、表结构修改

四、查看表结构、表数据处理

五、修改表数据

六、删除语句

八、练习题


一、insert新增数据

/*

---------- 一、DML 数据操作语言--------

-- 1、增加数据 insert

语法:insert into 表名 (列1,列2,...) values (值1,值2,...);

-- 要求:

-- a、列和值必须一一对应(位置、数据类型、约束)

-- 注意:

a、新增的数据需要提交commit才能保存到数据库中

b、撤销新增加的数据需要回滚:rollback

c、默认值:default表示

*/

sql 复制代码
-- 1、往 student1表中添加数据
insert into student1(sno,sname,ssex,sage,bir,clsno)values('001','李四','男',19,date'2023-8-19','2');
-- 1.1 对于时间的输入,也可以用:to_date('日期字符串','日期格式yyyy-mm-dd')的方式如录入

-- 2、往全部列中添加数据,可以省略列名不写
insert into student1 values('002','王五','男',19,date'2023-8-19','2');

-- 3、可以将表到处 导成标准的 insert into 语句 文档
-- 工具 --> 导出表 窗口 --> 选择 sql插入 指定文件名 --> 导出

二、复制建表

------- 二、复制建表 -------

create table 表名 as select 查询语句 where 条件;

复制建表:只复制表结构,不会复制数据

不会复制主键约束、检查约束、默认值约束、唯一约束、外键约束

会复制非空约束

sql 复制代码
-- 1、复制student1的表
create table student2 as select * from student1 where 1 = 2;

where用来控制是复制结构或者把表数据都给复制过去

三、表结构修改

---------三、表结构修改-----------

---1、菜单操作

--左边对象浏览器栏 点击tables 找到对应的表 -->右键 编辑 -->表结构 窗口--> 列 选型 --> 增加列、修改列、删除列

---2、sql语句操作

-- 语法:alter table 表名

sql 复制代码
-- 1、增加列 add
-- 语法:alter table 表名 add(列1 数据类型,列2 数据类型);
alter table student001 add(a number,b varchar(20));


-- 2、修改列 modify
-- 语法:alter table 表名 modify(列1 数据类型,列2 数据类型...)
-- 注意:其他数据类型可以修改为字符串,但是字符串不能修改为其他数据类型
alter table student001 modify(a varchar(20));

-- 3、删除列 drop 会删除
-- 语法:alter table 表名 drop(列名1,列名2)
alter table student001 drop(a,b)
select * from student001;
-- 4、重命名列 rename column                                                                                                                                                        
-- 语法:alter table 表名 rename column 旧列名 to 新列名
-- 把sno改为stuId
alter table student001 rename column sno to stuid;

四、查看表结构、表数据处理

---------五、查看表结构、表数据处理

--查看表结构

--左边对象浏览器栏 点击tables 找到对应的表 -->右键 查看或编辑 -->表结构 -->列选项

--在命令窗口 sql提示符输入 desc 表名; 回车执行

sql 复制代码
--1、清空表数据 truncate table 表名;
truncate table student001;

--2、批量复制数据
--insert into 表名 select 查询语句;
insert into student_b select * from student_a;
commit;

-- 3、对表重命名
-- rename 旧表名 to 新表名
rename student001 to student01;

五、修改表数据

---------- 六、修改数据----------

update语法:update 表名 set 列1 = 值2 where 条件

注:如果不使用where,那么会修改整个表的数据

sql 复制代码
select * from student01;
-- 修改用户的年龄是:系统时间 - sbirthday的时间
alter table student01 add (age number) ; -- 新增一个年龄列
select sysdate,to_char(sysdate,'yyyy') y from dual;

-- 1、更新用户的年龄:系统时间-出生
update student01 s set age=to_char(sysdate,'yyyy')-to_char(sbirthday,'yyyy') where sname = 'wang';
update student01 s set age=to_char(sysdate,'yyyy')-to_char(sbirthday,'yyyy');
commit;

六、删除语句

--------------删除语句-----------

truncate -- DDL 语句,删除表中的数据,效率高

delete -- 删除表中的数据,逐行删除,DML语句

delete的语法:

-- delete from 表名 where 条件;

-- from可以省略,不要where条件会删除整个表的数据

sql 复制代码
select * from student01;

-- 1、删除掉stuid为001的数据
delete student01 where stuid = 001;
rollback; -- 回滚

-- 2、delete不带where条件会清空整表数据
delete student01;
rollback; -- 回滚

八、练习题

sql 复制代码
 --练习题:
 --1、新建一个表emp2 要求emp2的结构和emp一样,同时要把emp的数据复制过去
create table emp2 as select * from emp;
select * from emp;
select * from emp2;
 
 
 --2、在emp2表中增加一行数据
insert into emp2 values(8000,'zs','CLERK',7782,date'2023-08-29',1500,0,10);
select * from emp2;
 
 
 --3、在emp2表中增加列bz和bz1,数据类型为字符串
alter table emp2 add(bz varchar(20),bz1 varchar2(30));
select * from emp2; 
 
 
 --4、将emp中的所有记录工资sal+1000,comm+1000插入到emp2中
-- 4.1 先查询出emp表中的工资
select sal+1000,comm+1000 from emp;
select * from emp;
select * from emp2;
-- 合并子查询
update emp2 set sal = (
       select sal+1000 from emp where empno = emp2.empno
),comm = (
       select nvl(comm,0)+1000 from emp where empno = emp2.empno
)
;
select * from emp2; 
rollback;



 
 --5、将emp2中empno为7654的comm奖金修改为2000
update emp2 
set comm = 2000 
where empno = 7654;


select * from emp2; 
 
 
 
 --6、将emp2中员工姓名ename中包含ALL的奖金修改为1600
update emp2 
set comm = 1600 
where
ename like '%ALL%'; 
 
-- 验证
select * from emp2 
where ename like '%ALL%'; 
 
 
 
--7、在emp2表中增加一个列age,将截止到当前时间的每一个员工工作的年限更新到age列
alter table emp2 
add(age number)
; -- 新增age

select * from emp2; 

update emp2 
set age = to_char(sysdate,'yyyy') - to_char(hiredate,'yyyy')
; -- 更新



select e.*,rownum from emp2 e;
相关推荐
m0_7482548817 分钟前
Spring Boot实现多数据源连接和切换
spring boot·后端·oracle
程序员shen16161124 分钟前
注意⚠️:矩阵系统源码开发/SaaS矩阵系统开源/抖音矩阵开发优势和方向
java·大数据·数据库·python·php
IvorySQL30 分钟前
2024 开放原子开发者大会活动回顾|瀚高 IvorySQL 开源数据库在国产软件的开源实践
数据库·postgresql·开源数据库·国产数据库·ivorysql
云计算DevOps-韩老师1 小时前
【网络云计算】2024第52周-每日【2024/12/26】小测-理论&实操-备份MySQL数据库并发送邮件-解析
linux·开发语言·网络·数据库·mysql·云计算·perl
2401_850410831 小时前
redis的持久化
数据库·redis·bootstrap
如雨随行20201 小时前
Mysql事务
数据库·mysql·oracle
未来并未来2 小时前
深入解析MVCC中Undo Log版本底层存储读取逻辑
java·数据库·mysql
菜还不练就废了2 小时前
Java期末复习JDBC|网课笔记+校课总结
java·开发语言·数据库
BabyFish132 小时前
Oracle复合索引规则指南
数据库·oracle·索引·复合索引
i易3 小时前
C++ 运算符重载
java·开发语言·数据库