初学者SQL语句介绍 +ASP中使用SQL语句

  1. Select 子句检索记录
    Select 
子句是每一个检索数据的查询核心。它告诉数据库引擎返回什么字段。
    Select 
子句的常见形式是:
    Select *
    
该子句的意思是返回在所指定的记录源中能找到的所有字段。这种命令形式很方便,因为你无需知道从表中检索的字段名称。然而,检索表中的所有列是低效的。因此,因该只检索需要的字段,这样可以大大的提高查询的效率。


    2.


    3.


    
    4. 


    
    5. 


    
    6. 


    
    7. 

    
    
    8.
连接查询
    
在实际使用过程中经常需要同时从两个表或者两个以上表中检索数据。连接就是允许同时从两个表或者两个以上表中检索数据,指定这些表中某个或者某些列作为连接条件。在 SQL Server 中,可以使用两种连接语法形式,一种是 Ansi 连接语法形式,这是连接用在 From 子句中,另外一种是 SQL Server 连接语句形式,这是连接用在 Where 子句中。
    Ansi 
连接语法形式如下:
    Select table_name.column_name,table_name.column_name,...
    From {table_name [join_type] Join table_name On search_conditions}
    Where [search_conditions]
    
 Ansi 语法形式中,可以 Ansi 连接关键字来确定使用的连接形式。例如:
    
使用 Inner Join 关键字,结果集中仅包含满足条件的行。
    
使用 Cross Join 关键字,结果集中包含两个表中所有行的组合。
    
使用 Outer Join 关键字,结果集中既包含那些满足条件的行,还包含那些其中某个表的全部行。
    SQL Server 
