﻿<?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-Linden.zhang-文章分类-SQL</title><link>http://www.blogjava.net/linden/category/23058.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 05 Jun 2007 11:45:18 GMT</lastBuildDate><pubDate>Tue, 05 Jun 2007 11:45:18 GMT</pubDate><ttl>60</ttl><item><title>常用 SQL 语句（2）</title><link>http://www.blogjava.net/linden/articles/120452.html</link><dc:creator>Linden.zhang</dc:creator><author>Linden.zhang</author><pubDate>Mon, 28 May 2007 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/linden/articles/120452.html</guid><wfw:comment>http://www.blogjava.net/linden/comments/120452.html</wfw:comment><comments>http://www.blogjava.net/linden/articles/120452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/linden/comments/commentRss/120452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/linden/services/trackbacks/120452.html</trackback:ping><description><![CDATA[<p>一、基础</p>
<p>1、说明：创建数据库<br>CREATE DATABASE database-name <br>2、说明：删除数据库<br>drop database dbname<br>3、说明：备份sql server<br>--- 创建 备份数据的 device<br>USE master<br>EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'<br>--- 开始 备份<br>BACKUP DATABASE pubs TO testBack <br>4、说明：创建新表<br>create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)<br>根据已有的表创建新表： <br>A：create table tab_new like tab_old (使用旧表创建新表)<br>B：create table tab_new as select col1,col2&#8230; from tab_old definition only<br>5、说明：删除新表<br>drop table tabname <br>6、说明：增加一个列<br>Alter table tabname add column col type<br>注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br>7、说明：添加主键： Alter table tabname add primary key(col) <br>说明：删除主键： Alter table tabname drop primary key(col) <br>8、说明：创建索引：create [unique] index idxname on tabname(col&#8230;.) <br>删除索引：drop index idxname<br>注：索引是不可更改的，想更改必须删除重新建。<br>9、说明：创建视图：create view viewname as select statement <br>删除视图：drop view viewname<br>10、说明：几个简单的基本的sql语句<br>选择：select * from table1 where 范围<br>插入：insert into table1(field1,field2) values(value1,value2)<br>删除：delete from table1 where 范围<br>更新：update table1 set field1=value1 where 范围<br>查找：select * from table1 where field1 like &#8217;%value1%&#8217; ---like的语法很精妙，查资料!<br>排序：select * from table1 order by field1,field2 [desc]<br>总数：select count as totalcount from table1<br>求和：select sum(field1) as sumvalue from table1<br>平均：select avg(field1) as avgvalue from table1<br>最大：select max(field1) as maxvalue from table1<br>最小：select min(field1) as minvalue from table1<br>11、说明：几个高级查询运算词<br>A： UNION 运算符 <br>UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 <br>B： EXCEPT 运算符 <br>EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。 <br>C： INTERSECT 运算符<br>INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。 <br>注：使用运算词的几个查询结果行必须是一致的。 <br>12、说明：使用外连接 <br>A、left outer join： <br>左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。 <br>SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br>B：right outer join: <br>右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。 <br>C：full outer join： <br>全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。</p>
<p>二、提升</p>
<p>1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用)<br>法一：select * into b from a where 1&lt;&gt;1<br>法二：select top 0 * into b from a <br>2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<br>insert into b(a, b, c) select d,e,f from b;</p>
<p>3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)<br>insert into b(a, b, c) select d,e,f from b in &#8216;具体数据库&#8217; where 条件<br>例子：..from b in '"&amp;Server.MapPath(".")&amp;"\data.mdb" &amp;"' where..</p>
<p>4、说明：子查询(表名1：a 表名2：b)<br>select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)</p>
<p>5、说明：显示文章、提交人和最后回复时间<br>select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b</p>
<p>6、说明：外连接查询(表名1：a 表名2：b)<br>select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c</p>
<p>7、说明：在线视图查询(表名1：a )<br>select * from (SELECT a,b,c FROM a) T where t.a &gt; 1;</p>
<p>8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括<br>select * from table1 where time between time1 and time2<br>select a,b,c, from table1 where a not between 数值1 and 数值2</p>
<p>9、说明：in 的使用方法<br>select * from table1 where a [not] in (&#8216;值1&#8217;,&#8217;值2&#8217;,&#8217;值4&#8217;,&#8217;值6&#8217;)</p>
<p>10、说明：两张关联表，删除主表中已经在副表中没有的信息 <br>delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )</p>
<p>11、说明：四表联查问题：<br>select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....</p>
<p>12、说明：日程安排提前五分钟提醒 <br>SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5</p>
<p>13、说明：一条sql 语句搞定数据库分页<br>select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段</p>
<p>14、说明：前10条记录<br>select top 10 * form table1 where 范围</p>
<p>15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br>select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)</p>
<p>16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表<br>(select a from tableA ) except (select a from tableB) except (select a from tableC)</p>
<p>17、说明：随机取出10条数据<br>select top 10 * from tablename order by newid()</p>
<p>18、说明：随机选择记录<br>select newid()</p>
<p>19、说明：删除重复记录<br>Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)</p>
<p>20、说明：列出数据库里所有的表名<br>select name from sysobjects where type='U' </p>
<p>21、说明：列出表里的所有的<br>select name from syscolumns where id=object_id('TableName')</p>
<p>22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select 中的case。<br>select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type<br>显示结果：<br>type vender pcs<br>电脑 A 1<br>电脑 A 1<br>光盘 B 2<br>光盘 A 2<br>手机 B 3<br>手机 C 3</p>
<p>23、说明：初始化表table1</p>
<p>TRUNCATE TABLE table1</p>
<p>24、说明：选择从10到15的记录<br>select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc</p>
<p>三、技巧</p>
<p>1、1=1，1=2的使用，在SQL语句组合时用的较多</p>
<p>&#8220;where 1=1&#8221; 是表示选择全部&nbsp;&nbsp; &#8220;where 1=2&#8221;全部不选，<br>如：<br>if @strWhere !='' <br>begin<br>set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere <br>end<br>else <br>begin<br>set @strSQL = 'select count(*) as Total from [' + @tblName + ']' <br>end </p>
<p>我们可以直接写成<br>set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere </p>
<p>2、收缩数据库<br>--重建索引<br>DBCC REINDEX<br>DBCC INDEXDEFRAG<br>--收缩数据和日志<br>DBCC SHRINKDB<br>DBCC SHRINKFILE</p>
<p>3、压缩数据库<br>dbcc shrinkdatabase(dbname)</p>
<p>4、转移数据库给新用户以已存在用户权限<br>exec sp_change_users_login 'update_one','newname','oldname'<br>go</p>
<p>5、检查备份集<br>RESTORE VERIFYONLY from disk='E:\dvbbs.bak'</p>
<p>6、修复数据库<br>ALTER DATABASE [dvbbs] SET SINGLE_USER<br>GO<br>DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK<br>GO<br>ALTER DATABASE [dvbbs] SET MULTI_USER<br>GO</p>
<p>7、日志清除<br>SET NOCOUNT ON<br>DECLARE @LogicalFileName sysname,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @MaxMinutes INT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @NewSize INT</p>
<p><br>USE&nbsp;&nbsp;&nbsp;&nbsp; tablename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 要操作的数据库名<br>SELECT&nbsp; @LogicalFileName = 'tablename_log',&nbsp; -- 日志文件名<br>@MaxMinutes = 10,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Limit on time allowed to wrap log.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @NewSize = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 你想设定的日志文件的大小(M)</p>
<p>-- Setup / initialize<br>DECLARE @OriginalSize int<br>SELECT @OriginalSize = size <br>&nbsp; FROM sysfiles<br>&nbsp; WHERE name = @LogicalFileName<br>SELECT 'Original Size of ' + db_name() + ' LOG is ' + <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'<br>&nbsp; FROM sysfiles<br>&nbsp; WHERE name = @LogicalFileName<br>CREATE TABLE DummyTrans<br>&nbsp; (DummyColumn char (8000) not null)</p>
<p><br>DECLARE @Counter&nbsp;&nbsp; INT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @StartTime DATETIME,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @TruncLog&nbsp; VARCHAR(255)<br>SELECT&nbsp; @StartTime = GETDATE(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'</p>
<p>DBCC SHRINKFILE (@LogicalFileName, @NewSize)<br>EXEC (@TruncLog)<br>-- Wrap the log if necessary.<br>WHILE&nbsp;&nbsp;&nbsp;&nbsp; @MaxMinutes &gt; DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND (@OriginalSize * 8 /1024) &gt; @NewSize&nbsp; <br>&nbsp; BEGIN -- Outer loop.<br>&nbsp;&nbsp;&nbsp; SELECT @Counter = 0<br>&nbsp;&nbsp;&nbsp; WHILE&nbsp; ((@Counter &lt; @OriginalSize / 16) AND (@Counter &lt; 50000))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN -- update<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INSERT DummyTrans VALUES ('Fill Log')&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DELETE DummyTrans<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT @Counter = @Counter + 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; EXEC (@TruncLog)&nbsp; <br>&nbsp; END&nbsp;&nbsp; <br>SELECT 'Final Size of ' + db_name() + ' LOG is ' +<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONVERT(VARCHAR(30),size) + ' 8K pages or ' + <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'<br>&nbsp; FROM sysfiles <br>&nbsp; WHERE name = @LogicalFileName<br>DROP TABLE DummyTrans<br>SET NOCOUNT OFF </p>
<p>8、说明：更改某个表<br>exec sp_changeobjectowner 'tablename','dbo'</p>
<p>9、存储更改全部表</p>
<p>CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch<br>&nbsp;@OldOwner as NVARCHAR(128),<br>&nbsp;@NewOwner as NVARCHAR(128)<br>AS</p>
<p>DECLARE @Name&nbsp;&nbsp; as NVARCHAR(128)<br>DECLARE @Owner&nbsp; as NVARCHAR(128)<br>DECLARE @OwnerName&nbsp; as NVARCHAR(128)</p>
<p>DECLARE curObject CURSOR FOR <br>&nbsp;select 'Name'&nbsp;&nbsp; = name,<br>&nbsp; 'Owner'&nbsp;&nbsp; = user_name(uid)<br>&nbsp;from sysobjects<br>&nbsp;where user_name(uid)=@OldOwner<br>&nbsp;order by name</p>
<p>OPEN&nbsp; curObject<br>FETCH NEXT FROM curObject INTO @Name, @Owner<br>WHILE(@@FETCH_STATUS=0)<br>BEGIN&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;if @Owner=@OldOwner <br>&nbsp;begin<br>&nbsp; set @OwnerName = @OldOwner + '.' + rtrim(@Name)<br>&nbsp; exec sp_changeobjectowner @OwnerName, @NewOwner<br>&nbsp;end<br>-- select @name,@NewOwner,@OldOwner</p>
<p>&nbsp;FETCH NEXT FROM curObject INTO @Name, @Owner<br>END</p>
<p>close curObject<br>deallocate curObject<br>GO</p>
<p><br>10、SQL SERVER中直接循环写入数据<br>declare @i int<br>set @i=1<br>while @i&lt;30<br>begin<br>&nbsp;&nbsp; insert into test (userid) values(@i)<br>&nbsp;&nbsp; set @i=@i+1<br>end</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/linden/aggbug/120452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/linden/" target="_blank">Linden.zhang</a> 2007-05-28 15:02 <a href="http://www.blogjava.net/linden/articles/120452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用 SQL 语句（1）</title><link>http://www.blogjava.net/linden/articles/120450.html</link><dc:creator>Linden.zhang</dc:creator><author>Linden.zhang</author><pubDate>Mon, 28 May 2007 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/linden/articles/120450.html</guid><wfw:comment>http://www.blogjava.net/linden/comments/120450.html</wfw:comment><comments>http://www.blogjava.net/linden/articles/120450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/linden/comments/commentRss/120450.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/linden/services/trackbacks/120450.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: Times New Roman">SQL是结构化查询语言,查询是SQL语言的重要组成部分,但不是全部,SQL还包括数据定义,数据操纵和数据控制功能等部分.如今SQL已成为关系数据库的标准数据语言,所以现在的关系数据库管理系统都支持SQL.FOXPRO从2.5 FOR DOS版式就开始支持SQL,现在VISUAL FOXPRO当然在之方面更加完善,以下是VF经常用到SQL语句. <br>--语 句 功 能</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: Times New Roman">--数据操作<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 --描述准备好的查询 <br>---局部变量<br>declare @id char(10)<br>--set @id = 10010001<br>select @id = 10010001 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: Times New Roman">---全局变量<br>---必须以@@开头</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: Times New Roman"><br>--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 style="FONT-SIZE: 12pt; FONT-FAMILY: Times New Roman"><br>--CASE<br>use pangu<br>update employee<br>set e_wage =<br>case<br>when job_level = &#8217;1&#8217; then e_wage*1.08<br>when job_level = &#8217;2&#8217; then e_wage*1.07<br>when job_level = &#8217;3&#8217; then e_wage*1.06<br>else e_wage*1.05<br>end</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: Times New Roman"><br>--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="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#49;&#48;&#48;&#42;&#64;&#120;">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 style="FONT-SIZE: 12pt; FONT-FAMILY: Times New Roman"><br>--WAITFOR<br>--例 等待1 小时2 分零3 秒后才执行SELECT 语句<br>waitfor delay &#8217;01:02:03&#8217;<br>select * from employee<br>--例 等到晚上11 点零8 分后才执行SELECT 语句<br>waitfor time &#8217;23:08:00&#8217;<br>select * from employee<br><br><br>***SELECT***<br><br>　　select *(列名) from table_name(表名) where column_name operator value<br>　　ex:(宿主)<br>　　select * from stock_information where stockid = str(nid)<br>　　stockname = &#8216;str_name&#8216; <br>　　stockname like &#8216;% find this %&#8216; <br>　　stockname like &#8216;[a-zA-Z]%&#8216; --------- ([]指定值的范围)<br>　　stockname like &#8216;[^F-M]%&#8216; --------- (^排除指定范围)<br>　　--------- 只能在使用like关键字的where子句中使用通配符)<br>　　or stockpath = &#8216;stock_path&#8216;<br>　　or stocknumber &lt; 1000<br>　　and stockindex = 24<br>　　not stocksex = &#8216;man&#8216;<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 = <br>　　4)<br>　　--------- 子查询<br>　　--------- 除非能确保内层select只返回一个行的值，<br>　　--------- 否则应在外层where子句中用一个in限定符<br>　　select distinct column_name form table_name --------- <br>　　distinct指定检索独有的列值，不重复<br>　　select stocknumber ,stocknumber + 10 = stocknumber + 10 from <br>　　table_name<br>　　select stockname , stocknumber = count(*) from table_name group by <br>　　stockname<br>　　--------- group by 将表按行分组,指定列中有相同的值<br>　　having count(*) = 2 --------- having选定指定的组<br>　　select * <br>　　from table1, table2 <br>　　where table1.id *= table2.id -------- <br>　　左外部连接，table1中有的而table2中没有得以null表示<br>　　table1.id =* table2.id -------- 右外部连接 <br>　　select stockname from table1<br>　　union [all] ----- union合并查询结果集，all-保留重复行<br>　　select stockname from table2<br>　　***insert***<br>　　insert into table_name (Stock_name,Stock_number) value (xxx,xxxx)<br>　　value (select Stockname , Stocknumber from <br>　　Stock_table2)---value为select语句<br>　　***update***<br>　　update table_name set Stockname = xxx [where Stockid = 3]<br>　　Stockname = default<br>　　Stockname = null<br>　　Stocknumber = Stockname + 4<br>　　***delete***<br>　　delete from table_name where Stockid = 3<br>　　truncate table_name ----------- 删除表中所有行，仍保持表的完整性<br>　　drop table table_name --------------- 完全删除表<br>　　***alter table*** --- 修改数据库表结构<br>　　alter table database.owner.table_name add column_name char(2) null <br>　　.....<br>　　sp_help table_name ---- 显示表已有特征<br>　　create table table_name (name char(20), age smallint, lname <br>　　varchar(30))<br>　　insert into table_name select ......... ----- 实现删除列的方法（创建新表）<br>　　alter table table_name drop constraint Stockname_default ---- <br>　　删除Stockname的default约束<br>　　***function(/*常用函数*/)***<br>　　----统计函数----<br>　　AVG --求平均值<br>　　COUNT --统计数目<br>　　MAX --求最大值<br>　　MIN --求最小值<br>　　SUM --求和<br>　　--AVG<br>　　use pangu<br>　　select avg(e_wage) as dept_avgWage<br>　　from employee<br>　　group by dept_id<br>　　--MAX<br>　　--求工资最高的员工姓名<br>　　use pangu<br>　　select e_name<br>　　from employee<br>　　where e_wage =<br>　　(select max(e_wage)<br>　　from employee)<br>　　--STDEV()<br>　　--STDEV()函数返回表达式中所有数据的标准差<br>　　--STDEVP()<br>　　--STDEVP()函数返回总体标准差<br>　　--VAR()<br>　　--VAR()函数返回表达式中所有值的统计变异数<br>　　--VARP()<br>　　--VARP()函数返回总体变异数<br>　　----算术函数----<br>　　/***三角函数***/<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() --返回值为&#960; 即3.1415926535897936<br>　　RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 <br>　　间的随机浮点数<br>　　<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>　　<br>　　QUOTENAME() --函数返回被特定字符括起来的字符串<br>　　/*select quotename(&#8216;abc&#8216;, &#8216;{&#8216;) quotename(&#8216;abc&#8216;)<br>　　运行结果如下<br>　　----------------------------------{<br>　　{abc} [abc]*/<br>　　REPLICATE() --函数返回一个重复character_expression 指定次数的字符串<br>　　/*select replicate(&#8216;abc&#8216;, 3) replicate( &#8216;abc&#8216;, -2)<br>　　运行结果如下<br>　　----------- -----------<br>　　abcabcabc NULL*/<br>　　REVERSE() --函数将指定的字符串的字符排列顺序颠倒<br>　　REPLACE() --函数返回被替换了指定子串的字符串<br>　　/*select replace(&#8216;abc123g&#8216;, &#8216;123&#8216;, &#8216;def&#8216;)<br>　　运行结果如下<br>　　----------- -----------<br>　　abcdefg*/<br>　　SPACE() --函数返回一个有指定长度的空白字符串<br>　　STUFF() --函数用另一子串替换字符串指定位置长度的子串<br>　　<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])<br>　　select cast(100+99 as char) convert(varchar(12), getdate())<br>　　运行结果如下<br>　　------------------------------ ------------<br>　　199 Jan 15 2000<br>　　----日期函数----<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 的缺省格式返回系统当前的日期和时间<br>　　----系统函数----<br>　　APP_NAME() --函数返回当前执行的应用程序的名称<br>　　COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值<br>　　COL_LENGTH(&lt;&#8216;table_name&#8216;&gt;, &lt;&#8216;column_name&#8216;&gt;) --函数返回表中指定字段的长度值<br>　　COL_NAME(&lt;table_id&gt;, &lt;column_id&gt;) --函数返回表中指定字段的名称即列名<br>　　DATALENGTH() --函数返回数据表达式的数据的实际长度<br>　　DB_ID([&#8216;database_name&#8216;]) --函数返回数据库的编号<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>　　值用指定值替换<br>　　ISNUMERIC() --函数判断所给定的表达式是否为合理的数值<br>　　NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值<br>　　NULLIF(&lt;expression1&gt;, &lt;expression2&gt;)<br>　　--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 <br>　　的值<br>　　<br>　　<br>　　<br>　　<br>　　sql中的保留字<br>　　action add aggregate all <br>　　alter after and as <br>　　asc avg avg_row_length auto_increment <br>　　between bigint bit binary <br>　　blob bool both by <br>　　cascade case char character <br>　　change check checksum column <br>　　columns comment constraint create <br>　　cross current_date current_time current_timestamp <br>　　data database databases date <br>　　datetime day day_hour day_minute <br>　　day_second dayofmonth dayofweek dayofyear <br>　　dec decimal default delayed <br>　　delay_key_write delete desc describe <br>　　distinct distinctrow double drop <br>　　end else escape escaped <br>　　enclosed enum explain exists <br>　　fields file first float <br>　　float4 float8 flush foreign <br>　　from for full function <br>　　global grant grants group <br>　　having heap high_priority hour <br>　　hour_minute hour_second hosts identified <br>　　ignore in index infile <br>　　inner insert insert_id int <br>　　integer interval int1 int2 <br>　　int3 int4 int8 into <br>　　if is isam join <br>　　key keys kill last_insert_id <br>　　leading left length like <br>　　lines limit load local <br>　　lock logs long longblob <br>　　longtext low_priority max max_rows <br>　　match mediumblob mediumtext mediumint <br>　　middleint min_rows minute minute_second <br>　　modify month monthname myisam <br>　　natural numeric no not <br>　　null on optimize option <br>　　optionally or order outer <br>　　outfile pack_keys partial password <br>　　precision primary procedure process <br>　　processlist privileges read real <br>　　references reload regexp rename <br>　　replace restrict returns revoke <br>　　rlike row rows second <br>　　select set show shutdown <br>　　smallint soname sql_big_tables sql_big_selects <br>　　sql_low_priority_updates sql_log_off sql_log_update sql_select_limit <br>　　<br>　　sql_small_result sql_big_result sql_warnings straight_join <br>　　starting status string table <br>　　tables temporary terminated text <br>　　then time timestamp tinyblob <br>　　tinytext tinyint trailing to <br>　　type use using unique <br>　　unlock unsigned update usage <br>　　values varchar variables varying <br>　　varbinary with write when <br>　　where year year_month zerofill<br><br></p>
<img src ="http://www.blogjava.net/linden/aggbug/120450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/linden/" target="_blank">Linden.zhang</a> 2007-05-28 14:53 <a href="http://www.blogjava.net/linden/articles/120450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>