oracle基础教程(第二天)

本文档详细介绍了Oracle数据库的基础知识,包括表的管理、数据类型、表的增删改查操作、复杂查询及多表查询等内容。通过具体实例展示了SQL语句的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、oracle表的管理

表名和列的命名规范
1.必须以字母开头
2.长度不能超过30字符
3.不能使用oracle的保留字(关键字)
4.只能使用如下字符 A-Z,a-z,0-9,$,#等

oracle支持的数据类型
1.字符型
    char    定长  最大2000字符        比较占用空间,但是对于定长的数据很实用,查询速度极快,例如身份证号字段设置为char(18)
    例子:char(10) '小韩'    前四个字符放'小韩',后添6个空格不全
    varchar2  变长  最大4000字符
    例子:varchar2(10)  '小韩'  oracle分配四个字符,这样可以节省空间
     clob(character large object)  字符型大对象  最大4G    
2.数字型
    number  范围  -10的38次方-10的38次方
    可以表示整数,也可以表示小数
    number(5,2)
    表示一个小数有5位有效数,2位小数
    范围:-999.99~999.99
    number(5)
    表示一个五位整数
    范围:-99999~99999
3.日期类型
    date                    包括年月日和时分秒
    timestamp          这是oracle9i对date数据类型的拓展
4.图片类型
blob    二进制数据    可以存放图片/声音  最大4G

建表
--学生表
    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)
    );
修改表
添加一个字段
SQL>alter table student add (classId number(2));
修改字段的长度
SQL>alter table student modify (xm varchar2(30));
修改字段的类型/或是名字(不能有数据)
SQL>alter table student modify (xm char(30));
删除一个字段
SQL>alter table student drop column sal;
修改表的名字
SQL>rename student to stu;
删除表
SQL>drop table student;
添加数据
所有字段都插入
SQL>insert into student values ('A001','张三','男','01-5月-05',,10);
ORACLE中默认的日期格式'DD-MON-YY'  dd日子(天) mon 月份  yy 2位的年  '09-6月-99'  1999年6月9日
改日期的默认格式
SQL>alter session set nls_date_format = 'yyyy-mm-dd';
修改后,可以用我们熟悉的格式添加日期类型:
SQL>insert into student values ('A002','MIKE','男','1905-05-06',,10);
插入部分字段
SQL>insert into student (xh,xm,sex) values ('A003','JOHN','女');
插入空值
SQL>insert into student (xh,xm,sex,birthday) values ('A004','MARTIN','男',null);
改一个字段
SQL>update student set sex='女' where xh='A001';
修改多个字段
SQL>update student set sex='男',birthday='1980-04-01' where xh='A001';
删除数据
SQL>delete from student;
删除所有记录,表结构还在,写日志,可以恢复,速度慢
需要设置保存点:savepoint aa;  回滚保存点:rollback to aa;
SQL>drop table student;   删除表的结构和数据
SQL>
delete from student where xh='A001';  删除一条记录
SQL>
truncate table student;
删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快
简单的查询语句
查看表结构
SQL>desc dept;
查询所有列
SQL>select * from dept;
查询指定列
SQL>select ename,sal,job,deptno from emp;
如何取消重复行
SQL>select distinct deptno,job from emp;
使用算术表达式显示每个雇员的年工资
SQL>select sal*12+nvl(comm,0)*12     "年工资",ename,comm from emp;
使用列的别名
SQL>select ename "姓名",sal*12 "年收入" from emp;
如何处理null值
使用nvl函数来处理
如何连接字符串(||)
SQL>select ename || ' is a ' || job from emp;
使用where子句
如何显示工资高于3000的员工?
SQL>select * from emp where sal >=3000;
如何查找1982.1.1后入职的员工?
SQL>select * from emp where hiredate > '1-1月-1982';
如何显示工资在2000到2500的员工情况?
SQL>select ename,sal from emp where sal between 2000 and 2500;
如何使用like操作符
%:表示任意0到多个字符   _:表示任意单个字符
如何显示首字符为S的员工姓名和工资?
SQL>select ename,sal from emp where ename like 'S%';
如何显示第三个字符为大写O的所有员工的姓名和工资?
SQL>select ename,sal from emp where ename like '__O%';
在where条件中使用in
如何显示empno为123,345,800...的雇员情况?
SQL>select ename,empno from emp where empno in (123,345,7844);
使用is null的操作符
如何显示没有上级的雇员的情况?
SQL> select * from emp where mgr is null;
使用逻辑操作符号
查询工资高于500或是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J
SQL> select * from emp where (sal > 500 or job = 'MANAGER') and ename like 'J%';
使用order by子句
如何按照工资的从低到高的顺序显示雇员的信息?
SQL> select * from emp order by sal;
按照部门号升序而雇员的工资降序排列
SQL> select * from emp order by deptno,sal desc;
使用列的别名排序
SQL>select ename,sal*12 "年薪" from  emp order by "年薪";
oracle表复杂查询 - 单表查询
说明:在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据,现在我们给大家介绍较为复杂的select语句
数据分组函数-max,min,avg,sum,count
如何显示所有员工中最高工资和最低工资?
SQL>select max(sal),min(sal) from emp;
显示所有员工的平均工资和工资总和?
SQL> select sum(sal),avg(sal) from emp;
计算共有多少员工?
SQL> select count(*) from emp;