连接语法形式如下所示:
    Select table_name.column_name,table_name.column_name,...
    From [table_name,tab  

ASP
中使用SQL语句   
1
SELECT 语句 

SQL的世界里,最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作:
 
 
SELECT what 
FROM whichTable 
WHERE criteria 
 

执行以上语句就会创建一个存放其结果的查询。 

而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,SELECT 语句的内容要作为字符串赋给一个变量:

 
SQL = "SELECT what FROM whichTable WHERE criteria" 

好了,明白了ASPSQL“说话的方式,接下来如法炮制即可,只要满足你的需要,传统的SQL查询模式和条件查询都能派用场。 

举例说明,不妨假设你的数据库内有个数据表,名字是Products ,现在你想取出这个表里的全部记录。然后你就编写了下面的代码: 

 
SQL ="SELECT * FROM Products" 

以上代码——SQL语句的作用就是取出表内的全部数据——执行后将会选出数据表内的全部记录。不过,要是只想从表内取出某个特定列,比如p_name。那就不能用 * 通配符了,这里得键入具体某列的名字,代码如下: 

 
SQL ="SELECT p_name FROM Products" 

执行以上查询之后Products 表内、p_name 列的内容就会全被选取出来。

2
WHERE子句设置查询条件

举个例子,假如你只打算取出p_name 记录,而且这些记录的名字必须以字母w打头,那么你就要用到下面的WHERE 子句了: 

 
SQL ="SELECT p_name FROM Products WHERE p_name LIKE 'W%'" 

WHERE 
关键词的后面跟着用来过滤数据的条件,有了这些条件的帮助,只有满足一定标准的数据才会被查询出来。在以上的例子里,查询的结果只会得到名字以打头的p_name 记录。 

以上例子中,百分比符号(%)的含义是指示查询返回所有字母打头而且后面是任何数据甚至没有数据的记录条目。所以,在执行以上查询的时候, west  willow 就会从Products 表内被选取出来并存放在查询里。 

就像你看到的那样,只要仔细地设计SELECT 语句,你就可以限制recordset 中返回的信息量,多琢磨琢磨总能满足你的要求。 

这些啊还不过是掌握SQL用途刚起步。为了帮助你逐步掌握复杂的SELECT 语句用法,下面就让我们再来看一下关键的标准术语:比较运算符,这些玩意都是你在构筑自己的SELECT 字符串来获得特定数据时要经常用到的。 

WHERE
子句基础 

在开始创建WHERE 子句的时候,最简单的方式是采用标准的比较符号,它们是 <  <=  >  >= <>  =。显然,你很快就能明白以下代码的含义和具体运行结果: 

 
SELECT * FROM Products WHERE p_price >= 199.95 
SELECT * FROM Products WHERE p_price <> 19.95 
SELECT * FROM Products WHERE p_version = '4' 

注意: 这里你会注意到,最后一个例句中的数字4周围加了单引号。原因是这样的,在这个例子中的 "4" 是文本类型而非数字类型。

3
,比较运算符:LIKENOT LIKE BETWEEN 

比较运算符指定从表内取出数据的内容范围。你可以用它们来创建过滤器以便缩小recordset的范围,促使其只保存给定任务下你关心的信息。 

你已经在上面取出w打头记录的例子中看到了LIKE的用法。LIKE判定词是一个非常有用的符号。不过,在很多情况下用了它可能会带给你太多的数据,所以在用到它之前最好先开动脑筋多想想自己到底想获得什么数据。假设你想取出5位数字的SKU号码,而且其开头是1结尾是5,那么你可以用下划符(_)代替%符号: 

 
SQL ="SELECT * FROM Products WHERE p_sku LIKE '1___5'"  

下划符表示任意一个字符。所以在输入“1___5”的情况下,你的搜索就会限制在满足特定模式的5位数范围内了。 

假如你想反其道而行之,要找出所有不匹配“1___5”模式的SKU条目。那么你只需要在刚才语句例子中的LIKE前面加上NOT就可以了。 

BETWEEN 

假设你想取出一定范围内的数据,而且你事先知道范围的起点和终点,那么你不妨采用BETWEEN 判断词。现在就让我们假设你想选取给定表内范围在 1 10之间的记录。你可以如下使用BETWEEN 

 
…WHERE ID BETWEEN 1 AND 10 

 
或者你也可以采用已经熟悉的数学判断字句: 

 
…WHERE ID >= 1 AND ID >= 10 

 4
,联合语句 

我们到目前为止所谈到的SQL语句相对较为简单,如果再能通过标准的recordset循环查询,那么这些语句也能满足一些更复杂的要求。不过,何必非要拘泥在浅尝则止的基础水准之上呢?你完全可以再增加其他一些符号,比如ANDORNOT来完成更强大的功能。 

以下面的SQL语句为例:
 
 
SQL ="SELECT c_firstname,c_lastname,c_email FROM customers WHERE c_email IS NOT NULL AND c_purchase ='1' OR c_purchase ='2' AND c_lastname LIKE 'A%'" 
 

你目前所掌握的SQL知识,以上的例子也不难解释,不过上面的语句并没有很明白地让你看清条件字句是如何胶合在单一个SQL语句中的。 

多行语句 

SQL语句不好懂的情况下,你不妨把整个语句分解为多行代码,然后在现有变量基础上逐步增加查询语句的各个组成部分并把它存在同一变量内:

 
SQL = "SELECT c_firstname,c_lastname,c_emailaddress,c_phone" 
SQL = SQL & " FROM customers" 
SQL = SQL & " WHERE c_firstname LIKE 'A%' and c_emailaddress NOT NULL" 
SQL = SQL & " ORDER BY c_lastname, c_firstname" 
 
到了最后一句,SQL变量就包含了以下的完整SELECT 语句:
 
 
"SELECT c_firstname, c_lastname, c_emailaddress, c_phone FROM customers WHERE c_firstname LIKE ‘A%’ and c_emailaddress NO NULL ORDER BY c_lastname,c_firstname" 

整句照上面分解之后显然好读多了!在进行调试的时候,你或许更乐于多敲几个字符把程序改得更好读些。不过你可要记住了,在封闭引号之前或者在打开引号之后你需要增加空格,这样才能保证字符串连接起来的时候你没有把几个词凑到了一块。 

5
,开始执行

在学会了SELECT语句的构造和用途之后你就该学习如何使用它了。在你所掌握的数据库工具下,这可能意味着你得按下某个写着执行字样的按钮。在ASP网页上,可以立即执行SQL语句也可以当作存储过程调用。 

一旦创建了SQL 语句,你还得设法访问其查询结果。显然,这里的关键就是ASP recordset。为了充分利用你更为熟悉的SQL技能,你需要调整常规ASP网页上最常采用的recordset 

 
Dim rs 
Set rs = Server.CreateObject ("ADODB.Recordset") 
rs.Open SQL,Conn,1,2 
 
这里Conn就是数据库连接声明,而唯一的修改就是在rs.Open,之后用包含SQL语句的变量代替了要查询的数据表的名称。 

这种方法的优点之一是你可以指定游标类型(如以上1 ,2 所示)。 

执行SQL 
你还可以用紧凑的一行代码执行SQL语句来创建recordset。以下是语法: 

 
Dim rs 
set rs = Conn.Execute(SQL) 

在上例中,你所看到的SQL是你存放自己SQL SELECT 语句的变量。该代码行运行”SQL语句(或者说对数据库进行查询),选取数据并把数据存放在recordset 内,在上例中就是变量rs。这种方法的主要缺点是你不能选择自己想采用的游标类型。相反,recordset总是用前向游标打开。 

因为游标的缘故,你或许打算熟悉两种创建recordset的方法。直接执行查询节省了键入字符所消耗的时间,但那样的话你就得采用默认的游标了,这样有可能遭遇经常不能正常运行的毛病。不管你具体采用哪种办法,两者之间的最大的差别也不外乎代码精练与否。在不考虑你取得什么字段、你的标准是什么的前提下,也不管你如何存储数据,采用SQL式的recordset 在体积上会比ASP上打开的标准recordset 要小得多,更别提操作起来的简易性了。毕竟,通过过滤数据,你消除了耗费时间的if-then 测试和可能用到的循环。 

6
,存储查询

当你的查询相对简单的时候,每次从头开始创建SQL语句也不费什么工夫,不过,复杂的查询就不同了,每次都从头来会产生很多开发错误。因此,一旦让SQL顺利地运行起来,你最好把它们存起来,在需要时再调用它们。这样,哪怕是一个简单查询你都能随时用上存储的查询语句了。 

假设你每周都要给团队做一次报告,指出目前存在的业务支持问题,这些数据需要从你的数据库中选取,而且要按照日期选择记录,同时根据你所在团队所采用的支持问题的类别排序。一旦你设计了这一查询,你何必以后每周都重新编写一次呢?不要在你的HTML页面上创建查询,你应该用你的数据库工具创建查询并且保存它。 然后你可以采用ActiveCommand 属性把查询插入到你的ASP网页。头一两回你可能会觉得没啥意思,其实也就几行代码而已: 

 
Set objSQ = Server.CreateObject ("ADODB.Command") 
objSQ.ActiveConnection = "databaseName" 
objSQ.CommandText = "storedQueryName" 
objSQ.CommandType = adCmdStoredProc 
set objRec = objSQ.Execute 

注意,采用adCmdStoredProc 表示你已经在页面上包含了adovbs.inc 文件。该文件定义了你可以按照名字而非数字进行访问的Access常数。只需要在页面上包含该文件即可),然后你就可以用adCmdStoredProc 这类名字了。这样,将来你再看到的时候更容易理解以上被存储的查询到底是个什么意思。

