无根的泪痕

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

(1)insert语法

    insert into 表名(列名...) values(值列表...)

    --要注意细节:
     (1)在oracle中,没有自动增长列,后面我们采用序列来实现
     (2)考虑受约束的影响,尤其是default
          insert into student(sno,sname,sex,age) values(1,'张三','男',23);
          insert into student values(2,'李四','男',23,default);
     (3)要考虑类型的因素

    --第一种方式:表已经存在的情况下

1     insert into student 
2     select 1,'唐僧','',34,'东土大唐' from dual union
3     select 2,'孙悟空','',34,'花果山' from dual union
4     select 3,'八戒','',34,'高老庄'   from dual union
5     select 4,'沙僧','',34,'流沙河'   from dual
6 
7     select * from student;
8     select * from student1;
9     drop table student1;


    --第二种方式:表不存在情况下

1     create table student1 as select * from student;
2 
3     --复制表结构不复制数据
4     create table student1
5     as
6     select * from student where 1=0;
7 
8     --第三种方式:从其他表中插入数据
9     insert into student1 select * from student;

 (2)delete语句

    delete from 表名 where 条件

    delete from student where sno=4;
   

1     delete from student;
2 
3     truncate table student;--注意受外键约束的影响,就算外键表中无数据,都不能执行
4 
5     alter table sc
6     drop constraint FK_SC_STUDENT_SNO;

 (2)比较delete 和 truncate 的区别:

    --(1) truncate语法:truncate table 表名 ;
          --delete语法: delete from 表名  where 条件
    --(2)truncate 相当于不带条件的delete语句。且truncate不能带条件,相当于将表头和表里面的数据一刀两断
    --(3)delete和truncate都会受到外键的影响。但是要注意影响的程度不同,delete是当有数据引用的时候才不能删除
         --就算外键表中无数据,都不能执行

(3)update语句

1     update 表名 set 字段名=值,字段名=值 where 条件
2 
3     update student set age = 43 where sno=3;
4 
5     update student set age = 43,address='西天' where sno=3;

 (4)select语句

    select *,字段,表达式,函数(包括聚合函数),别名,distinct,常量
    from   表名,视图, 子查询(结果集),别名
    where  条件表达式 ,子查询(结果集),单行函数(不能接聚合函数),like '通配符'
    group by 字段
    having   函数,表达式
    order by 字段,表达式

    --聚合函数:max().min().count().sum().avg()

    --给字段取别名:

1     --S:select sno as  '学号','姓名'=sname,age '年 龄' from student;
2     select sno as "学号" from student; 
3     select sno "学号" from student; 

    --给表取别名

1     select * from student s;

    --在oracle中不使用top关键字

1     select top 2 * from student;

    --可以使用distinct

1     select distinct(deptno) from emp;
2     select distinct deptno from emp;

    --使用常量

1     select sno,sname,age,sex,address,'取西经' as "工作"  from student;
2 
3     select t.*,'取西经' as "工作"  from student t;
4 
5     --order by后面接表达式
6     select * from emp order by sal+comm desc;

 

(5)通配符

    --% 任意多个字符
    --_ 单个字符
    --[] 在某某范围之内
    --[^] 不在某某范围之内

    --where和having之间的区别:
    --(1)where 是对表中记录进行筛选,having是对结果集进行筛选
    --(2)where 不可以接聚合函数,having可以
    --(3)where 不一定要和group by结合使用,having必须结合group by一起使用

 (6)分析函数(排位函数)

    rank()
    row_number()
    dense_rank()

--rank()相同的值排位相同,序号随着跳跃

1 select empno,ename,job,mgr,sal,rank() over (order by sal descfrom emp

 

--row_number()相同的值排位不相同,序号不跳跃(连续)

1     select empno,ename,job,mgr,sal,row_number() over (order by sal desc)
2     from emp

 

--dense_rank() 相同的值排位相同,序号连续

1     select empno,ename,job,mgr,sal,dense_rank() over (order by sal descfrom emp

 

--partition by相当于group by 首先进行分组,在排序,最后排位

1     select empno,ename,job,mgr,sal,deptno,dense_rank() over (partition by deptno order by sal desc)
2     from emp

 

--找出工资水平位于整个公司的第3名的员工信息

1     select * 
2     from (
3          select empno,ename,job,mgr,sal,dense_rank() over (order by sal descas rankNum
4          from emp
5     ) e
6     where e.rankNum = 3;

 

 

posted on 2013-03-31 13:17  无根的泪痕  阅读(314)  评论(0)    收藏  举报