一 、 SQL 语言 
SQL ( Structure Query Language 结构化查询语言)标准的关系数据库语言, 用于建立、储存、修改、检索和管理数据库中的信息。 
二 、 SQL 语言的组成 
     数据定义语言 (DDL): 用来创建、删除或者修改数据模式对象的结构。一般包括: CREATE,DROP,ALTER
     数据操作语言( DML ): 用来操作数据。包括: UPDATE,INSERT,DELETE
     数据查询语言:查询数据: SELECT
三、进入 SQL*PLUS ( ORACLE 自带的 PL/SQL 使用器) 
    进入 ORACLE 目录中 BIN/PLUS33W(5.0) 或者 BIN/PLUS80W(6.0)
    编辑、运行,   在命令苻后输入 SQL 命令, 如果上一个 sql 输入有问题,键入 ‘ ed ’ 进行编辑 
四、表 
    1. 创建表(创建表用 CREATE TABLE 语句):         
        CREATE TABLE <TABLE_NAME>( 
          Column_name1 Datetype1 [Constraint_Type] 
        ,Column_name2 Datatype2 [Constraint_Type] 
        , … 
        ,[CONSTRAINT Constraint_Name1 Constraint_Type (column_name) USING INDEX] 
) 
    /
     Constraint_Type 有以下几种类型 
        PRIMARY KEY(column_name)- 主键约束 
           FOREIGN KEY(column_name) REFERENCES Table_Name(Colunm)- 外键约束 
           UNIQUE KEY (column_name)- 唯一键约束   
    DateType 一般是 ORACLE 可以支持的数据类型比较常用的有: 
        A. NUMBER
        B.VARCHAR(n)
        C.VARCHAR2(n)
        D.LONG
        E.DATE
        F.CHAR(n)
        G.INTGER
        例子: 创建一个工人信息表, GRID,XM,XB,CSRQ  和一个工人工资表,包括 GRID,SZBM( 所在部门 ) , GZ,RQ  其中工人信息表是主表,工人工资表是从表 
        CREATE TABLE GR_XX( 
   GRID  VARCHAR2(10) 
  ,GRXM  VARCHAR2(50)  NOT NULL 
  ,XB    VARCHAR2(2)   NOT NULL 
  ,CSRQ  DATE 
  ,CONSTRAINT GR_XX$_GRID PRIMARY KEY (GRID) USING INDEX 
  ) 
    /
        CREATE TABLE GR_GZ( 
   GRID  VARCHAR2(10) 
  ,SZBM  VARCHAR2(10) 
  ,GZ    NUMBER(10,2) 
  ,RQ    DATE 
  ,CONSTRAINT GR_GZ$_GRID FOREIGN KEY (GRID) REFERENCES GR_XX(GRID) 
  ,CONSTRAINT  GR_GZ$_GRID_RQ UNIQUE (GRID,RQ) 
  ) 
    /
    2. 对表插入数据 
        插入一条记录 
            INSERT INTO Table_Name [(column_name1,Column_name2,...)] VALUES(value1,value2,...);
             例子:向工人信息表中插入数据 
            Insert into gr_xx (grid,grxm,xb,csrq) values (‘001’,’xjf’,’ 男 ’,SYSDATE);
            Insert into gr_gz values(‘001’,’008’,560.92);
        插入多条记录 
            INSERT INTO Table_Name1 [(column_name1,Column_Name2,...)]
    3. 修改表   
         UPDATE Table_Name SET column1=val1,column2=val2,… WHERE …
         例子: update gr_gz set gz=80000 where grid='sw'or grid='dn';
    4. 删除数据 
        DELETE FROM TABLE_NAME WHERE ...
    5. 提交数据 
        COMMIT-- 提交 
        ROLLBACK-- 回滚 
        例子:主表和从表需要同时更新数据时,需要更新两条 sql 语句,为避免数据库中的垃圾数据,当一条记录失败,即回滚。 
    6. 删除表 
        DROP TABLE TABLE_NAME;
        DELETE TABLE TABLE_NAME; 删记录  
    7. 修改表结构 
        增加列 
            ALTER TABLE TABLE_NAME ADD COLUMN_NAME DATATYPE ;
            alter table gr_gz add sl varchar(4)
         删除列 
            ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME ;
            alter table gr_gz  drop column sl;
             删除列时,该列不能有数据。 
     修改列 
            ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME DATATYPE;
            alter table gr_gz modify sl varcher2(10)
            注意:修改列时,可以将已有类型转为新得类型,也可以扩大或者缩小原来得数据类型。当将已有类型转为新得类型时,表中 此字段不能有数,扩大可以不受影响,缩小时,表中得数据大小不能超过修改后得大小。 
         虚表 
            SELECT SYSDATE FROM DUAL; 
            select 5*7 from dual;
五、视图(由一个或者多个表建的视图) 
    1. 创建视图 
        CREATE OR REPLACE VIEW VIEW_NAME AS 
SELECT COLUMN1,COLUMN2,… FROM TABLE_NAME1 A, TABLE_NAME2 …  
    2. 删除视图 
        DROP VIEW VIEW_NAME
           例子:创建一个视图,可以查出工人的姓名和工人的工资 
        create or replace view v_gz as
        select a.grid.a.xm,b.gz 
        from gr_xx a,gr_gz b
        where a.grid=b.grid