7
ORDER BY 

Access数据库中选取记录有件最令人丧气的事情,它们是以怎样的顺序输入到数据库内就按照怎样的顺序出来。就算你在Access环境内采用Sort By来改变记录视图,数据表内的记录顺序也并没有发生改变。 

如果你正在使用ASP recordset在网页上写出记录,那么你或许知道乱纷纷的顺序是多令人痛苦的事。但是你可能不得不经常得面对这一问题,因为并不存在什么简单方便的解决方案。好在ORDER BY 可以简化这一难题。 

为了对你的结果排序,只要在SELECT语句末尾加上ORDER BY,然后指定你需要排序的参照列即可。因此,如果你想要根据顾客的姓氏对Customers表排序,那么你可以编写如下的查询语句: 

 
SQL = "SELECT c_lastname,c_firstname,c_email FROM Customers ORDER BY c_lastname" 
 
这样,只要你建立了recordset而且开始把结果写到屏幕上,你就会看见数据按照字母顺序排列起来了。

sql语句的一些集合 

1.ASP
Access数据库连接: 
<%@language=VBscript%> 
<% 
dimconn,mdbfile 
mdbfile=server.mappath("
数据库名称.mdb") 
setconn=server.createobject("adodb.connection") 
conn.open"driver={microsoftaccessdriver 
(*.mdb)};uid=admin;pwd=
数据库密码;dbq="&mdbfile 
%> 
2.ASP
SQL数据库连接: 
<%@language=VBscript%> 
<% 
dimconn 
setconn=server.createobject("ADODB.connection") 
con.open"PROVIDER=SQLOLEDB;DATA 
SOURCE=SQL
服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 
%> 

