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

评论