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