建立记录集对象: 

setrs=server.createobject("adodb.recordset") 
rs.openSQL
语句,conn,3,2 

3.SQL
常用命令使用方法: 
(1)
数据记录筛选: 
sql="select*from
数据表where字段名=字段值orderby字段名[desc]" 
sql="select*from
数据表where字段名like'%字段值%'orderby字段名[desc]" 
sql="selecttop10*from
数据表where字段名orderby字段名[desc]" 
sql="select*from
数据表where字段名in('1','2','3')" 
sql="select*from
数据表where字段名between1and2" 

(2)
更新数据记录: 
sql="update
数据表set字段名=字段值where条件表达式
sql="update
数据表set字段1=1,字段2=2……字段n=nwhere条件表达式

(3)
删除数据记录: 
sql="deletefrom
数据表where条件表达式
sql="deletefrom
数据表"(将数据表所有记录删除

(4)
添加数据记录: 
sql="insertinto
数据表(字段1,字段2,字段3…)values(1,2,3…)" 
sql="insertinto
目标数据表select*from源数据表"(把源数据表的记录添加到目标数据表

(5)
数据记录统计函数: 
AVG(
字段名)得出一个表格栏平均值 
COUNT(*&brvbar;
字段名)对数据行数的统计或对某一栏有值的数据行数统计 
MAX(
字段名)取得一个表格栏最大的值 
MIN(
字段名)取得一个表格栏最小的值 
SUM(
字段名)把数据栏的值相加 
引用以上函数的方法: 
sql="selectsum(
字段名)as别名from数据表where条件表达式
setrs=conn.excute(sql) 
rs("别名")获取统的计值,其它函数运用同上。 

(5)
数据表的建立和删除: 
CREATETABLE
数据表名称(字段1类型1(长度),字段2类型2(长度)……) 
例:CREATETABLEtab01(namevarchar(50),datetimedefaultnow()) 

