oracle的表操作
表操作案例:
原始表
学生表:
create table students(
studentId number,
name varchar2(64),
sex nvarchar2(1),
birthday date,
fellowship number(10,2),
resume clob
);
班级表:
create table class_(
id number,
name varchar2(32)
);
表管理
//添加一个新的字段
alter table 表名 add (新的列名 列名的数据类型);
//修改字段的类型
alter table 表名
modify (columnname dataType);
//删除一个字段
alter table 表名
drop column(column)
//给表修改名字
rename 旧表的名字 to 新的名字
实际操作
1.给学生表添加班级编号
alter table students add (classId number);
2.把学生姓名 变成 varchar2(30)
alter table students modify(name varchar2(30));
3.删除学生表的 fellowship 字段
alter table students drop column fellowship;
4.把学生表名student 改成stu
rename student to stu;
5.删除stu
drop table stu
表管理(crud)
insert语句
语法:
INSERT INTO table [(column[, column…])] VALUES (value[ , value…]);
限制:
(1)插入的数据应与字段的数据类型相同。
(2)数据的大小应在规定的范围内,例如:不能将一个长度为
80的字符串加入到长度为40的列中。
(3) 在values中列出的数据位置必须与被加入的列排列位置相对应。
(4) 字符类型与日期类型包含在单引号中。
(5)插入空值,不指定或insert into value(null);
拓展:
如何一次添加多条数据?
在sql server 中 可以通过 insert into table
select 字段值列表 union
select 字段值列表 union
select 字段值列表
但数据库之间存在差异:
oracle:
方法1:
insert into 表名
select 字段值列表 from dual
union
select 字段值列表 from dual
方法2:
insert all into 表名
values(字段值列表) into 表名
values(字段值列表) into 表名
select 1 from dual
update语句
语法:
UPDATE table SET column_name = expression[ , column_name = expression …]
[WHERE where_definition]
拓展:
oracle怎么判断字段为空?
字段值 = null; --条件没成立
字段值 is null; --成功
delete语句
语法:
DELETE FROM table [WHERE where_definition]
删除的几种方法比较:
delete from 表名:
删除所有记录,表结构还在,写日志,可以恢复,数据慢
drop table 表名:
删除表的结构和数据
truncate table 表名:
删除表中的所有记录,表结构还在,不写日志,无法找到删
除的记录,速度快
--------------------------------------
实现原理:在删除数据前,保存节点(savepoint xx),在删除之后,可以通过
回滚(rollback xx)之前节点恢复数据
select语句
语法:
SELECT [distinct] * | {column1,column2,column3…}
FROM table [WHERE where_definition]
---------------------------------
distinct:过滤掉重复的数据
where子句:
如何比较日期?
查询入职日期在1980-1-1之后的员工
select * from emp where hiredate > ‘’1980-1-1”; --失败
证明:日期类型不能与字符串类型比较
解决:
select * from emp where to_char( hiredate,’yyyy-mm-dd’) > ‘’1980-1-1”;
在数值之间比较的两种方法:
方法1:select * from emp where sal > 1000 and sal < 2000;
方法2: select * from emp where between 1000 and 2000;
like运算符:
%:表示任意0到多个字符
_ : 表示任意单个字符
案例:
1.查询首字符为S的员工姓名和工资
select ename,sal from emp where ename like ‘S%’;
2.查询第三个字符为大写的O的所有员工的姓名和工资
select ename,sal from emp shere ename like ‘__O%’;
in 的使用:
查询员工号是7499,7521,7832的员工?
(1) select * from emp where empNo = 7499 or empNo = 7521 or empNo =7832;
(2) select * from emp where empNo in (7499,7521,7832);
拓展:
sal:工资 comm:奖金
1. 查询雇员的年工资:
select sal * 13 +nvl(comm,0)*13 from emp;
-----------------------------------------
说明:当奖金为NULL时,它与任意数运输最终都会是NULL,
这样不仅没有求到工资和,而且还没有了基本工资。
解决:nvl,oracle提供的函数,当comm为空时,用0代替,如果
不是的,原数还原
2. ||的使用
需求:将多列拼接起来作为一列处理
例子:
select ename || '是一个' || job from emp;
截图: