正文

[Oracle]Oracle学习笔记--SQL查询和SQL函数2006-08-11 18:31:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/fengfei/17494.html

分享到:

 

一: SQL简介

SQL是Structured Query Language(结构化查询语言)。SQL是由IBM在二十世纪七十年代初开发的。 SQL是数据库语言,Oracle使用该语言存储和检索消息。

通过SQL可以与Oracle服务器实现通信: 输入SQL命令--> 将SQL命令发送到Oracle服务器-->Oracle服务器执行该命令-->将查询结果发送给用户

SQL是所有关系型数据库通用语言,因此他是可以移植的,可以用来操作其他数据库。

二: SQL命令

SQL 支持4大类型命令:

数据定义语言(DDL): Create(创建), Alter(更改), Drop(删除).

数据操纵语言(DML): Select(选择), Insert(插入), Update(更新), Delete(删除).

事务控制语言(TCL) : Commit(提交), Rollback(回滚), Savepint(保存点).

数据控制语言(DCL) : Grant(授予), Revoke(回收).

 

A: 数据定义语言: 用于改变数据库结构,包括创建,修改,删除数据库对象

         创建表:

         Create Table 表名 ( 列名 列类型, 列名 列类型, …… )

        例: Create Table vendor_master( vencode Varchar2(5), venname Varchar2(20) )

        修改表:

        Alter Table 表名 Modify | Add ( 列名 列定义 )

                  Modify: 修改列。    Add: 增加列。

        例: Alter Table vendor_master Modify ( vencode Varchar2( 10 ) )

                  Alter Table vendor_master Add ( venAdd Varchar2(20) )

        Alter Table 表名 Drop Column 列名

                  Drop 删除列。

        例: Alter Table vendor_master Drop Column venAdd

        删除表:

        Drop Table 表名

        例: Drop Table vendor_master

B:数据操纵语言: 用于检索,插入和修改数据库信息。

       Select 选择查询:

       查询符合条件的所有表字段:

       Select * From 表名 Where 列名 = 条件

       例:Select * From vendor_master Where vencode = 'V004'

       查询符合条件的表的可选择字段:

       Select 列名,列名,…… From 表名 Where 列名 = 条件

       例:Select venname, venadd Where vencode = 'V004'

       查询无重复的行:

       在Select 后加Distinct就可以了

       列:Select Distinct * From vendor_mastor

       查询并排序显示查询结果:

       Select * From 表名 Order By 排序列名,排序列名,……

       例:Select * From vendor_master Order By vencode    -- 按一列来排序

               Select * From vendor_master Order By vencode, venadd   -- 按多列来排序  

       Select 语句的总语法:

       Select * | {[Distinct] 列名,列名,…… } From Table

       [Where 条件]

       [Order By 列名,列名,……]

       其中用[ ]这个符号括起来的表示是可以选择写不写的。

 

       Insert 插入:

       插入一个表的所有列:

       Insert Into 表名 Values ( 列值,列值,…… )

       例:Insert Into vendor_master Values ( 'V001', 'Pro', '长沙' )

       选择性插入表中的列:

       Insert Into 表名 ( 列名,列名,…… ) Values( 列值,列值,…… )

       例:Insert Into vendor_master ( vencode, venname ) Values( 'V002', 'Wind' )

       注:未选择插入值的列将以NULL空值插入。

       跳过列插值:

       跳过一个或多个列的方式是为该列输入NULL空值

       Select * From vendor_master Values( 'V003', NULL, '长沙' )

       插入来自其他表的所有记录:

       Insert Into 表名 Select *  From 表名     

       例:Insert Into order_master Select * From vendor_master

       选择列插入来自其他表的记录:

       Insert Into 表名 Select| 列名,列名,…… From 表名

       例:Insert Into order_master Select vencode, venname From vendor_master

       按条件插入来自其他表的所有记录:

       Insert Into 表名 Select *  From 表名 Where 表名.列名

       例:Insert Into order_master Select * From vendor_master Where   vendor_master.vencode = 'V002'

     Update 更新:

     按条件更新一列或多列:

     Update 表名 Set 列名 = 更新值,列名 = 更新值,……

     Where 列名 = 条件

     Update vendor_master Set venname = 'kof' Where vencode = 'V001'

     更新所有行:

     Update 表名 Set 列名 = 更新值,列名 = 更新值,……

                  Update vendor_master Set venname = 'kof'

       Delete 删除:

     Delete From 表名 Where 列名=条件

     例:Delete From vendor_master    -- 删除表所有记录

     例:Delete From vendor_master Where vencode = 'V001'  -- 选择删除

 