DROPTABLE
数据表名称(永久性删除一个数据表
4.
记录集对象的方法: 
rs.movenext
将记录指针从当前的位置向下移一行 
rs.moveprevious
将记录指针从当前的位置向上移一行 
rs.movefirst
将记录指针移到数据表第一行 
rs.movelast
将记录指针移到数据表最后一行 
rs.absoluteposition=N
将记录指针移到数据表第N 
rs.absolutepage=N
将记录指针移到第N页的第一行 
rs.pagesize=N
设置每页为N条记录 
rs.pagecount
根据pagesize的设置返回总页数 
rs.recordcount
返回记录总数 
rs.bof
返回记录指针是否超出数据表首端,true表示是,false为否 
rs.eof
返回记录指针是否超出数据表末端,true表示是,false为否 
rs.delete
删除当前记录,但记录指针不会向下移动 
rs.addnew
添加记录到数据表末端 
rs.update
更新数据表记录 
--------------------------------------- 
Recordset
对象方法 
Open
方法 
recordset.OpenSource,ActiveConnection,CursorType,LockType,Options 
Source 
Recordset
对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored 
Procedure
。假如省略这个参数,系统则采用Recordset对象的Source属性。 

ActiveConnection 
Recordset
对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 

CursorType 
Recordset
对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnlyadOpenKeysetadOpenDynamicadOpenStatic,分述如下: 
-------------------------------------------------------------- 
常数常数值说明 
------------------------------------------------------------- 
adOpenForwardOnly0
缺省值,启动一个只能向前移动的游标(ForwardOnly)。 
adOpenKeyset1
启动一个Keyset类型的游标。 
adOpenDynamic2
启动一个Dynamic类型的游标。 
adOpenStatic3
启动一个Static类型的游标。 
------------------------------------------------------------- 
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 
------------------------------------------------------------- 
Recordset
属性adOpenForwardOnlyadOpenKeysetadOpenDynamicadOpenStatic 
------------------------------------------------------------- 
AbsolutePage
不支持不支持可读写可读写 
AbsolutePosition
不支持不支持可读写可读写 
ActiveConnection
可读写可读写可读写可读写 
BOF
只读只读只读只读 
Bookmark
不支持不支持可读写可读写 
CacheSize
可读写可读写可读写可读写 
CursorLocation
可读写可读写可读写可读写 
CursorType
可读写可读写可读写可读写 
EditMode
只读只读只读 
只读 
EOF
只读只读只读 
只读 
Filter
可读写可读写可读写可读写 
LockType
可读写可读写可读写可读写 
MarshalOptions
可读写可读写可读写可读写 
MaxRecords
可读写可读写可读写可读写 
PageCount
不支持不支持只读只读 
PageSize
可读写可读写可读写可读写 
RecordCount
不支持不支持只读只读 
Source
可读写可读写可读写可读写 
State
只读只读只读只读 
Status
只读只读只读只读 
AddNew
支持支持支持支持 
CancelBatch
支持支持支持支持 
CancelUpdate
支持支持支持支持 
Clone
不支持不支持 
Close
支持支持支持支持 
Delete
支持支持支持支持 
GetRows
支持支持支持支持 
Move
不支持支持支持支持 
MoveFirst
支持支持支持支持 
MoveLast
不支持支持支持支持 
MoveNext
支持支持支持支持 
MovePrevious
不支持支持支持支持 
NextRecordset
支持支持支持支持 
Open
支持支持支持支持 
Requery
支持支持支持支持 
Resync
不支持不支持支持支持 
Supports
支持支持支持支持 
Update
支持支持支持支持 
UpdateBatch
支持支持支持支持 
-------------------------------------------------------------- 
其中NextRecordset方法并不适用于MicrosoftAccess数据库。 

LockType 
Recordset
对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnlyadLockPrssimisticadLockOptimisticadLockBatchOptimistic等,分述如下: 
------------------------------------------------------------- 
常数常数值说明 
-------------------------------------------------------------- 
adLockReadOnly1
缺省值,Recordset对象以只读方式启动,无法运行AddNewUpdateDelete等方法 
adLockPrssimistic2
当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。 
adLockOptimistic3
当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。 
adLockBatchOptimistic4
当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、 
删、改的操作。 
Sqlserver
数据库asp调用的特殊部分 
<% 
response.writews2(1) 
w2=ws2(2) 
response.write"a" 
response.write"b"&ws2(3)&"c" 
response.write"d"&w2 
%> 

建立一个表 
createtablefriends(name1varchar(10),phonevarchar(15)) 


access不同,sqlserver默认的数据库只能向后读取,非常严格。 

在数据库之间拷贝复制表格 
select*intocoolhe.dbo.mainfrommain 

删除数据库 
dropdatabasecoolhe 

查找替换功能 

updatecommend 
setGIF
图片=stuff(GIF图片,1,21,"http://192.168.1.2")//替换GIF图片字段从头开始的21个字符为<http://192.168.1.2> 

更改记录 
自动增加的字段无法更改 
解决办法如下 

CREATETABLEnew_employees 

id_numintIDENTITY(1,1), 
fnamevarchar(20), 
minitchar(1), 
lnamevarchar(30) 


INSERTnew_employees 
(fname,minit,lname) 
valueS 
('Karin','F','Josephs') 


修改某个记录 
updatemain 
setGIF
图片=’新的’whereid=4331 

添加一条记录 
insertarticles 
(category,title,link,updatetime) 
values 
('CPU','AMDAthlonXP
处理器技术与架构','20011024/01.asp','10-24-2001') 

从一个表添加记录道另一个表 
insertmain 
selecta,b,c,dfromnew 

main有一个字段为自动增加时,新表不能选取自动增加的字段,而避开该字段以上例的形式书写 

查找数据库中所有的表 

select*fromsysobjectswherextype='u' 

计算某个字段的和 

select'downloadcount'=sum(
下载次数

检索表定义信息 

sp_help
表名 

修改表名 

sp_rename'cool','commend' 

添加表字段(如果一次添加多字段后面不加bit) 

ALTERTABLEmain 
ADD
开关bit 

altertablemainadd
年龄char(3),姓名varchar(8),性别char(2) 

修改表字段类型 
原先姓名字段的类型是char(10) 
altertabletablenamealtercolumn
姓名varchar(20) 

修改密码 
EXECsp_passwordNULL,'ok','Victoria'
(密码为空时)Victorialogin的用户名 
EXECsp_password'ok','coffee'
密码从ok改到coffee 

altertabletable_nameaddcolumncolumn_namedatatype 

  说明:增加一个栏位(没有删除某个栏位的语法。

  altertabletable_nameaddprimarykey(column_name) 

  说明:更改表得的定义把某个栏位设为主键。 
   
  altertabletable_namedropprimarykey(column_name) 

  说明:把主键的定义删除 

将一个字段的默认值设置成

ALTERTABLEtable_nameADDCONSTRAINTDF_Test_FieldNameDEFAULT(0)FORFieldName 

DF_Test_FieldName
不要变动 

更改字段名称 
sp_rename'tablename.fieldname','newname','column'; 
column
不要变动 

注释 
/*select*fromnews*/
或者--select*fromnews-- 
其中横线用于插入式注释 

setrs=cn.execute(sql)
此语句返回一个SQL语句执行后的结构,把结果赋值给RS 
cn.Executesql
此语句只是执行SQL语句 

数据类型+++++++++++++++++++++++++++++++++++++++++++++++++datatypes 
  smallint 
  16位元的整数。 

  interger 
  32位元的整数。 

  decimal(p,s) 
  p精确值和s大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数後有几位数。如果没有特别指定,则系统会设为p=5;s=0 

  float 
  32位元的实数。 

  double 
  64位元的实数。 

  char(n) 
  n长度的字串,n不能超过254 

  varchar(n) 
  长度不固定且其最大长度为n的字串,n不能超过4000 

  graphic(n) 
  和char(n)一样,不过其单位是两个字元double-bytesn不能超过127。这个形态是为支援两个字元长度的字体,例如中文字。 

  vargraphic(n) 
  可变长度且其最大长度为n的双字元字串,n不能超过2000 

  date 
  包含了年份、月份、日期。 

  time 
  包含了小时、分钟、秒。 

  timestamp 
  包含了年、月、日、时、分、秒、千分之一秒。 


SQLServer中提供了这种恢复方式的存储过程。 

1.sp_attach_db[@dbname=]dbname,[@filename1=]filename_n 

  给系统添加一个数据库,在dbname指定数据库名称,filename_n指定数据库的文件和日志文件。比如我有一个voogiya的库,停止SQLServer服务备份voogiya_data.mdf,voogiya_log.ldf,启动SQLserver,删除掉这个库,然后再把这两上文件拷到sqlserver DATA目录中,在QueryAnalyzer中执行如下语句: 

EXECsp_attach_db@dbname=Nvoogiya, 
@filename1=Nd:/mssql7/data/voogiya_data.mdf,(
不加N时成功
@filename2=Nd:/mssql7/data/voogiya_log.ldf(
不加N时成功

就会把这个库加入到SQLServerGroup
2.sp_attach_single_file_db[@dbname=]dbname, 
[@physname=]physical_name 

  这个命令和上面的功能一样,在physical_name中只要写上据库的物理文件名就可以了,日志文件SQLserver会重新建立。这个存储过程的运行要先执行下面的存储过程: 

sp_detach_db@dbname=dbname 

  同样以上面的为例: 

EXECsp_detach_db@dbname=voogiya 
EXECsp_attach_single_file_db@dbname=voogiya, 
@physname=d:/mssql7/data/voogiya_data.mdf 

  要注意执行以上存储过程的用户要在sysadmin

合并查询
    
合并查询( Union Query )用于合并具有相同字段结构的两个表的内容,如果想在一个结果集中显示多个记录源中的不相关的记录时,这十分有用。
    
例子:
    Select * 
    From students 
    Union 
    Select *
    From students1
    
该查询结果集把 students  students1 中的记录合并到一个结果中,其输出就和原表归档之前一模一样。
    
注意:缺省情况下,合并查询不会返回重复记录(如果记录归档系统在把记录拷到归档表中后不将相应的记录删除,这时该功能就有用了),可以加上 All 关键字而让合并查询显示重复记录。
    
例子:
    Select *
    From students
    Union All
    Select *
    From students1
    
该合并查询显示 students 表和 students1 表的内容时,没有对重复记录进行处理
    
补充:
    Union 
运算符允许把两个或者多个查询结果合并到一个查询结果集中。如果比较 Union  Join 两咱运算符,那么 Union 运算符增加行的数量,而 Join 运算符增加列的数量。使用 Union 时应该注意,两个结果中的列的结构必须匹配,数据类型必须兼容等等。
    Union 
运算符的语法形式如下:
    Select select_list
    From clause
    Where clause
    Group By clause
    Having clause
    Union [All]
    Select select_list
    From clause
    Where clause
    Group By clause
    Having clause
    Order By clause
    Compute clause
    
对于 Union 运算符,有下列几点需要说明:
    ·
在默认情况下,Union 运算符删除全部冗余行。如果使用All 选项,那么冗余行不删除。
    ·
 Union 语句中的全部 select_list 必须有相同数量的列、兼容的数据类型并且按照同样的顺序出现。
    ·
在结果集中,列名来自第一个 Select 语句。
 As 对字段名进行别名化
    
为什么在查询中对字段命以别名,或重新命名,这样做的原因有两个:
    
所涉及的表的字段名很长,想使字段在结果集中更易处理一些。
    
创建的查询产生了某些计算或合计列,需要对之进行命名。
    
不管是什么原因对字段命以别名,在 SQL 中都可以容易地使用 As 子句做得。
    
例子:
    Select number As 
学号 ,name As 姓名 From students
使用 Top 显示某个范围的第一个记录或最后一个记录。
    
使用 Top 关键字可以只显示一个大记录前面或后面的少数几个记录。在查询中,Top 关键字与排序子句一起把结果集限制为少数几个记录或按某个百分比显示整个结果记录集合中的一部分。
    
例子:
    Select Top 3 * From students 
返回 students 表中的前3条记录
    Select Top 10 Percent * From students 
返回 students 表中前面的10%个记录
    Select Top 3 * From students Order By number desc 
返回 students 表中 number 最大的(最后)的3条记录
使用 Order By 对结果排序
    Order By 
子句告诉数据库引擎对其检索的记录进行排序。可以对任何字段排序,或者对多个字段排序,并且可以以升序或隆序进行排序。
    
在一个正式的 Select 查询之后包含一个 Order By 子句,后跟想排序的字段(可以有多个)便可以说明一个排序顺序。
    
例子:
    Use cust
    Select * From students 
    Where name Like "%
%"
    Order By number
    
对返回的结果按 number 进行排序。
    
    
以降序排序
    
如要以隆序排序,只需在排序的字段之后使用 Desc 关键字。
    
例子:
    Use cust
    Select * From students 
    Where name Like "%
%"
    Order By number Desc
 Where 子句说明条件
    Where 
子句告诉数据库引擎根据所提供的一个或多个条件限定其检索的记录。条件是一个表达式,可具有真假两种判断。
    
例子:
    Select * From students Where name="
影子"
    
返回studentsname字段为影子的列表,这次所返回的结果没有特定顺序,除非你使用了 Order By 子句。该子句将在后面的章节介绍。
    
注意:Where 子句中的文本字符串界限符是双引号,在VB中因改为单引号,因为在VB中字符串的界定符是双引号。
    
补充:
    
使用 And  Or 逻辑可以将两个或更多的条件链接到一起以创建更高级的 Where 子句。
    
例子:
    Select * From students Where name="
影子" And number>100
    
返回name为影子number大于100的列表。
    
例子:
    Select * From students Where name="
影子" And (number>100 Or number<50)
    
返回name为影子,number大于100或者小于50的列表。
    
    Where 
子句中用到的操作符
    
操作符 功能
    < 
小于
    <= 
小于或等于
    > 
大于
    >= 
大于或等于
    = 
等于
    <> 
不等于
    Between 
在某个取值范围内
    Like 
匹配某个模式
    In 
包含在某个值列表中
    SQL
中的等于和不等于等操作符与VB中的意义和使用相同
    
    
例子:
    
1.Between 操作符
    Use cust
    Select * From students 
    Where number Between 1 and 100
    Between 
操作符返回的是位于所说明的界限之内的所有记录值。这个例子就返回 number 字段 1  100 之间的全部记录。
    
    
2. Like 操作符和通配符
    Use cust
    Select * From students 
    Where name Like "%
%"
    Like 
操作符把记录匹配到你说明的某个模式。这个例子是返回含的任意字符串。
    
    
四种通配符的含义
    
通配符 描述
    % 
代表零个或者多个任意字符
    _
(下划线) 代表一个任意字符
    [] 
指定范围内的任意单个字符
    [^] 
不在指定范围内的任意单个字符
    
    
全部示例子如下:
    Like "BR%" 
返回以"BR"开始的任意字符串
    Like "br%" 
返回以"Br"开始的任意字符串
    Like "%een" 
返回以"een"结束的任意字符串
    Like "%en%" 
返回包含"en"的任意字符串
    Like "_en" 
返回以"en"结束的三个字符串
    Like "[CK]%" 
返回以"C"或者"K"开始的任意字符串
    Like "[S-V]ing" 
返回长为四个字符的字符串,结尾是"ing",开始是从SV
    Like "M[^c]%" 
返回以"M"开始且第二个字符不是"c"的任意字符串。
使用  From  子句指定记录源
    From 
子句说明的是查询检索记录的记录源;该记录源可以是一个表或另一个存储查询。
    
你还能从多个表中检索记录,这在后面的章节中将介绍。
    
例子:
    Select * From students 
检索 students 表中的所有记录
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注册功能: 1、 阅读用户协议,同2、 意可以进行下一步,3、 若下一步按钮不4、 可用。 5、 填写用户名6、 与密码,7、 检测用户名8、 与密码是否填写,9、 若没有不10、 可下一步。检测用户是否可用,11、 若不12、 可用提示信息且不13、 可进入到下一步。 14、 检测用户的信息是否完善,15、 若不16、 完善,17、 弹出提示信息。若信息完善和格式正确注册成功。 班级风采 18、 班级简介。 19、 班级图片。 信息共享(新闻,就业信息) 20、 会员可以在网站上发布新闻与关于就业方面的信息、与技巧等。 21、 信息编辑功能。检测用户是否与信息的发布者一致,22、 若不23、 是无权修改本信息若是可以有权修改。 24、 信息删除 功能,25、 判断是否是管理员或者本信息的拥有者,26、 如果不27、 是无权删除,28、 若是其的任一个则可以删除。 四 、交流平台(论坛), 1、可以发表主题。 2、可以回复主题。 3、主题的拥有者可修改主题。 4、主题拥有者和管理员可以删除该主题。。 五、个人的个性、心情展示(个人博客) 1、可以发表个人日记。 2、可以让别人回复相应的日记。 3、可以让别人看自己的相册,本用户可以上传图片。 4、个人博客管理可以纪录本用户在网站内发布的各种信息与个个资料。 5、个人博客管理还可以删除个人在网站属于个人发布的各种信息。 六 、网站使用插入相应的javascript代码用来达到美观的作用,比如:日历 七、管理后台 可以对整个网站的数据进行全盘整理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值