扩展要求:
请显示工资最高的员工的名字,工作岗位
SQL> select ename,sal from emp where sal = (select max(sal) from emp);
请显示工资高于平均工资的员工信息
SQL> select * from emp where sal > (select avg(sal) from emp);

group by和having子句
group by用于对查询的结果进行分组显示
having子句用于限制分组显示结果

如何显示每个部门的平均工资和最高工资
SQL>select avg(sal),max(sal),deptno from emp group by deptno;
显示每个部门的每种岗位的平均工资和最低工资
SQL>select avg(sal),min(sal),deptno,job from emp group by deptno,job;
显示平均工资低于2000的部门号和他的平均工资
SQL> select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;

对数据分组的总结
1.分组函数只能出现在选择列表、having、order by子句中
2.如果在select语句中同时包含有group by,having,order by,那么他们的顺序是group by,having,order by
3.在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则会出错。
如select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;     这里deptno就一定要出现在group by中。


oracle表复杂查询 - 多表查询
说明
多表查询是指基于两个和两个以上的表或是视图的查询,在实际应用中,查询单个表可能不满足你的需求,(如显示sales部门位置和其员工的姓名),这种情况下需要使用到(dept表和emp表)

显示雇员名,雇员工资及其所在部门的名字【笛卡尔积】
规定:多表查询的条件是 至少不能少于表的个数-1
SQL>select t1.ename,t1.sal,t2.dname,t2.deptno from emp t1,dept t2 where t1.deptno=t2.deptno;
如何显示部门号为10的部门名、员工名和工资
SQL>select t1.ename,t1.sal,t2.dname,t2.deptno from emp t1,dept t2 where t1.deptno=t2.deptno and t1.deptno=10;
SQL>select t1.dname,t2.ename,t2.sal from dept t1,(select ename,sal,deptno from emp where deptno=10) t2 where t1.deptno=t2.deptno;
显示各个员工的姓名,工资,及其工资的级别
SQL>select t2.grade,t1.ename,t1.sal from emp t1,salgrade t2 where t1.sal between t2.losal and t2.hisal;
扩展要求:
显示雇员名,雇员工资及其所在部门的名字,并按部门排序。
SQL>select t2.ename,t2.sal,t1.dname,t1.deptno from dept t1,emp t2 where t1.deptno=t2.deptno order by t1.deptno;

自连接
自连接是指在同一张表的连接查询
显示某个员工的上级领导的姓名
SQL>select a1.ename,a1.mgr,a2.ename from emp a1,emp a2 where a1.mgr=a2.empno;

什么是子查询
子查询是指嵌入到其他sql语句中的select语句,也叫嵌套查询
单行子查询是指只返回一行数据的子查询语句
请思考,如何显示与smith同一部门的所有员工。
SQL>select * from emp where deptno=(select deptno from emp where ename='SMITH');
多行子查询是指返回多行数据的子查询语句
请思考,如何查询和部门10的工作相同的雇员的名字,岗位,工资和部门号
SQL>select ename,job,sal,deptno from emp where job in (select job from emp where deptno=10);
在多行子查询中使用all操作符
请思考,如何显示    工资比部门30的所有员工的工资高的员工的姓名,工资和部门号
SQL>select * from emp where sal > all (select sal from emp where deptno=30);
扩展要求:
大家想想还有没有别的查询方法。
SQL>select * from emp where sal > (select max(sal) from emp where deptno=30);
在多行子查询中使用any操作符
请思考,如何显示工资比部门30的任意一名员工的工资高的员工的姓名,工资和部门号
SQL>select * from emp where sal > any (select sal from emp where deptno=30);
扩展要求:
大家想想还有没有别的查询方法。
SQL>select * from emp where sal > (select min(sal) from emp where deptno=30);
多列子查询
多列子查询是指查询返回多个列数据的子查询语句
请思考如何查询与smith的部门和岗位完全相同的所有雇员
SQL> select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');
在from子句中使用子查询
请思考,如何显示高于自己部门平均工资的员工的信息
SQL>select * from emp t1,(select deptno,avg(sal) avg_sal from emp group by deptno) t2 where t1.sal>t2.avg_sal and t1.deptno=t2.deptno;
这里需要说明的是当在from子句中使用子查询的时候,该子查询会被作为一个视图来对待,因此叫做内嵌视图。党在from子句中使用子查询时,必须给子查询指定别名。