C:事务控制语言:

        当用户执行创建,删除,修改数据库对象或插入,删除,修改数据库表时,    用户所做的数据修改会被保存在数据缓冲区中,此时用户所做的数据库修改并没有真正的修改了数据库,只有在用执行Commit(提交)命令后才真正的修改了数据库, 如果想不修改数据库,则可以执行Rollback(回滚)命令则刚刚执行的修改不会修改数据库。

        如: 当你用Insert 命令插入一条记录时,此时这条记录是保存在数据缓冲区中的,并没有真正保存到数据库中,数据库中不会有这条记录(不信你可以以另一个用户登陆然后查询插入的表,会发现无次记录), 如果你执行了Commit(提交)命令后, 才会将缓冲区的数据保存到数据库里, 既真正的修改了数据库(以另一个用户登陆可以查询到插入的记录), 如果执行Rollback(回滚)命令则会把存在缓冲区中的数据给删除掉,既用户的修改作废(如果执行Commit命令则不能回滚了)。  可以利用Savepoint(保存点)进行选择性的回滚。

例: Insert Into vendor_master Values( 'V007', 'Kof', '长沙' )

          Savepoint insert_mark     -- 保存点

          Update vendor_master Set venname = 'aaa' Where vencode = 'V007'

          Savepoint update_mark     -- 保存点

          Delete From vendor_master Where vencode = 'V007'

执行以上代码,以上所修改的数据会先保存在数据缓冲区中,当执行Commit则将所做的数据修改保存到数据库中。 当执行Rollback时则删除保存在数据缓冲区中的记录(既插入,更新,删除操作作废)。  如果只想删除作废,则可执行:Rollback To Savepoint update_mark           如果想删除,更新作废,则可执行:Rollback To Savepoint insert_mark       如果想插入,更新,删除作废,则可:Rollback

注: 此事务处理机制只有在Oracle中才必须需要用户手动控制, 在SQL2000中默认情况它会隐性控制(既用户不需要自己执行Commit命令来提交,他自动执行), 当然在SQL2000中也支持自己控制。

 

D:数据控制语言:用于为用户提供权限控制。

       在前面将过,所以不重复了。

 

三:SQL函数(常用函数)

        Oracle 将函数分为2大类:单行函数和分组函数

 

        单行函数又分为5大类

                   A:日期函数        B:字符函数        C:数字函数

                   D:转换函数        E:其他函数

        A:日期函数

                Round函数:返回日期,此日期四舍五入为格式模型指定的单位。

                格式为: Round( 日期, [格式模型] )

                格式为“Year”,如果日期大于7月1日将入为下一个年份。反之则舍为1月1日

                例: Select Round( DATE'2005-05-10', 'Year' ), Round( DATE'2005-07-10', 'Year' ) From dual

                结果为: 2005-01-01   和 2006-01-01.

                格式为“Month”,如果日期大于15则入为下一月份,反之则舍为此月1日

                例: Select Round( DATE'2005-05-10', Month), Round( DATE'2005-05-20', Month) From dual

                结果为: 2005-05-01  和  2005-06-01

 

         B:字符函数

                Instr 函数: 查找某字符位置

                InStr( 字符串, 字符 )

                例: Select InStr( 'worldwide', 'd' ) From dual

                结果: 5

                SubStr函数: 按位置去多个字符

                SubStr( 字符串, 起始位置, 取几个 )

                例: Select SubStr( 'abcdefg', 3, 2 )

                结果: cd

                Trim 函数:从字符串开头或结尾(或开头和结尾)剪裁特定的字符,默认裁减空格

                裁减左边开头字符:

                Trim ( Leading 裁减的字符  From 字符串 )

                例:Select Trim( Leading 9 From 9999876549999 ) From dual

                结果: 876549999

                裁减右边开头字符:

                Trim ( Trailing 裁减的字符  From 字符串 )   

                例:Select Trim( Trailing 9 From 9999876549999 ) From dual

                结果: 999987654

                裁减左边和右边字符:

                Trim ( 裁减的字符  From 字符串 )   

                例:Select Trim( 9 From 9999876549999 ) From dual

                结果: 87654

     Decode 函数:将值进行替换

