Oracle学习笔记之oracle 数据库操作之表的管理

视频学习Oracle记录
========================================
二、 oracle 数据库操作之表的管理
========================================
 create table student(
  xh number(4),
  name varchar2(10)
 );

修改表的字段:
 增加字段
 sql> alter table student add(age number(2));
 修改字段
 sql> alter table student modify(name varchar(30));--使用modify的时候,表中不能有数据
 删除字段
 sql> aler table student drop cloum age;
 修改表的名字
 sql> rename student to stu;
 删除表
 sql> drop table student;

 添加数据:
     添加所有字段:sql>  insert into student values(1,'小米',...);
     添加部分字段:sql> insert into student(xh,xm,sex) values('aaa01','Jose','女');
 修改日期的默认格式
 alter session set nls_date_format='yyyy-mm-dd';
 
 查询语句
 sql> select * from student where birthday is (not) null;
 改
 sql> update student set age=20 where name='Lisi';
 增

 删
 sql> delete from student;--删除所有数据
 sql> rollback;--回滚 与savepoint a一起用(a为回滚时的点)
 sql> drop table student;--删除表结构和数据
 sql> truncate table student;--删除表中所有记录,表结构还在,不写日志无法找回删除的记录,速度非常快!
 
Oracle 表查询:
 查看表结构
 sql> desc t_table;
 查询所有列
 sql> select * from t_table;
 查询指定的列
 sql> select name,age from t_table;
 取消重复的行
 sql> select distinct * from t_table;
 使用算数表达式
 sql> select sal*13 from emp;
 sql> select sal*13 '年工资' ,ename from emp;-- 别名
 查询,且计算包含奖金的年薪
 sql> select sal*13 + comm*13 '年薪', ename from emp;--其中comm为奖金,这样计算的话,当奖金为null时,Oracle不会计算得到的奖金,也就是说年薪为null,正确的做法如下:
 sql> select sal*13 + nvl(comm,0)*13 '年薪' , ename from emp;--nvld()的意思就是当comm为NULL时为0,不为NULL时,为comm
   Like操作符
     %:代表任意0到多个字符
     _:代表任意单个字符
 sql> select ename, sal from emp where ename like 'S%';--S开头的名字符合要求的都列出来 
 sql> select ename, sal from emp where ename like '__S%';--第三个字符为S的名字符合要求的都列出来
 in关键字
 sql> select * from emp where empno in (1,2,3,4);--员工编号在1到4之间的都查询出来
 排序关键字 order by asc/desc(desc 降序 asc 升序,升序为默认值,可以不写)
 sql> select * from emp order by age desc;
 混合使用:sql> select * from emp order by age desc, sal asc;--按年龄降序并且公子升序的情况排列
 
 复杂查询:数据分组:max,min,avg,sum,count等的使用
 sql> select count(*) from t_table;--查出总记录数
 子查询:嵌入在其他查询中的查询便叫做子查询。
 sql> select ename,sal from emp where sal=(select max(sal) from emp);--查询公子最高的员工姓名、工资
 单行子查询
 sql> select * from emp where deptno = (select deptno from emp where ename = 'SMITH');
 多行查询用 in、all、any
 sql> select * from emp where deptno in (select deptno from emp where ename = 'SMITH');
 sql> select * from emp where deptno > all(select deptno from emp where ename = 'SMITH');
 多列子查询

 
 分组 group by、having
 sql> select avg(sal),max(sal, deptno from emp group by deptno;--如何显示每一个部门的平均工资以及最高工资
 sql> select avg(sal),max(sal, deptno,job from emp group by deptno,job;--先按部门分组然后在按工作分
 sql> select avg(sal),max(sal, deptno from emp group by deptno having avg(sal)>2000;--平均工资在2000以上的显示
 多表查询
 sql> select a1.ename,a1.sal,a2.dname from emp a1 ,dept a2 where a1.deptno = a2.deptno;--别名...,笛卡尔积: S(m) x T(n) 最后有m*n种情况,数据库中的记录查询需要避免笛卡尔积
 多表查询的特殊形式——自连接
  同一张表内的连接查询,可以看做是有两张相同的表
 复杂查询语句
 例子:显示高于自己部门平均工资的员工信息
  a、查出每个部门的平均工资和部门号
   sql> select deptno, avg(sal) mysal from emp group by deptno;
  b、把a中的查询看做是一张 子表
   sql> select a2.ename, a2.sal, a2.depto, a1.mysal from emp a2, (select deptno, avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a1.mysal < a2.sal;--括号中的为内嵌试图(子表)
 Oracle分页(共三种方式: rowID,分析函数,rownum)
     ——与MySQL不同,MySQL直接使用limit就可以了
 1、rownum 分页
 sql> (select * from emp)
 2、显示rownum[Oracle分配的]
 sql> select a1.*,rownum rn from (select * from emp) a1;
 3、分页结果
 sql> select * (select a1.*,rownum rn from (select * from emp) a1 where rownum <= 10) where rn >= 6;--取出六到十的数据
  注意: a.指定查询列只需要修改最里面的子查询(select * from emp)的指定列就可以 b.要对查询结果进行排序的的话,也只需要修改最里面的子查询就可以.
 
 使用查询结果来穿件一张新表
 sql> create table mytale(id,name,age) as selectsid,sname,sage from student;
 
 Oracle 创建数据库工具
  dbca[数据库创建助手]
 
 
注意:
 出现顺序: where 、group by、having、order by...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值