DML语句(insert \ delete \update \select)

原文链接: http://www.cnblogs.com/lemonZ/archive/2013/03/31/2991651.html

(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 无根的泪痕 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lemonZ/archive/2013/03/31/2991651.html

猜你喜欢

转载自blog.csdn.net/weixin_30735391/article/details/94785572