Oracle的基本语法和操作

    xiaoxiao2021-03-25  83

     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 NULL 和IS  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; 

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

                         

                         

    转载请注明原文地址: https://ju.6miu.com/read-16640.html

    最新回复(0)