7天玩转oracle笔记2-表的管理

7.oracle表的管理

1.表和列的命名规范

  • 必须字母开头
  • 长度小于30字符
  • 不能用oracle保留字
  • 只能使用如下字符A_Z,a_z,0-9,$,#等

2.oracle支持的数据类型

  • 字符型
char --定长,最大2000字符,查询效率高,浪费空间。
-例:char(10)  “小韩”,前四个字符放“小韩”,后添6个空格补全。
varchar2(20) --变长,最大4000字符,节省空间,效率低。
-例:varchar2(10) “小韩”,oracle分配4个字符,这样节省空间。
clob  --(character large object) 字符型大对象,最大4G。
  • 数字型
number  --可以表示整数,也可表示小数;范围 10的-38次方~10的38次方
例:number(5,2)  --表示一个小数,总共有5个位数,2位小数,范围-999.99~999.99。
例:number(5)  --表示一个5位整数,范围-99999~99999。
  • 日期类型
date  --年月日时分秒
timestamp   --精确到毫秒级
  • 图片
BLOB (binary large object)   --二进制大对象,可以存放图片、声音、视频。

3.创建表
--用命令行,或pl/sql developer工具创建表

例:
SQL>create table student (  --表名:学生表
xh number(4),  --学号
xm varchar2(20),  --姓名
sex char(2),  --性别
birthday date,  --生日
sal number(7,2)  --奖学金
);
SQL>create table class (
classid number(2),
cname varchar2(20)
);

4.查询表

select * from user_tables;  --查询当前用户所有表名;
select * from all_tables where owner='SYS';  --查询某用户的所有表名;

5.修改表

例:
-添加字段
alter table  student add (classid number(2)) ;
-删除字段
alter table student drop column sal;
-修改字段类型(不能有数据)
alter table student modify (xm char(30))
-修改字段长度
alter table student modify (xm varchar2(30))
-修改字段名字(不能有数据)
alter table student rename colunm xm to name; --xm改名为name
-修改表名
rename student to stu;
-删除表
drop table student;

6.添加数据

  • 添加所有字段数据
insert into student values(
'A001',
'张三',
'男',
'01-05月-05',  --oracle默认日期格式'DD-MON-YY'。
10
);

oracle默认日期格式‘DD-NON-YY’,如:'09-6月-99',表示1999年6月9日。

修改默认日期格式(临时生效):
alter session set nls_date_format='yyyy-mm-dd';  
修改后,可以用新格式添加日期:
insert into student values (
'A002',
'MIKE',
'男',
'1905-05-06',  --新日期格式'yyyy-mm-dd'。
10
);
  • 添加部分字段数据
insert into student (xh,xm,sex) values('A003','ROSE','女');
  • 插入空值
insert into student(xh,xm,sex,birthday) values('A004','JOHN','男',null);

7.修改数据

改一个字段
update student set sex='女' where xh='A001';
修改多个字段
update student set sex='男',birthday='1980-04-01' where xh='A001';
修改含有null值的数据
update student set birthday='1980-05-01' where birthday is null;  --不能用=null。

8.删除数据

delete from student  where xh='A001';  --删除一条记录。
delete from student;  --只删数据,不删表结构,写日志,可恢复,速度慢。
truncate table student;  --只删数据,不删表结构,不写日志,无法恢复,速度快。
drop table student;  --删除表结构和数据,不可恢复。

9.查询数据

  • 简单查询
查看表结构
desc dept;
显示查询耗时
set timing on;
查询所有列
select * from dept;
查询指定列
select ename,sal,job,deptno from emp;
如何取消重复行
select distinct deptno,job from emp;
使用算术表达式
select sal*12,ename from emp;
使用列别名
select sal*12 as '年工资',ename ‘姓名’ from emp;
null值处理
select sal*12+nvl(comm,0)*12,ename from emp;  --nvl(column,0)空值转换为0函数。
连接字符串||
select ename || 'is a ' || job from emp;

