恋恋冬季

有你的冬天很温暖

与SQL语言有关

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;
       

 






 

posted on 2006-12-07 16:01 恋恋冬季 阅读(678) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问