oracle数据库的学习笔记(二)

 

在看着韩顺平老师的视频进行oracle数据库的学习,简单的笔记总结如下:

 

oracle数据类型:比较少,简单

char 定长 最大2000字符,不够的空间被空格占用,效率高,查询速度快,比如身份证号(18位)

varchar2  变长,节省空间,最大4000字符,查询速度没有char快

clob 字符型大对象

number 数字类型,范围:-10的38次方到10的38次方,可以表示整数,也可以表示小数

比如:number(5,2)  表示一个小数有5位有效数,2位小数,范围:-999.99到999.99

          number(5) 表示5位整数 范围:-99999到99999

日期类型
date   包含年月日和时分秒,一般用date
timestamp 这是oracle9i 对date 数据类型的扩展,精度高,到毫秒


图片类型

blob  二进制数据 可以存放图片/声音 视频,当这些类型保密性很高时,把图片/声音 视频存放到数据库中,一般的放在一个文件下下面

 

练习:
1、创建一个表
create table student(

xh number(4), --学号
xm varchar2(20),--姓名
sex char(2),--性别
birthday date,--出生日期
sal number(7,2) --奖金(99999.99)
);
create table classes(
classId numuber(2),
classname varcher(40)
);

右击新建也可以建一个表


2,删除一个表
   drop table 表名字;


3,添加一个字段
  alter table student add(classId number(2));

4,查看表命令:SQL>desc student;

5,修改字段的长度:alter table student modify(xm varchar(30));

6,删除一个字段:alter table student drop column 字段名

7,修改表的名字:sql>rename student to stu;

8,向表中添加数据

 insert into 表名字 values(字段1,字段2.。。。。);
 insert into student values(1,'小明','男','11-12月-1997',2000,三);

oracle中默认的日期格式是‘DD-MON-YY’

改日期格式:alter session set  nls_date_format='yyyy-mm-dd'

 insert into student values(1,'小明2','男','1997-12-11',2000,三);


9、插入部分字段
   insert into student(xh,xm,sex) values('A003','JOHN','女');

   插入空值

   insert into student(xh,xm,sex,birthday) values(3,'aa','女',null);
   查询字段为空时:
 select * from student where birthday is null;
 
10,改一个字段
  update student set sex='女' where xh='A001';
 
   修改多个字段
   update student set sex='男',birthday='1980-04-01' where xh='A001';

    修改含有null值的数据

11、删除数据

   delete from student;删除所有记录,表结构还在,写日志,可以恢复的,速度慢

   drop table student; 删除表的结构和数据

   truncate table student;
   删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快


12、设置保存点和恢复保存点
 
    savepoint 保存点名
     rollback to 保存点名字

 

关于查询:

1,like %

 

2,order by "年薪" asc/desc

   select * from emp order by "年龄" asc,"工资" desc;--按照年龄升序,按照工资降序


3,数据分组:max,min,avg,sum,count

 

4,group by 和 having  子句
  
    group by 用于对查询的结果分组统计
    having 子句用于限制分组显示结果

 例如:select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000;


5,对数据分组的总结

  1),分组函数只能出现在选择列表、having、order by 子句中、
  2),如果在select 语句中同时包含有group by,having,order by 那么他们的顺序是group by,having,order by
  3),在选择列中如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错

  例如:select avg(sal),max(sal),deptno from emp group by deptno having avg(sal);
这里的deptno就一定要出现在group by中

 

6,取消重复行:distinct
select distinct deptno ,job from emp;

 

7,oracle 对字段区分大小写

 

8,nvl(列名,0):如果此列为空,用0来代替

 

9,如何使用 like 操作符
  
   %:表示任意 0 到多个字符
   _:表示单个字符

  例如:select name from emp where name like 'S%';显示首字母为S的员工姓名
  
  

10,在 where 中使用 in
   select * from emp where empno in(1,2,3);

 

11,使用 is null 的操作符

 

12,子查询:子查询是指嵌入在其他sql语句中的select 语句,也叫嵌套查询。

    单行子查询:单行子查询时指只返回一行的数据的子查询语句。

    多行子查询指返回多行数据的子查询

    在多行子查询中使用any操作符
    
13,数据库中的sql 语句执行 从左到右。

  例如:如何显示高于自己部门平均工资的员工信息

   例子复杂语句:先查询出各个部门的平均工资和部门号,把查询出的信息作为一个表,起个别名为a1,然后把emp起个别名为a2,

第一步: 
   select deptno,avg(sal) as mysal from emp group by deptno

  select a2.name,a2.sal,a2.deptno,a1.mysal  from emp a2,(select deptno,avg(sal) as myavgsal from emp group by deptno)a1 where a2.deptno=a1.deptno and a2.sal>sal.myavgsal

内嵌视图:当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,当在from 子句中使用子查询时,必须给子查询指定别名

注意:给表取别名时不能加 as,给列取别名时可以加 as 也可以不加 as

 

 

 14、用查询结果创建新表


    这个命令是一种快捷的见表方法

  create table mytable(id,name,sal,job,deptno) as select empno,ennmae,sal,job,deptno from emp;

 

  导入表
  例如:把emp表中的数据导入到newtable中
  insert into newtable( id,name,sex) select empid,ename,esex from emp where。。。。

15,使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数据,
 
   例如:希望员工scott的岗位、工资、补助与smith员工一样

    update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT'

 

16、合并查询

  有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号

  1)union      该操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中重复行

  2)union all  该操作赋予union类似,但是它不会取消重复行,而且不会排序,

  3)intersect  使用该操作符用于取得两个结果集的交集

  4)minus      使用该操作符用于取得两个结果的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据。

 

 

 

你可能感兴趣的:(oracle,数据库,查询)