1、/常用经典 SQL 语句大全完整版-详解+实例下列语句部分是 Mssql 语句,不可以在 access 中使用。SQL 分类:DDL数据定义语言(CREATE,ALTER,DROP,DECLARE)DML数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,简要介绍基础语句:1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份 sql server- 创建 备份数据的 deviceUSE mast
2、erEXEC sp_addumpdevice disk, testBack, c:mssql7backupMyNwind_1.dat- 开始 备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create table tabname(col1 type1 not null primary key,col2 type2 not null,)根据已有的表创建新表:/A:create table tab_new like tab_old (使用旧表创建新表)B:create table tab_new as select col1,col2 from tab_ol
3、d definition only5、说明:删除新表:drop table tabname6、说明:增加一个列:Alter table tabname add column col type注:列增加后将不能删除。DB2 中列加上后数据类型也不能改变,唯一能改变的是增加 varchar 类型的长度。7、说明:添加主键:Alter table tabname add primary key(col)说明:删除主键:Alter table tabname drop primary key(col)8、说明:创建索引:create unique index idxname on tabname(co
4、l.)删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。9、说明:创建视图:create view viewname as select statement删除视图:drop view viewname10、说明:几个简单的基本的 sql 语句/选择:select * from table1 where 范围插入:insert into table1(field1,field2) values(value1,value2)删除:delete from table1 where 范围更新:update table1 set field1=value1 wh
5、ere 范围查找:select * from table1 where field1 like %value1% -like 的语法很精妙,查资料!排序:select * from table1 order by field1,field2 desc总数:select count * as totalcount from table1求和:select sum(field1) as sumvalue from table1平均:select avg(field1) as avgvalue from table1最大:select max(field1) as maxvalue from tab
6、le1最小:select min(field1) as minvalue from table111、说明:几个高级查询运算词A: UNION 运算符UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。B: EXCEPT 运算符EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起
7、/使用时 (EXCEPT ALL),不消除重复行。C: INTERSECT 运算符INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。注:使用运算词的几个查询结果行必须是一致的。12、说明:使用外连接A、left outer join:左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON
8、a.a = b.cB:right outer join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。C:full outer join:全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。其次,大家来看一些不错的 sql 语句1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1513、说明:一条 sql 语句搞定数据库分页select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段
9、 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段14、说明:前 10 条记录/select top 10 * form table1 where 范围15、说明:选择在每一组 b 值相同的数据中对应的 a 最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)16、说明:包括所有在 TableA 中但不在 TableB
10、和 TableC 中的行并消除所有重复行而派生出一个结果表(select a from tableA ) except (select a from tableB) except (select a from tableC)17、说明:随机取出 10 条数据select top 10 * from tablename order by newid()18、说明:随机选择记录select newid()19、说明:删除重复记录Delete from tablename where id not in (select max(id) from tablename group by col1,col
11、2,.)20、说明:列出数据库里所有的表名select name from sysobjects where type=U21、说明:列出表里的所有的select name from syscolumns where id=object_id(TableName)/22、说明:列示 type、vender、pcs 字段,以 type 字段排列,case 可以方便地实现多重选择,类似 select 中的 case。select type,sum(case vender when A then pcs else 0 end),sum(case vender when C then pcs else
12、 0 end),sum(case vender when B then pcs else 0 end) FROM tablename group by type显示结果:type vender pcs电脑 A 1电脑 A 1光盘 B 2光盘 A 2手机 B 3手机 C 323、说明:初始化表 table1TRUNCATE TABLE table124、说明:选择从 10 到 15 的记录select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc随机选择数据库记录的方法(使用
13、 Randomize 函数,通过 SQL 语句实现)对存储在数据库中的数据来说,随机数特性能给出上面的效果,/但它们可能太慢了些。你不能要求 ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:RandomizeRNumber = Int(Rnd*499) +1While Not objRec.EOFIf objRec(“ID“) = RNumber THEN. 这里是执行脚本 .end ifobjRec.MoveNextWend这很容易理解。首先,你取出 1 到 500 范围之内的一个随机数(假设 500 就是数据库内记录的总数)。然后,你遍历每一记录来测试 ID 的
14、值、检查其是否匹配 RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的 RNumber 等于 495,那么要循环一遍数据库花的时间可就长了。虽然 500 这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?采用 SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的 recordset,如下所示:Randomize/RNumber = Int(Rnd*499) + 1SQL = “SELECT * FROM Customers WHERE ID = “ Conn.Execut
15、e 说明/Execute 方法该方法用于执行 SQL 语句。根据 SQL 语句执行后是否返回记录集,该方法的使用格式分为以下两种:1执行 SQL 查询语句时,将返回查询得到的记录集。用法为:Set 对象变量名=连接对象.Execute(“SQL 查询语言“)Execute 方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过 Set 方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。2执行 SQL 的操作性语言时,没有记录集的返回。此时用法为:连接对象.Execute “SQL 操作性语句“ , RecordAffected, OptionRecordAff
16、ected 为可选项,此出可放置一个变量,SQL 语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道 SQL 语句队多少条记录进行了操作。Option 可选项,该参数的取值通常为 adCMDText,它用于告诉 ADO,应该将 Execute 方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。BeginTrans、RollbackTrans、CommitTrans 方法这三个方法是连接对象提供的用于事务处理的方法。BeginTrans 用于开始一个事物;RollbackTrans 用于回滚事务;CommitTrans 用于提交所有的事务处理结果,即确认事
17、务的处理。/事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。BeginTrans 和 CommitTrans 用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的 Error 集合来实现,若 Error 集合的成员个数不为 0,则说明有错误发生,事务处理失败。Error 集合中的每一个 Error 对象,代表一个错误信息。SQL 语句大全精要2006/10/26 13:46DELETE 语句DELETE 语句:用于创建一个删除查询,可从列在
18、 FROM 子句之中的一个或多个表中删除记录,且该子句满足 WHERE 子句中的条件,可以使用 DELETE 删除多个记录。语法:DELETE table.* FROM table WHERE criteria语法:DELETE * FROM table WHERE criteria=查询的字说明:table 参数用于指定从其中删除记录的表的名称。criteria 参数为一个表达式,用于指定哪些记录应该被删除的表达式。可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过,若用这种方法删除表,将会失去表的结构。不同的是当使用 DELETE,只有数据会被删除;表的结构以及
19、表的所有属性仍然保留,/例如字段属性及索引。UPDATE有关 UPDATE, 在 ORACLE 数据库中表 A ( ID ,FIRSTNAME,LASTNAME )表 B( ID,LASTNAME)表 A 中原来 ID,FIRSTNAME 两个字段的数据是完整的表 B 中原来 ID,LASTNAME 两个字段的数据是完整的现在要把表 B 中的 LASTNAME 字段的相应的数据填入到 A 表中LASTNAME 相应的位置。两个表中的 ID 字段是相互关联的。先谢谢了!update a set a.lastname=(select b.lastname from b where a.id=b.i
20、d)掌握 SQL 四条最基本的数据操作语句:Insert,Select,Update 和 Delete。练掌握 SQL 是数据库用户的宝贵财富。在本文中,我们将引导你掌握四条最基本的数据操作语句SQL 的核心功能来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通 SQL 了。在我们开始之前,先使用 CREATE TABLE 语句来创建一个表(如图 1 所示)。DDL 语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为 DDL 语句并不处理数据库中实/际的数据。这些工作由另一类 SQL 语句数据操作语言(DML)语句进行处理。SQL 中
21、有四种基本的 DML 操作:INSERT,SELECT,UPDATE 和DELETE。由于这是大多数 SQL 用户经常用到的,我们有必要在此对它们进行一一说明。在图 1 中我们给出了一个名为 EMPLOYEES 的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。The Execute method executes a specified query, SQL statement, stored procedure, or provider-specific text.Execute 的作用是:执行一个查询语句、陈述语句、程序或技术提供对象provider的
22、详细文本。The results are stored in a new Recordset object if it is a row-returning query. A closed Recordset object will be returned if it is not a row-returning query.如果返回行row-returning查询语句,那么结果将被存储在一个新的记录对象中;如果它不是一个返回行row-returning查询语句,那么它将返回一个关闭的记录对象。Note: The returned Recordset is always a read-only
23、, forward-only Recordset!/注意:返回的 Recordset 是一个只读的、只向前兼容的Recordset。Tip: To create a Recordset with more functionality, first create a Recordset object. Set the desired properties, and then use the Recordset objects Open method to execute the query.提示:在第一次创建 Recordset 对象时,需要将它创建为一个更具功能性的 Recordset 对象。
24、设置一个我们所希望的属性,使用Recordset 对象的 Open 方法去执行查询语句。Syntax for row-returningrow-returning返回行语法Set objrs=objconn.Execute(commandtext,ra,options)Syntax for non-row-returningnon-row-returning非返回行语法objconn.Execute commandtext,ra,optionsParameter参数Description 描述commandtextRequired. The SQL statement, stored proc
25、edure, or provider-specific text to execute必要参数。指定需要执行的 SQL 语句,现存的程序或技术提供对象provider的详细文本ra Optional. The number of records affected by the query可选参数。返回查询语句执行的记录数/options Optional. Sets how the provider should evaluate the commandtext parameter. Can be one or more CommandTypeEnum or ExecuteOptionEnum
26、 values. Default is adCmdUnspecified可选参数。设置技术提供对象provider应该如何评估CommandText 属性的功能。它可以是一个或多个CommandTypeEnum 或 ExecuteOptionEnum 的值。默认值是 adCmdUnspecifiedExample案例CommandTypeEnum ValuesConstant 常量 Value值Description 描述adCmdUnspecified -1 Does not specify the command type argument.不指定指令类型自变量adCmdText 1 Ev
27、aluates CommandText as a textual definition of a command or stored procedure call.指示提供者应该将 Source 作为命令的文/本定义来计算。adCmdTable 2 Evaluates CommandText as a table name whose columns are all returned by an internally generated SQL query.指示 ADO 生成 SQL 查询以便从在Source 中命名的表中返回所有行adCmdStoredProc 4 Evaluates Com
28、mandText as a stored procedure name.将 CommandText 作为一个已存的程序名称adCmdUnknown 8 Indicates that the type of command in the CommandText property is not known.默认值。指定未知的 CommandText 属性命令adCmdFile 256 Evaluates CommandText as the file name of a persistently stored Recordset. Used with Recordset.Open or Reque
29、ry only.指示应从在 Source 中命名的文件中恢复保留(保存的)Recordset。它仅能与Recordset.Open 或 Requery 指令一起使用adCmdTableDirect 512 Evaluates CommandText as a table name whose columns are all returned. Used with Recordset.Open or Requery only. To use the Seek method, the Recordset must be opened with adCmdTableDirect. This valu
30、e cannot be combined with the ExecuteOptionEnum value adAsyncExecute.指示提供者更改从在 Source 中命名的表中返回所有行/将 CommandText 作为一个表的名称(该表的列全部是通过内部的 SQL 查询/语句返回的)。它仅适用Recordset.Open 或 Requery 指令;如果需要使用查找方式,那么 Recordset必须以 adCmdTableDirect 打开。这个值不能与 ExecuteOptionEnum 值 adAsyncExecute 一起使用ExecuteOptionEnum ValuesCon
31、stant 常量 Value 值Description 描述adOptionUnspecified -1 Indicates that the command is unspecified.指明为指定的指令adAsyncExecute Indicates that the command should execute asynchronously. This value cannot be combined with the CommandTypeEnum value adCmdTableDirect.指明指令是否需要异步执行。这个值不能与 CommandTypeEnum 之中的 adCmdT
32、ableDirect 一起使用adAsyncFetch Indicates that the remaining rows after the initial quantity specified in the CacheSize property should be retrieved asynchronously./指明在 CacheSize 属性中指定了初始量以后,是否应该异步获取保留行remaining rowsadAsyncFetchNonBlockingIndicates that the main thread never blocks while retrieving. If
33、the requested row has not been retrieved, the current row automatically moves to the end of the file. If you open a Recordset from a Stream containing a persistently stored Recordset, adAsyncFetchNonBlocking will not have an effect; the operation will be synchronous and blocking. adAsynchFetchNonBlo
34、cking has no effect when the adCmdTableDirect option is used to open the Recordset.指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,那么当前行将自动移到文件末尾。如果打开的记录流中的记录固定地包含一个记录,那么adAsyncFetchNonBlocking 将不会产生作用;才作程序将同时运行以及阻塞该常量。当adCmdTableDirect 选项用于打开记录时,adAsynchFetchNonBlocking 将不会产生任何作用adExecuteNoRecords Indicates that the c
35、ommand text is a command or stored procedure that does not return rows (for example, a command that only inserts data). If any rows are /retrieved, they are discarded and not returned. adExecuteNoRecords can only be passed as an optional parameter to the Command or Connection Execute method.它仅指明了指令文
36、本仅是一条不返回任何行的指令或现存程序(如:一条只执行数据插入的指令)。如果没有任何行被提取,那么他们将放弃执行并不返回任何值。adExecuteNoRecords 仅可以作为一个可选参数传递到指令中或连接执行方法Connection Execute method中adExecuteStream Indicates that the results of a command execution should be returned as a stream. adExecuteStream can only be passed as an optional parameter to the Co
37、mmand Execute method.指明需要以结果流的形式返回命令执行的结果。adExecuteStream仅可以作为一个可选参数传递到指令中或连接执行方法Connection Execute method中adExecuteRecord Indicates that the CommandText is a command or stored procedure that returns a single row which should be returned as a Record object.指明 CommandText 仅是返回一个单独行(该单独行作为一条记录对象返回)的一条指令或现存程序