数据库操作语言

一、基本知识

  1、Oracle服务器由两大部分组成:Oracle数据库和Oracle实例
     Oracle数据库:位于硬盘上实际存放数据的文件,以.DBF结束的文件
     Oracle实例:位于物理内存里的数据结构

  2、数据库中的语言:

     DML:数据库操作语言(selectinsertupdatedelete)
       DDL:数据库定义语言(create tablealter tabledrop tablecreate view)
       DCL:数据库控制语言(commit、rollback、grant、revoke)

二、:数据库操作语言-select

  1、简单的查询:

    select * from 表名;                                                          --查询表的所有信息

    select 列名1,列名2,列名3... from 表名;                                --查询表的部分信息

    select e.ename 姓名, e.sexl 性别, e.age 年龄 from emp e;    --查询语句中别名的使用

  2、条件查询where

    select * from emp where deptno = 10;

    select * from emp where hiredate='09-6月 -81';                --正确,'09-6月 -81'为日期默认格式 DD-MON-RR

      对于日期有两种修改方式:

          a)修改系统默认日期格式:alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
              b)使用to_date:select * from emp where hiredate = to_date('1981-6-9', 'yyyy-mm-dd');
            to_date(要转换的内容, 格式)

  3、比较运算符

    a)、between ... and ... 在两个值之间(包含边界值),小值在前大值在后,可以作用于数字、日期
         select * from emp where sal between 1000 and 2000; --查询薪水1000-2000的员工:

    b)、[not] in(set) 
        select * from emp where deptno in (10, 20);   --查询10号和20号部门的员工:
          如果使用not in,那么括号里不能有null值

    c)、like

         模糊查询  % 代表零个或多个字符   _ 代表一个字符
         select * from emp where ename like 'S%';                                                      --查询以S开头的员工:
         select * from emp where ename like '____';                                                   --查询名字是4个字的员工

         select e.ename from emp e where e.ename not like '%R%' order by e.ename;  --显示不带有"R"的员工的姓名

  4、逻辑运算

      and:逻辑并
      or:逻辑或
      not:逻辑非

  5、排序

    --order by:排序(升序asc(默认);降序desc)

    order by 后面可以跟:列名、表达式、别名、序号

    如果后面的多列都按降序排,那么每列后面跟desc

    select e.ename,e.sal,e.hiredate from emp e order by e.ename;   ----(1)查询EMP表显示所有雇员名、工资、雇佣日期,并以雇员名的升序进行排序。

  6、单行函数:只对一行进行变换,每行返回一个结果。函数可以嵌套使用    

    字符函数:  

         lower:转为小写
         upper:转为大写
         initcap:每个单词的首字母大写
         concat:字符串连接
         substr:取子串
         length:字符数长度
         lengthb:字节数长度
         instr:在母串中返回子串的位置
         rpad:右填充
         lpad:左填充
         trim:去除首尾字条
         replace:替换      

    数字函数:     

         round:四舍五入
         trunc:截断
         mod:求余

     日期函数:

         在日期上加上或减去一个数字,结果仍为日期
         两日期相减,返回相关的天数
         用数字除以24来向日期中加上或减去小时
         sysdate:返回当前时间
         months_between(日期1, 日期2):按实际月份算出相关的月数
         add_months(日期, 1):在日期上加一个月
         next_day(开始的日期, '星期六'):从当前日期开始,下一个星期六
         last_day(日期):返回此日期中本月的最后一天
         round(日期, 'MONTH'):四舍五入到月
         trunc(日期, 'YEAR'):截断到年

  7、分组函数

    作用于一级数据,并对一级数据返回一个值。会自动去除空值再计算  avg(平均)、count(计数)、max(最大)min(最小)sum(求和)

     注意:

      a)不能在where子句中使用组函数,可以在having子句中使用组函数。尽量使用where       

      b)在组函数中使用nvl函数,使分组函数无法忽略空值

           select e.deptno,count(e.deptno) from emp e group by e.deptno having count(e.deptno) >=1; -- 列出至少有一个雇员的所有部门。 

   8、多表查询

     等值连接(内连接):
     不等值连接:
           外连接:

       当条件不满足时,仍然希望显示某些在结果中包含某些不成立的记录时,使用外连接
         左外连接:当连接条件不成立时,没有加号(+)的列的信息仍然显示,通常放在等号(=)的左边
         右外连接:当连接条件不成立时,没有加号(+)的列的信息仍然显示,通常放在等号(=)的右边
       自连接:会先产生笛卡尔积,再根据条件进行过滤记录。效率低

三、数据库操作语言-insert

  格式:insert into 表名(column1,column2...)  values(value1  value2...)

    insert into person values(111, '张三', '男');

    insert into person( pname) values( '李四');

   注意:

    a)列名与值必须一一对应       

    b)如果列名涵盖了表里所有的列,那么列可以省略,但值必须与表里列的顺序一致  

      隐式方式:如果插入的数据中,列名只是表中的一部分,那么其他未指明的列的值为null  

               显式方式:在values中指定空值

四、数据库操作语言-update

  格式:

    update 表名 set column1 = value1 , column2 = value2,...   where ……

    update emp02  set comm=1000  where deptno=10;

五、数据库操作语言-delete

   格式:delete from 表名 where condition
     清空表:

        a)delete from 表名;
        b)truncate 表名;

 

六、Oracle中的事务:

   设置自动提交:

    SET AUTOCOMMIT ON/OFF; --oracle默认为关闭off

   事务开始标志:   

    DML语句(insert、update、delete)会自动开启事务  

  事务结束标志:   

    提示:

      显示提交:commit   

      隐式提交:使用DDL(create table...);正常退出时会自动提交   

    回滚:

       显式回滚:rollback  

       隐式回滚:宕机、非正常退出

  保存点的使用:可以让数据回滚至指定的地方   

     设置保存点:savepoint a;   

     回滚至保存点:rollback to savepoint a;

 

posted @ 2016-09-03 17:10  陈泽俊  阅读(1608)  评论(0编辑  收藏  举报