Select Decode ( 比较列名, 比较值, 替换值, 比较值2, 替换值2,…… ) From 表名

例:Select venname, Decode( vencode, '001', 'aaa', '002', 'bbb', '003', 'ccc' ) From vendor_master

结果:Pro      aaa

           Wind    bbb

            Kof      ccc

            Fly       004

注: 001, 002, 003被aaa,bbb,ccc替换

 

C:数字函数:

        ABS 函数: 去绝对值

        ABS( n )

        例: Select ABS( -15 ) From dual

        结果: 15

        FLOOR 函数: 向下取整

        FLOOR( n )

        例: Select FLOOR( 100.2 ) From dual

        结果:100

        Power 函数: m的n次幂

        Power( m, n )

        例: Select Power( 4,2 ) From dual

        结果: 16

        Mod 函数: 取m 除 n 的余数

        Mod( m, n )

        例: Select Mod( 10, 3 ) From dual

        结果: 1

        Round 函数: 四舍五入

        Round( m, n )

        例: Select Round( 100.256 , 2 ) From dual

        结果: 100.26

        Trunc 函数: 截断

        Trunc( m, n )

        例: Select Trunc( 100.256, 2 ) From dual

        结果: 100.25

        Sqrt 函数: 平方根

        Sqrt( n )

        例: Select Sqrt( 4 ) From dual

        结果: 2


 D:转换函数

  To_Char 函数: 将数字或日期转换为字符串.

  To_Char( 数字或日期,转换格式 )

        例:Select To_Char ( sysdate, ' YYYY "年" fmMM "月" fmDD "日" HH24:MI:SS' ) From dual

         结果: 2005年8月25日 16:02:10

        例:Select To_Char( '150', 'C999' ) From dual    -- 按货币格式转换

        结果: CHY150

        To_Date 函数: 将字符或字符串转换为日期

  例:Select To_Date ( '2005-01-03', 'YYYY-MM-DD' ) From dual

        结果:2005-01-03 (日期类型)

    To_Number 函数: 将包含数字的字符串转换为Numer数字类型

        例:Select Sqrt( To_Number( '100' ) ) From dual

        结果:10

E:其他函数

  注:NULL和0不同,NULL表示为空(未知),0表示为0(以知)

        NVL 函数: 将空值替换为指定的值.

  NVL ( exp1, exp2 )

    如果exp1为空,则返回exp2, 反之返回exp1.

        例:Select NVL( NULL, 0 ), NVL( 'aa', 1 ) From dula

        结果: 0  和  aa

        NVL2 函数: 将空值替换为指定的值.

  NVL 2( exp1, exp2, exp3 )

    如果exp1为空,则返回exp2, 反之返回exp3.

        例:Select NVL( NULL, 0, 1 ), NVL( 'aa', 0, 1 ) From dula

        结果: 0  和  1      

 

分组函数(又叫聚合函数):

        Avg 函数:返回指定列的平均值

  例:Select Avg( price ) From itemfile

        结果:返回所有行price值的和的平均值.

        Min 函数:返回指定列的最小值

  例:Select Min( price ) From itemfile

        Max 函数:返回指定列的最大值

  例:Select Max( price ) From itemfile

        Sum 函数:返回指定列的值的总和

  例:Select Sum( price ) From itemfile

        Count 函数:返回指定列的行树,可加条件

  例:Select Count( price ) From itemfile

        Group By 字句:将信息分组,按组进行聚合运算.

  例:Select p_category, Max( itemrate ) From itemfile Group By p_category

        结果:按p_category分组,并显示出每组的最大的itemrate.

  Having 字句:用来指定Group By 字句的检索条件,位于Group By 后面

  例:Select p_category, Max( itemrate ) From itemfile Group By p_category Having p_category Not In ( 'accessories' );

        结果:按p_category分组,且p_category不等于accessories,然后显示出每组的最大的itemrate.

 

  PS:写了一大半时,不知怎的,突然页面自动跳到另一个网页,晕.. 全部没有.

    不过幸好保存了一点,不然......  不过还是掉了很多,排版格式也得      

    重搞. 郁闷啊..

阅读(9283) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册