﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-天道:天道运而无所积，故万物成；-文章分类-Oracle PL/SQL</title><link>http://www.blogjava.net/beijingsoft/category/13376.html</link><description>致力于B/S商业软件快速开发框架平台建设</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 16:36:18 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 16:36:18 GMT</pubDate><ttl>60</ttl><item><title>Transact_SQL小手册,适合初学者</title><link>http://www.blogjava.net/beijingsoft/articles/61426.html</link><dc:creator>无为</dc:creator><author>无为</author><pubDate>Wed, 02 Aug 2006 16:10:00 GMT</pubDate><guid>http://www.blogjava.net/beijingsoft/articles/61426.html</guid><wfw:comment>http://www.blogjava.net/beijingsoft/comments/61426.html</wfw:comment><comments>http://www.blogjava.net/beijingsoft/articles/61426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beijingsoft/comments/commentRss/61426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beijingsoft/services/trackbacks/61426.html</trackback:ping><description><![CDATA[
		<p>*******************Transact_SQL********************</p>
		<p>--语 句                                功 能<br />--数据操作<br />SELECT      --从数据库表中检索数据行和列<br />INSERT      --向数据库表添加新数据行<br />DELETE      --从数据库表中删除数据行<br />UPDATE      --更新数据库表中的数据<br />--数据定义<br />CREATE TABLE    --创建一个数据库表<br />DROP TABLE     --从数据库中删除表<br />ALTER TABLE     --修改数据库表结构<br />CREATE VIEW     --创建一个视图<br />DROP VIEW     --从数据库中删除视图<br />CREATE INDEX    --为数据库表创建一个索引<br />DROP INDEX     --从数据库中删除索引<br />CREATE PROCEDURE   --创建一个存储过程<br />DROP PROCEDURE    --从数据库中删除存储过程<br />CREATE TRIGGER    --创建一个触发器<br />DROP TRIGGER    --从数据库中删除触发器<br />CREATE SCHEMA    --向数据库添加一个新模式<br />DROP SCHEMA     --从数据库中删除一个模式<br />CREATE DOMAIN    --创建一个数据值域<br />ALTER DOMAIN    --改变域定义<br />DROP DOMAIN     --从数据库中删除一个域<br />--数据控制<br />GRANT      --授予用户访问权限<br />DENY      --拒绝用户访问<br />REVOKE      --解除用户访问权限<br />--事务控制<br />COMMIT      --结束当前事务<br />ROLLBACK     --中止当前事务<br />SET TRANSACTION    --定义当前事务数据访问特征<br />--程序化SQL<br />DECLARE      --为查询设定游标<br />EXPLAN      --为查询描述数据访问计划<br />OPEN      --检索查询结果打开一个游标<br />FETCH      --检索一行查询结果<br />CLOSE      --关闭游标<br />PREPARE      --为动态执行准备SQL 语句<br />EXECUTE      --动态地执行SQL 语句<br />DESCRIBE     --描述准备好的查询</p>
		<p>---局部变量<br />declare @id char(10)<br />--set @id = '10010001'<br />select @id = '10010001'</p>
		<p>---全局变量<br />---必须以@@开头</p>
		<p>--IF ELSE<br />declare @x int @y int @z int<br />select @x = 1 @y = 2 @z=3<br />if @x &gt; @y<br /> print 'x &gt; y' --打印字符串'x &gt; y'<br />else if @y &gt; @z<br /> print 'y &gt; z'<br />else print 'z &gt; y'</p>
		<p>--CASE<br />use pangu<br />update employee<br />set e_wage =<br /> case<br />  when job_level = ’1’ then e_wage*1.08<br />  when job_level = ’2’ then e_wage*1.07<br />  when job_level = ’3’ then e_wage*1.06<br />  else e_wage*1.05<br /> end</p>
		<p>--WHILE CONTINUE BREAK<br />declare @x int @y int @c int<br />select @x = 1 @y=1<br />while @x &lt; 3<br /> begin<br />  print @x --打印变量x 的值<br />  while @y &lt; 3<br />   begin<br />    select @c = <a href="mailto:100*@x">100*@x</a> + @y<br />    print @c --打印变量c 的值<br />    select @y = @y + 1<br />   end<br />  select @x = @x + 1<br />  select @y = 1<br /> end</p>
		<p>--WAITFOR<br />--例 等待1 小时2 分零3 秒后才执行SELECT 语句<br />waitfor delay ’01:02:03’<br />select * from employee<br />--例 等到晚上11 点零8 分后才执行SELECT 语句<br />waitfor time ’23:08:00’<br />select * from employee</p>
		<p> </p>
		<p>***SELECT***</p>
		<p>   select *(列名) from table_name(表名) where column_name operator value<br />   ex:(宿主)<br />  select * from stock_information where stockid   = str(nid)<br />     stockname = 'str_name' <br />     stockname like '% find this %' <br />     stockname like '[a-zA-Z]%' --------- ([]指定值的范围)<br />     stockname like '[^F-M]%'   --------- (^排除指定范围)<br />     --------- 只能在使用like关键字的where子句中使用通配符)<br />     or stockpath = 'stock_path'<br />     or stocknumber &lt; 1000<br />     and stockindex = 24<br />     not stocksex = 'man'<br />     stocknumber between 20 and 100<br />     stocknumber in(10,20,30)<br />     order by stockid desc(asc) --------- 排序，desc-降序，asc-升序<br />     order by 1,2 --------- by列号<br />     stockname = (select stockname from stock_information  where stockid  = 4)<br />     --------- 子查询<br />     --------- 除非能确保内层select只返回一个行的值，<br />     --------- 否则应在外层where子句中用一个in限定符<br />  select distinct column_name form table_name --------- distinct指定检索独有的列值，不重复<br />  select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name<br />  select stockname , "stocknumber" = count(*) from table_name group by stockname<br />                                      --------- group by 将表按行分组,指定列中有相同的值<br />          having count(*) = 2  ---------  having选定指定的组<br />        <br />  select * <br />  from table1, table2                  <br />  where table1.id *= table2.id -------- 左外部连接，table1中有的而table2中没有得以null表示<br />     table1.id =* table2.id -------- 右外部连接 </p>
		<p>  select stockname from table1<br />  union [all]  -----  union合并查询结果集，all-保留重复行<br />  select stockname from table2</p>
		<p>***insert***</p>
		<p>  insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")<br />              value (select Stockname , Stocknumber from Stock_table2)---value为select语句</p>
		<p>***update***</p>
		<p>  update table_name set Stockname = "xxx" [where Stockid = 3]<br />         Stockname = default<br />         Stockname = null<br />         Stocknumber = Stockname + 4</p>
		<p>***delete***</p>
		<p>  delete from table_name where Stockid = 3<br />  truncate table_name ----------- 删除表中所有行，仍保持表的完整性<br />  drop table table_name --------------- 完全删除表</p>
		<p>***alter table*** --- 修改数据库表结构</p>
		<p>  alter table database.owner.table_name add column_name char(2) null .....<br />  sp_help table_name ---- 显示表已有特征<br />  create table table_name (name char(20), age smallint, lname varchar(30))<br />  insert into table_name select ......... ----- 实现删除列的方法（创建新表）<br />  alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束<br />    <br />***function(/*常用函数*/)***</p>
		<p>----统计函数----<br />AVG    --求平均值<br />COUNT   --统计数目<br />MAX    --求最大值<br />MIN    --求最小值<br />SUM    --求和</p>
		<p>--AVG<br />use pangu<br />select avg(e_wage) as dept_avgWage<br />from employee<br />group by dept_id</p>
		<p>--MAX<br />--求工资最高的员工姓名<br />use pangu<br />select e_name<br />from employee<br />where e_wage =<br /> (select max(e_wage)<br />  from employee)</p>
		<p>--STDEV()<br />--STDEV()函数返回表达式中所有数据的标准差</p>
		<p>--STDEVP()<br />--STDEVP()函数返回总体标准差</p>
		<p>--VAR()<br />--VAR()函数返回表达式中所有值的统计变异数</p>
		<p>--VARP()<br />--VARP()函数返回总体变异数</p>
		<p>----算术函数----</p>
		<p>/***三角函数***/<br />SIN(float_expression) --返回以弧度表示的角的正弦<br />COS(float_expression) --返回以弧度表示的角的余弦<br />TAN(float_expression) --返回以弧度表示的角的正切<br />COT(float_expression) --返回以弧度表示的角的余切<br />/***反三角函数***/<br />ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角<br />ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角<br />ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角<br />ATAN2(float_expression1,float_expression2) <br />        --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角<br />DEGREES(numeric_expression)<br />                       --把弧度转换为角度返回与表达式相同的数据类型可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />EXP(float_expression)  --返回表达式的指数值<br />LOG(float_expression)  --返回表达式的自然对数值<br />LOG10(float_expression)--返回表达式的以10 为底的对数值<br />SQRT(float_expression) --返回表达式的平方根<br />/***取近似值函数***/<br />CEILING(numeric_expression)  --返回&gt;=表达式的最小整数返回的数据类型与表达式相同可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />FLOOR(numeric_expression)    --返回&lt;=表达式的最小整数返回的数据类型与表达式相同可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />ROUND(numeric_expression)    --返回以integer_expression 为精度的四舍五入值返回的数据<br />        --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<br />ABS(numeric_expression)      --返回表达式的绝对值返回的数据类型与表达式相同可为<br />        --INTEGER/MONEY/REAL/FLOAT 类型<br />SIGN(numeric_expression)     --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型<br />        --与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<br />PI()       --返回值为π 即3.1415926535897936<br />RAND([integer_expression])   --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数</p>
		<p>
				<br />----字符串函数----<br />ASCII()         --函数返回字符表达式最左端字符的ASCII 码值<br />CHAR()   --函数用于将ASCII 码转换为字符<br />    --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值<br />LOWER()   --函数把字符串全部转换为小写<br />UPPER()   --函数把字符串全部转换为大写<br />STR()   --函数把数值型数据转换为字符型数据<br />LTRIM()   --函数把字符串头部的空格去掉<br />RTRIM()   --函数把字符串尾部的空格去掉<br />LEFT(),RIGHT(),SUBSTRING()  --函数返回部分字符串<br />CHARINDEX(),PATINDEX()  --函数返回字符串中某个指定的子串出现的开始位置<br />SOUNDEX()  --函数返回一个四位字符码 <br />    --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值     <br />DIFFERENCE()    --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异<br />    --0 两个SOUNDEX 函数返回值的第一个字符不同<br />    --1 两个SOUNDEX 函数返回值的第一个字符相同<br />    --2 两个SOUNDEX 函数返回值的第一二个字符相同<br />    --3 两个SOUNDEX 函数返回值的第一二三个字符相同<br />    --4 两个SOUNDEX 函数返回值完全相同<br />                                       </p>
		<p>QUOTENAME()  --函数返回被特定字符括起来的字符串<br />/*select quotename('abc', '{') quotename('abc')<br />运行结果如下<br />----------------------------------{<br />{abc} [abc]*/</p>
		<p>REPLICATE()     --函数返回一个重复character_expression 指定次数的字符串<br />/*select replicate('abc', 3) replicate( 'abc', -2)<br />运行结果如下<br />----------- -----------<br />abcabcabc NULL*/</p>
		<p>REVERSE()       --函数将指定的字符串的字符排列顺序颠倒<br />REPLACE()       --函数返回被替换了指定子串的字符串<br />/*select replace('abc123g', '123', 'def')<br />运行结果如下<br />----------- -----------<br />abcdefg*/</p>
		<p>SPACE()   --函数返回一个有指定长度的空白字符串<br />STUFF()   --函数用另一子串替换字符串指定位置长度的子串</p>
		<p>
				<br />----数据类型转换函数----<br />CAST() 函数语法如下<br />CAST() (&lt;expression&gt; AS &lt;data_ type&gt;[ length ])<br />CONVERT() 函数语法如下<br />CONVERT() (&lt;data_ type&gt;[ length ], &lt;expression&gt; [, style])</p>
		<p>select cast(100+99 as char) convert(varchar(12), getdate())<br />运行结果如下<br />------------------------------ ------------<br />199   Jan 15 2000</p>
		<p>----日期函数----<br />DAY()   --函数返回date_expression 中的日期值<br />MONTH()   --函数返回date_expression 中的月份值<br />YEAR()   --函数返回date_expression 中的年份值<br />DATEADD(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;) <br />    --函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期<br />DATEDIFF(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;)<br />    --函数返回两个指定日期在datepart 方面的不同之处<br />DATENAME(&lt;datepart&gt; , &lt;date&gt;)  --函数以字符串的形式返回日期的指定部分<br />DATEPART(&lt;datepart&gt; , &lt;date&gt;)  --函数以整数值的形式返回日期的指定部分<br />GETDATE()  --函数以DATETIME 的缺省格式返回系统当前的日期和时间</p>
		<p>----系统函数----<br />APP_NAME()      --函数返回当前执行的应用程序的名称<br />COALESCE()  --函数返回众多表达式中第一个非NULL 表达式的值<br />COL_LENGTH(&lt;'table_name'&gt;, &lt;'column_name'&gt;) --函数返回表中指定字段的长度值<br />COL_NAME(&lt;table_id&gt;, &lt;column_id&gt;)   --函数返回表中指定字段的名称即列名<br />DATALENGTH() --函数返回数据表达式的数据的实际长度<br />DB_ID(['database_name']) --函数返回数据库的编号<br />DB_NAME(database_id)  --函数返回数据库的名称<br />HOST_ID()     --函数返回服务器端计算机的名称<br />HOST_NAME()     --函数返回服务器端计算机的名称<br />IDENTITY(&lt;data_type&gt;[, seed increment]) [AS column_name])<br /> --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中<br />/*select identity(int, 1, 1) as column_name<br /> into newtable<br /> from oldtable*/<br />ISDATE()  --函数判断所给定的表达式是否为合理日期<br />ISNULL(&lt;check_expression&gt;, &lt;replacement_value&gt;) --函数将表达式中的NULL 值用指定值替换<br />ISNUMERIC()  --函数判断所给定的表达式是否为合理的数值<br />NEWID()   --函数返回一个UNIQUEIDENTIFIER 类型的数值<br />NULLIF(&lt;expression1&gt;, &lt;expression2&gt;)<br /> --NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值</p>
<img src ="http://www.blogjava.net/beijingsoft/aggbug/61426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beijingsoft/" target="_blank">无为</a> 2006-08-03 00:10 <a href="http://www.blogjava.net/beijingsoft/articles/61426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>