分页查询
oracle分页一共有三种方式:
1、rownum分页
(select * from emp)
2、显示rownum[oracle分配的]
SQL>select a1.*,rownum rn from (select * from emp) a1;
3、按rownum分页查询
SQL>select * from (select a1.*,rownum rn from (select * from emp) a1) where rn<=10;
SQL>select * from (select * from (select a1.*,rownum rn from (select * from emp) a1) where rn<=10) where rn>=6;
4、几个查询变化
a.指定查询列,只需要修改最里层的子查询
b.如何排序,只需要修改最里层的子查询

用查询结果创建新表
这个命令是一种快捷的建表方法
SQL>create table mytable(id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp;

合并查询
有时候在实际应用中,为了合并多个select语句的查询结果,可以使用集合操作符号,union(合并去重),union all(合并不去重),intersect(取交集),minus(取差集)。比and,or的效率高很多

在oracle中操作数据-使用特定格式插入日期值
如何插入列带有日期的表,并按照年-月-日的格式插入。
SQL>insert into emp values('9996','ROSE','CLERK','7902',to_date('1993/7/22','yyyy/mm/dd'),'1000.00','200.00','10');

SQL>select * from emp where to_char('RKSJ','yyyy-mm-dd') >='2016-05-12';

在oracle中操作数据-使用子查询插入数据
当使用values子句时,一次只能插入一行数据,当使用子查询插入数据时,一条insert语句可以插入大量的数据。当处理行迁移或者装载外部表的数据到数据库时,可以使用子查询来插入数据。
SQL>insert into kkk (myid,myname,mydept) select empno,ename,deptno from emp where deptno = 10;

在oracle中操作数据-使用子查询更新数
使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数据
希望员工scott的岗位、工资和补助与smith员工一样。
SQL>update emp set (job,sal,comm) = (select job,sal,comm from emp where ename = 'SMITH') where ename = 'SCOTT';
oracle基础教程 课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 ORACLE数据库概述 2 1.1 产品概述 2 1.1.1 产品简介 2 1.1.2 基本概念 3 1.2 ORACLE系统结构 4 1.2.2 ORACLE物理结构 4 1.2.3 系统全局区 6 1.2.4 进程 8 1.3 存储管理 9 1.3.2 逻辑结构 10 1.3.3 表(Table) 14 1.3.4 视图(View) 18 1.3.5 索引(Index) 18 1.3.6 同义词(Synonym) 19 1.3.7 序列(Sequence) 19 1.3.8 数据库链(Database Link) 20 第2章 管理ORACLE数据库 21 2.1 基本概念 21 2.1.1 数据字典 21 2.1.2 事务管理 23 2.1.3 数据库管理员(DBA) 24 2.1.4 ORACLE的四种状态 25 2.2 SQL*Plus方式的ORACLE数据库启动和关闭 26 2.2.1 启动数据库 26 2.2.2 关闭数据库 26 2.3 svrmgrl方式的ORACLE数据库启动和关闭 28 2.3.1 启动数据库 28 2.3.2 关闭数据库 30 2.4 应用开发工具(SQL * Plus) 31 2.4.1 SQL 32 2.4.2 PL/SQL 33 2.4.3 数据库管理工具 36 2.5 ORACLE用户及权限管理 36 2.5.1 ORACLE的用户管理 37 2.5.2 ORACLE的权限管理 38 2.6 ORACLE数据库的备份与恢复 39 2.6.1 Export 转入程序 40 2.6.2 Import 转入程序 42 2.6.3 增量卸出/装入 44 第3章 ORACLE数据库的网络应用 46 3.1 SQL*Net产品介绍 46 3.2 配置客户机/服务器结构 47 3.2.1 配置listener.ora 47 3.2.2 配置tnsnames.ora文件 48 第4章 常用任务示例 51 4.1 如何恢复被误删的数据文件 51 4.2 如何杀掉吊死session 51 4.3 如何修改字符集 51 4.4 如何追加表空间 51 4.5 如何加大表的maxextents值 52 4.6 如何查询无效对象 52 4.7 怎样分析SQL语句是否用到索引 52 4.8 怎样判断是否存在回滚段竞争 53 4.9 怎样手工跟踪函数/存储过程执行情况 54 4.10 多种业务使用同一数据库如何分配回滚段 54 4.11 怎样倒出、倒入文本数据 54 4.11.1 倒出 54 4.11.2 倒入 55 4.12 如何更新当前数据库日志备份方式为archive 56 4.13 Unix环境下如何实现自动备份 56 4.13.1 设置运行环境 56 4.13.2 倒出数据 56 4.13.3 异地备份 57 4.13.4 启动备份进程 58 4.14 怎样分析ORACLE故障 59 小结 61 附录A ORACLE数据字典与视图 62 附录B 动态性能表 68 附录C SQL语言运算符与函数 70
引 言 ............................................................... . ............................... . ............................... . ................... 3 第一章 数 据 库基 础 ............................... . ............................... . ............................... . ......................... 6 第二章 O r a c l e 入 门 ............................... . ............................... . ............................... . ......................... 6 第三章 查 询 基 础 ............................... . ............................................................... . ........................... 11 第四章 单 行 函 数 ............................... . ............................................................... . ........................... 14 第五章 分 组 函 数 ............................... . ............................................................... . ........................... 19 第六章 多 表 查 询 ............................... . ............................................................... . ........................... 21 第七章 子 查 询 ............................... . ............................................................... . ............................... 24 第八章 高 级 查 询 ............................... . ............................................................... . ........................... 40 第九章 数 据 字 典 ............................... . ............................................................... . ........................... 43 第十章 O r a c l e 数据类 型 ............................... . ............................................................... . ............... 44 第十一章 O r a c l e 体系结构 ( D B A ) ................................................................................................ 45 第十二章 DD L ( 改变 表 结构 ) ............................... . ............................................................... . ........ 46 第十三章 D M L ( 改变数 据 结构 ) ............................................................................................... . . 48 第十四章 约 束 ............................... . ............................................................... . ............................... 49 第十五章 视 图 ............................... . ............................................................... . ............................... 55 第十六章 索 引 ............................... . ............................................................... . ............................... 56 第十七章 序 列、同 义 词 ............................... . ............................................................... . ............... 65 第十八章 P L S Q L ............................... . ............................................................... . .......................... 67 第十九章 游 标、函 数 ............................... . ............................... . ............................... . ................... 79 第二十章 存 储过 程 ............................... . ............................... . ............................... . ....................... 86 第二十一章 触发 器 ............................... . ............................... . ............................... . ....................... 90 第二十二章 事务( 数 据库系 统 概论 ) ............................... . ............................... . ....................... 99 第二十三章 用户管 理 ............................... . ............................... . ............................... . ................. 100 第二十四章 备份 恢 复 S Q L L o a d e r ............................................................... . .......................... 104 第二十五章 数据库 设 计范 式 ............................................................................................... . ..... 106 第二十六章 数据库 设 计工 具 ............................................................................................... . ..... 107 第二十七章 对象关 系 数据库 系 统 ............................................................... . ............................. 1 12 第二十八章 其他数 据 库 ............................... . ............................................................... . ............. 1 13 第一章 数据库基础 1 1 1 1 . . . . 1 1 1 1 、数据库 基 本概念 数据库 ( D a t a b a s e , D B ) 数据库管 理 系统 ( D a t a b a se M a n a g e m e nt S y s t e m , D B M S ) 数据库管 理 员( D a t a b a se A d m i n i s t r a t o r , D BA ) 数据库系 统 ( D a t a b a se S y s t e m , D B S ) 1 1 1 1 . . . . 2 2 2 2 、关系型 数 据库 Q Q Q Q : : : : 目前都有哪些主流的关系 型 数据库 A A A A : : : : O O O O r r r r a a a a c c c c l l l l e e e e O O O O r r r r a a a a l l l l c c c c e e e e 、 I I I I B B B B M M M M D D D D B B B B 2 2 2 2 、 M M M M S S S S S S S S Q Q Q Q L L L L / / / / S S S S erererer v v v v e e e e r r r r 、 S S S S y y y y B B B B ase ase ase ase S S S S y y y y B B B B a a a a s s s s e e e e 、 I I I I B B B B M M M M I I I I n n n n f f f f o o o o r r r r m m m m i i i i x x x x 、 M M M M y y y y S S S S Q Q Q Q L L L L 、 A c c e ss Q Q Q Q : : : : X X X X M M M M L L L L , , , , T T T T X X X X T T T T 可以做为数据库吗? 1 1 1 1 . . . . 3 3 3 3 、 E E E E - - - - R R R R 模型 ( E E E E n n n n t t t t r r r r y y y y - - - - ReReReRe lat lat lat lat i i i i o o o o n n n n )
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值