六、数据查询 
         一般使用 select 语句进行查询 
       基本结构: 
       SELECT COLUMN1,COLUMN2, …    
       FROM TABLE_NAME 
             [WHERE CONDTION ]
             [GROUP BY COLUMN]
             [HAVING CONDITION] 
     [ORDER BY COLUMN] 
    1. 查询所有得列 
        SELECT * FROM TABLE_NAME [WHERE CONDTION]
        例子:查询工人信息表中 grid = ‘ 0001 ’ 的所有列的信息 
        select * from gr_xx where grid='0001'
    2. 查询指定的列 
        SELECT COLUMN1,COLUMN2,.. FROM TABLE_NAME [WHERE CONDITION] 
         例子: select grid,grxm from gr_xx where grid = ‘0001’ ;  
    3. 用被选择的列的别名来指定显示选择结果时的列名 
        SELECT COLUMN1 BYNAME1,COLUMN2 BYNAME2 FROM TABLE_NAME [WHERE]
        select grid,grxm,grgz from gr_xx where grid='0001';
    4. 在 select 语句中使用表达式 
        SELECT EXPRESSION FROM TABLE_NAME [WHERE ]
        select cgdz,300+100 from cg_xx ; 
    5.distinct 查关键字,消除冗余行 , 统计 
        SELECT DISTINCT(COLUMN) BYNAME FROM TABLE_NAME [WHERE CONDITION]
        例子:如果有两个记录的姓氏字段皆包含 Smith ,则下列 SQL 语句只返回包含 Smith 的记录 
        select distinct Smith from employees;
        如果省略 DISTINCT ,则查询将返回两个包含 Smith 的记录 
    6. where 子句 
        where 子句中常用的比较运算符 :<, >, <> , = ,!=,<= , >=
        常用的关系运算符 :in(val1,val2,…),between val1 and val2,like ‘%tin%’ 百分号表示零个或任意多个字符 _ 表示任意一个字符 
        select * from gr_xx where grid in (‘0001’,’0002’);
        select * from gr_xx where csrq between ’01-jan-1960’ and sysdate
        select * from gr_xx where grxm like ‘%y%’ ;
        组合查询条件 :and ,or ,not
        select * from gr_xx where csrq > 'june-01-1980' and xb=' 男 ';
        select * from gr_xx where csrq > 'june-01-1980' or xb=' 男 ';
        select * from gr_xx where grid not in('0001','0002');
    7.order by 排序子句 
        按照定义字段的顺序显示查询结果 
        Select * from gr_gz order by gz;
        Asc 正序排列(由低到高)   Desc 倒序排列 
        select * from gr_gz order by gz desc;
    8.Group by having 分组函数 
        分组函数包括: max,min,avg,sum,conunt
        having 与 where 的区别就在于 where 是执行前判断条件,而 having 则是在执行查询后判断条件 ;group by 后只能用 having 而不能用 where
        select grid,count(gz) from gr_gz
        group by grid 把 grid 相同的分成一组 
        having grid = ‘yang’; 取出的结果中包含 grid='yang'           
        select  xm , count(*) from gr_xx group by xm having count(*)>1 ; 取出有相同姓名的人 
    9. 查询的并 ( union ) 、交 (intersect) 、差 (minus) 操作 
        union 去掉重复记录, union all 全部保留 ( 按照缺省规定,使用 UNION 运算时不返回重复的记录;然而,可以包含 ALL 谓词来确保返回所有的记录 )
        select grid from gr_xx where xb=’ 男 ’  intersect select grid from gr_gz where gz > 400 ;
    10. 连接查询 
        利用两个表的相关列之间的比较关系,控制个表中的行的组合。从多个表中查询数据   
        A. 等值连接 ‘ = ’ 
        select a.grid,a.xm,b.gz from gr_xx a gr_gz b where a.grid=b.grid;
        B. 非等值连接 
        select a.grid,a.xm,b.gz from gr_xx a gr_gz b where a.grid='0001'and b.gz>'2000';
        C. 自连接查询:与本表进行连接查询
    select a.grid from gr_xx a,gr_xx b  where a.grid=b.xm;
        CREATE TABLE GR_jl(
        GRID
        ,MGR
        )
        /
        select a.grid,b.grid from gr_jl a, gr_jl b where a.mgr = b.grid ;
        D.外连接:使用后,可以返回两个表中相匹配的行,(+)跟在从表的列后。没有匹配的数据为NULL
    select a.id, b.id, from dept a, emp b;
        a.id     b.id
        1         2
        2         2
        3         4
        where a.id(+) = b.id
        1         2
        2         2
                   4
        where a.id = b.id(+)
        1         2
        2         2
        3
    11. ORACLE 中的伪列
    ROWNUM ,ROWID 每个表中都有的列
    Select * from gr_xx where rownum < 10 ;
    12.嵌套查询:在select语句中,还存在另一个select语句,叫嵌套查询
    Select * from gr_xx 
        Where grid in ( select grid from gr_gz where gz >300 );
        exists 的应用
    Select count(1) from dual where exists (select 1 from Gr_xx where grid = ‘yang’);
    13.||连接符
    select 'time is '||sysdate from dual;
七、序列发生器
  1.创建
    create sequence a start with 10000 ;
    2.使用
    currval
        nextval
        select a.currval from dual;