正文

[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:写了一大半时,不知怎的,突然页面自动跳到另一个网页,晕.. 全部没有.     不过幸好保存了一点,不然......  不过还是掉了很多,排版格式也得           重搞. 郁闷啊..

阅读(9499) | 评论(4)


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

评论

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