oracle基础之sql基础知识

1. sql(Structured Query Language)是关系型数据库的基本操作语言。

        包括数据库查询(Data Query),数据操纵(Data Manipulation),数据定义(Data Definition)和数据控制(Data Control)。
         数据库查询(Data Query):用于检索数据,也就是select语句。
         数据操纵(Data Manipulation Language DML):用于改变数据,包括insert,update和delete。DML不会自动提交事物。
         事物控制语句(Transactional Control Language TCL):用于维护数据的一致性,包括commit, rollback和savepoint;其中savepoint语句用于设置保存点,以恢复部分数据的更改。
         数据定义(Data Definition Language DDL):用于建立,修改和删除数据对象。create,alter和 drop;DDL语句会自动提交事物。
         数据控制(Data Control Language DCL):用于分配和收回权限,包括grant和revoke。DCL也会自动提交事物。


2.sql语句规则
  sql语句的关键子不区分大小写;对象名和列名不区分大小写。


3.pl/sql 是oracle在标准sql基础上的扩展,允许定义变量和常量,允许过程语言结构(条件分支和循环)允许异常处理。

 

4.distinct 作用是要查询的所有数据,而不仅仅是紧跟它后面的那列。
      selecte distinct a,b from table; --返回数据的条件是a相等且b必须相等distinct 可否放在列的中间那?


5.NVL(expr1,expr2)
       如果expr1是null,则返回expr2,否则返回expr1,expr1和expr2可以是任意数据类型,但两者必须匹配。
   NVL2(expr1,expr2,expr3)
       如果expr1不是null则返回expr2,否则返回expr3。expr1可以是任意数据类型,而expr2和expr2可以是除LONG之外的其它类型。但是三者数据类型必须一致。


6.插入数据
  不使用列插入单行数据:必须提供所有列的数据,数据的顺序与列的顺序一致。
  insert into emp values(1,'gaci','man');
  使用列插入单行数据:对于未出现的列,默认值为null

  insert into emp(id,name,sex) values(1,'gaci','man');

  使用只查询插入数据:--将表emp2的数据全部复制到emp1里面
  insert into emp1(id,name,sex) select id,name,sex from emp2;
  insert /*+APPEND*/into emp1(id,name,sex) select id,name,sex from emp2;
  /*+APPEND*/表示直接装载方式,主要用于操作大批量数据

  delete删除表中的所有数据时,不会释放表所占用的空间;但是可以回退(roll back)
  truncate不仅删除表的数据,而其释放其空间;不可以回退。
  

7. 事务控制语句
      事务用于确保数据库的一致性,有一组相关的DML语句组成。事务确保该组DML语句所执行的操作要么全部执行成功,要么全部取消。
      事务主要有insert,update,delete和selete ... for update 组成,当执行这些语句时事务开始;当执行commit货rollback的时候事务结束。
  
  
   当执行事务操作时,oracle会在被操作的表上家上锁,以防止其它用户改变表结构;同时会在被操作的行上加上锁,以防止其它事务在相应的行上执行DML操作。
 
   当执行commit语句之后,会确认事务变化(更新数据等), 结束事务,删除保存点,释放锁。
   当执行DDl语句时会自动提交事物,create , alter,drop 等。
   当执行DCL语句Grant,revoke等
   当退化出sql/plus,pl/sql等
  
回退事务
     保存点(savepoint)--是事务中的一点,用于取消部分事务。
     设置保存点:savepoint a;
     回退保存点:rollback to a ;  -- 会取消a和面的操作
     取消全部事务:rollback;
 

只读事务(会话级别的) set transaction read only;
    只允许执行查询操作,不允许执行任何DML操作。尽管其它用户会话可能提交新事务,但只读事务不会取得新的数据变化,可以确保用户取得特定时间点的数据信息。

顺序事务  set transaction isolation level serializable;
     只读事务可以使用户取得特定时间点的数据信息,但是该用户在只读事务期间不能执行dml操作。而顺序事务则可以这样。
 
   数据分组
   数据分组通过使用group by字句,分组函数和having字句共同实现。group by指定要分组的列,分组函数用于统计结果,having用户限制分组显示结果。
  
   分组函数
   只能出现在选择列表,order by 和 having字句中,不能出现在where和group by字句中
   除了count(*)函数外,其它分组函数都会忽略null行
   当执行select语句时,如果选择列表同时包括列,表达式和分组函数,那么这些列和表达式必须出现在group by字句中。
  

脏数据---未提交事务

 

--查询带有下划线的名字
 select name from emp where name like '%a_%' ESCAPE 'a' -- a为转义字符

你可能感兴趣的:(数据结构,oracle,sql,Tcl)