Oracle学习日记【3】

1、临时表

  1.1类型:会话级临时表、事务级临时表

  1.2两种临时表的异同:

           相同点:两种表都不能永久保存记录,他们都是用临时表空间

           不同点:会话级别只有当会话结束时表中的数据才会被截断,而事务级临时表不管是COMMIT/ROLLBACK或者是会话结束,临时表中的数据都会被截断。

  1.3什么时候使用临时表:把复杂的逻辑拆分开来,用临时表储存中间结果,以方便后面的逻辑处理。程序执行过程中可能要存放一些临时的数据,这些数据在整个程序的会话过程中都用到等等。

  1.4临时表创建方法

                   语法结构:CREATE GLOBAL TEMPORARY TABLE TABLE_NAME(COL1 TYPE1,COL2 TYPE2…) ON COMMIT PRESERVE ROWS;

                   CREATE GLOBAL TEMPORARY TABLE STUDENT

      (STU_ID NUMBER(5),

     CLASS_ID  NUMBER(5),

     STU_NAME VARCHAR2(8),

     STU_MEMO VARCHAR2(200)) ON COMMIT PRESERVE ROWS ;

2、聚合函数

  定义:聚合函数同时可以对多行数据进行操作,并返回一个结果集。

  聚合函数与GROUP BY 使用

  注意:不使用分组则把整个表作为一组

  AVG,SUM,MIN,MAX,COUNT

  栗子:查询EMP表中各部门工资大于2000的员工人数,并且按人数从高到低排列

    SELECT E.DEPTNO, COUNT(1) CT1

    FROM EMP E

    WHERE E.SAL > 2000

    GROUP BY E.DEPTNO

    ORDER BY CT1 DESC

3、数据操作语言(DML)

         3.1数据插入INSERT

                   语法格式:INSERT INTO 表名(列1,列2……) VALUES(值1,值2……)

                   栗子:往学生表(student)里插一条记录,学号(s001),姓名(SASA),性别(女)

                            INSERT INTO student(SID,SNAME,SSEX) VALUES('s001','SASA','女')

                   注意:列名可以省略,当省略列名时,默认是表中的所有列名,列名顺序为表定义中列的先后顺序。值的数量和顺序要与列名的数量和顺序一致。值的类型与列名的类型一致。

         3.2向表中插入一个结果集

                   语法结构:INSERT INTO 表名1(列名1,列名2……) 查询结果集;

4、更新数据UPDATE

         语法结构:UPDATE 表名 SET 列名1=值,列名2=值…… WHERE 条件

         栗子:在学生表(student)里更改一条记录,将学号(s001)的学生性别改为男

                   UPDATE student SET ssex='男' WHERE sno='s001';

5、删除数据DELETE

         语法结构:DELETE FROM表名 WHERE 条件

         栗子:删除学生表(student)里学号为s001的记录

                   DELETE FROM student_1 WHERE sno='s001';

6、TRUNCATE(DDL命令)

         语法结构:TRUNCATE TABLE 表名

         TRUNCATE和DELETE异同:

                   相同点:都能把表中数据全部删除

                   不同点:TRUNCATE是DDL命令,删除的数据不能恢复,DELETE是DML命令,删除后的数据可通过日志文件恢复

         性能方面比较:如果一个表中数据很多,TRUNCATE相对DELETE速度快。TRUNCATE命令比较危险,慎用!!!

7、操作符

运算符

说明

运算符

说明

=

等于

大于

<>或者!=

不等于

<=

小于或者等于

小于

>=

大于或者等于

        

    三个运算符优先级:NOT>AND>OR

8、字符串连接操作符(||)

         栗子:在EMP表中,查询工资在2000元以上的姓名以及工作。

    SELECT (ENAME || 'is a ' || JOB) AS "Employee Details"

    FROM EMP

    WHERE SAL > 2000;

    Oracle中字符串可以用单引号,存在特殊字符的时候,必须用双引号。

9、DISTINCT操作

         作用:在Oracle查询中结果中,可能出现若干行相同的情况,那么可以使用DISTINCT消除重复行。

         栗子:DISTINCT消除重复行(GROUP BY性能较好)

                   SELECT DISTINCT DEPTNO FROM EMP;

10、NULL操作

         特性:

    1、空值跟任何值进行算术运算,得到的结果都为空值

    2、  空值跟任何值进行关系运算,得到的结果都为不成立

    3、  空值不参与任何聚合运算

    4、  排序的时候,空值永远是最大的

  栗子:查询EMP表中没有发奖金的员工。

    SELECT * FROM EMP E WHERE COMM IS NULL;

11、IN操作

         在Where子句中可以使用IN操作符来查询其列值在指定的列表中的行。

         栗子:查询出工作职责是SALESMAN、PRESIDENT或者ANALYST的员工。

    SELECT E.ENAME,E.JOB,E.SAL

    FROM EMP E

    WHERE E.JOB IN ('SALESMAN', 'PRESIDENT', 'ANALYST');

12、BETWEEN…AND…

         在WHERE子句中,可以使用BETWEEN操作符来查询列值包含在指定区间内的行。

         栗子:查询工资从1000到2000之间的员工。

                   SELECT E.ENAME, E.JOB, E.SAL FROM EMP E WHERE E.SAL BETWEEN 1000 AND 2000;

13、LIKE模糊查询

         模糊查询使用LIKE关键字通过字符匹配检索出所需要的数据行。字符匹配操作可以使用通配符“%”和“_”:

         %:表示零个或者多个任意字符。

    _:代表一个任意字符。

         栗子:显示员工名称以J开头以S结尾的员工的姓名、工资和工资。

    SELECT E.ENAME, E.JOB, E.SAL

    FROM EMP E

    WHERE E.ENAME LIKE 'J%S';

猜你喜欢

转载自www.cnblogs.com/wenxing9415/p/10841602.html