Oracle的基本语法和操作

 ORACLE中的几大基本操作指令及其含义

   数据定义语言(DDL):用于建立、修改、删除数据库的对象(对列操作)

      1.CREATE:创建表或其他对象的结构

      2.ALTER:修改表或其他对象的结构

      3.DROP:删除表或其他对象的结构

      4.TRUNCATE:删除表数据,保留表结构

  数据操作语言(DML):用于修改表中的数据(对行操作)

      1.INSERT:将数据插入到数据表中

      2.UPDATE:跟新数据表中已经存在的数据

      3.DELETE:删除数据表中的数据

 事务控制语言(TCL):用来维护数据一致性的语句

        1.COMMIT:提交,确认已经进行的数据改变

         2.ROLLBACK:回滚,取消已经进行的数据改变

 数据查询语言(DQL):用来查询需要的数据

        1.SELECT:查询

数据控制语言(DCL):用于执行权限的授予和收回操作

    1.GRANT:用于给用户和角色权限的授予

    2.REVOKE:用于用户和角色权限的收回

    3.CREATE USER:创建用户


常用的Oracle语句:

 创建一张表:

                      CREATE  TABLE employee(

                                   id  NUMBER(6),

                                   name  VARCHAR2(20),

                                   gender CHAR(1),

                                    salery NUMBER(6,2)

                              )

 查看表结构:

                DESC  table_name;

修改表名:

                RENAME  old_name  TO  new_name;

增加列:

            给表(emp)增加一列hiredate,并设置默认值为当前日期

             ALTER TABLE   emp   ADD(

                      hiredate   DATE   DEFAULT  sysdate );

删除列:

             删除表emp的列hiredate

            ALTER TABLE emp  DROP(hiredate)


修改列:

             修改表emp的列job,并增加默认值的设置

            ALTER  TABLE  emp  

            MODIFY(job  VARCHAR2(20)   DEFAULT   'CLERK')

插入一条记录:

               INSERT  INTO emp(id , name , job , salary)

               VALUES(200 , 'jack' , 'SALEMAN' ,5500)

更改表中的数据:

        更改职员ROSE的薪水为8500

        UPDATE  emp SET salary = 8500  WHERE name = 'ROSE'

删除表中的数据:(如果没有WHERE子句,则全表的数据都会被删除)

         删除emp中职位为空的员工的记录

        DELETE FROM empWHERE job is null

      删除全表记录:

          DELETE FROM emp (速度慢,可以回退)

          TRUNCATE TABLE emp(速度快,立即执行,不可回退)

字符串函数:

            CONCAT(char1 , char 2)  等价于连接操作字符 “||

                       SELECT   CONCAT(CONCAT(ename , ' :') , sal)

                        多个字符串连接,使用||更直观

                        SELECT ename  || '  :'|| sal FROM emp;

              LENGTH(char1):返回字符串char1的长度

                         SELECT ename ,LENGTH(ename)  FROM emp

             UPPER(char)用于将字符串中每个字符转换为大写形式

             LOWER(char)用于将字符串中每个字符转换为大写形式

             INITCAP(char)用于将字符串中每个单词的首字母大写,其余字符小写,单词之间需要用空格或非字符分隔开

            TRIM(c2 FROM C1)从c1的前后截去c2

             LTRIM( c1 ,c2) 从c1的左边截去c2

             RTRIM(c1 , c2)从c1的右边截去c2

             LPAD、RPAD:补位函数,用于自字符串char1的左边或右边用char2补足到n位,char2可以重复多次

             LPAD(char1, n , char2) 左补位函数

             RPAD(char1, n , char2) 有补位函数

NVL(expr1 , expr2):如果expr1是NULL,则取expr2

NVL2(expr1 ,expr2,expr3):如果expr1不是NULL,则取expr2,如果expr1是NULL,返回expr3.

运算符:

        >,<,>=,<=,!=,<>,= ,AND, OR

[NOT]   LIKE:模糊查询

        %:表示0到多个字符

        -:表示单个字符

[NOT]   IN(list)用来取出[不]符合列表范围中的数据

BETWEEN  e1  AND  e2

      用来查询符合e1到e2范围条件的数据,包含e1和e2

IS NULLIS  NOT  NULL:判断字段中的数据是否为NULL

ANY  和  ALL:不能单独使用需要配合单行比较符> 、 >=  、 <  、<=   一起使用

          > ANY:大于最小

            .......

DISTINCT:过滤掉重复的数据     用法:  DISTINCT   colum-name

ODER  BY : 按一定规则排序    ASC:升序排列,默认         DESC:  降序排列

聚合函数:

            MAX()    MIN()   :用来取得列或表达式的最大值或最小值

           AVG() SUM():用来统计列或表达式的平均值和总和

          COUNT():用来计算表中的记录条数,忽略NULL值

        聚合函数忽略NULL值,所以使用时一般会对空值使用NVL或NVL2进行处理

GROUP  BY :分组查询,查询的出来结果是以组进行操作后的数据

HAVING子句:用来对分组后的结果进一步限制,比如按部门分组后,得到每个部门的最高薪水,可以继续限制输出结果

                          必须跟在GROUP  BY后面,不能单独存在

               ——查询每个部门的最高薪水,只有薪水高于5000的记录才被显示出来——

             SELECT   deptno ,  MAX(sal)     FROM    emp

              GROUP BY   deptno   HAVING  MAX(sal) > 5000;

查询语句执行顺序:

  1.FROM 子句,执行顺序为从后往前、从右到左

         数据量少的表尽量放在后面

2.WHERE子句:执行顺序为自上而下,从右到左

           将能过滤掉最大数量记录的条件写在WHERE子句的最右

3.GROUP BY:执行顺序为从左向右分组

           最好在GROUP BY之前使用WHERE将不需要的记录在GROUP BY之前过滤掉

4.HAVING子句:消耗资源

          尽量避免使用,HAVING会在检索出所有记录之后才对结果进行过滤,需要排序等操作

5.SELECT子句:少使用*号,尽量取字段名称

              ORACLE在解析的过程中,通过查询数据字典将*号一次转换为所有的列名,消耗时间和内存

6.ORDER BY :执行顺序为从左到右排序,消耗资源

关联查询:

          内连接:返回所有满足连接条件的记录

                 SELECT  e.ename , d.dname

                 FROM  emp  e , dept  d

                 WHERE e.deptno = d.deptno;

               

                 SELECT e.ename , d.dname

                 FROM emp e    [INNER]   JOIN  dept d

                ON(e.deptno = d.deptno);

      左外连接:

                    emp表所为驱动表,以emp表为准

                         SELECT  e.ename , d.dname

                         FROM   emp e  LEFT [OUTER]  JOIN dept d

                        ON e.deptno = d.deptno;    

          

右外连接:

                    emp表所为驱动表,以emp表为准

                         SELECT  e.ename , d.dname

                         FROM   emp e  RIGHT   [OUTER]  JOIN   dept d

                        ON  e.deptno = d.deptno;    

全外连接:左外连接和有外连接的查询结果的总和       

                       SELECT  e.ename , d.dname

                         FROM   emp e  FULL   OUTER JOINdept d

                        ON e.deptno = d.deptno

自连接:一种特殊的连接查询,数据来源是一张表,即关联关系来自于单表的多个列

                     


                     



猜你喜欢

转载自blog.csdn.net/wade_2hou/article/details/60973709