where子句
select ename,sal from emp where sal>3000;  --显示工资高于3000的员工。
select ename from emp where hiredate>'1-1月-1982';  --查找1982.1.1后入职的员工,注意使用oracle默认日期格式才行。
select ename,sal from emp where sal>=2000 and sal<=2500;  --显示工资大于2000,小于2500的员工。
like操作符
%--0到多个任意字符; _--任意单个字符;
select ename,sal from emp where ename like 'S%';  --显示首字符为S的员工姓名和工资。
select ename,sal from epm where ename like '__O%';  --显示第3个字符为大写O的所有员工姓名和工资。  
in操作符
select * from emp where empno in (788,322,889);  --显示员工编号为788,322,889,...的雇员情况。
is null操作符
select * from emp where mgr is null;  --显示没有上级的雇员情况。
逻辑操作符and/or
排序子句order by
select * from emp order by deptno asc,empno desc;  --按照部门编号升序,员工工资降序排列。
使用别名排序
select ename,(sal+nvl(comm,0))*12 as '年薪' from emp order by '年薪';  --按年薪排序员工情况。
  • 复杂查询
数据统计 --max,min,avg,sum,count
数据分组 --group by 和having子句
多表查询
多表查询的条件如果小于表的个数减1,肯定会出现笛卡尔集,如果大于,也有可能出现笛卡尔集。
 -自连接查询
例:。。。
 -子查询  --嵌入在其他sql语句中的select语句,也叫嵌套查询。
   -单行子查询:子查询语句只返回一列一行结果的。
例:select ename,deptno from emp  where deptno=(select deptno from emp where ename='SMITH');--显示与SMITH同一部门的所有员工。
   -多行子查询:子查询语句返回一列多行结果的。
例:select * from emp where job in (select distinct job from emp where deptno=10);  --查询与10号部门的工作相同的员工信息。
   -all操作符
例:select * from emp where sal> all (select sal from emp where deptno=30);  --查询比30号部门所有人工资都高的员工信息。
或 select * from emp where sal>(select max(sal) from emp where deptno=30);  --此方法效率较高。
   -any操作符
例:select * from emp where sal > any (select sal from emp where deptno=30);  --查询比30号部门任意一个人工资高的员工信息。
或 select * from emp where sal > (select min(sal) from emp where deptno=30);   --此方法效率较高。
   -多列子查询:子查询语句返回多列结果的。
例:select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');  --查询与SMITH 部门和岗位完全相同的所有员工信息。
   -from子句中使用子查询:将子查询结果作为一个表,又叫内嵌视图。
例:select a1.ename,a1.sal,a1.deptno,a2.avg_sal from emp a1,(select deptno,avg(sal) avg_sal from emp group by deptno) a2 where a1.sal>a2.avg_sal and a1.deptno=a2.deptno;  --显示高于自己部门平均工资的员工信息。
   -分页查询:3中方式。
   1.ROWID分页(效率第一)
   2.ROWNUM分页(效率第二):公式--三层嵌套,第二层rownum要用别名RN,任何修改只需修改最里层查询即可。
例: select * from (select a1.*,rownum rn from (select * from emp order by empno) a1 where rownum<10) where rn>5;  --按雇员ID号升序取出
   3.分析函数分页(效率最差)
   -合并查询union、union all、intersect、minus
union:并集去重复or
union all:并集不去重复or
intersect:交集and
minus:差集
  • 创建数据库
  • dbca工具创建
  • 手工创建
  • to_date函数
    例:to_date('1988-1-1','yyyy-mm-dd')

10.子查询操作数据

  • 用子查询创建表(快捷建表)
例:create table mytable (id,name,sal) as select empno,ename,sal from emp;  --指定列建表。
或 create table mytable2 as select * from emp;  --整表复制
  • 使用子查询插入数据 --适合大量迁移数据
    例:create table kkk (myid number(4),myname varchar2(50),mydept(5)); --创建一个空数据库。
    insert into kkk select empno,ename,deptno from emp where deptno=10; --插入10号部门的员工信息到KKK表。
  • 使用子查询更新数据
    例:update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH) where ename='SCOTT'; --更新SCOTT的岗位,工资,奖金信息与SMITH一样。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容