SQL SERVER语法

 

1.创建表 

(1)用Create Table 命令创建表 

语法: 

Create Table tabl_name 

({ 

}column_name As computed_column_expression 

} 

}[,...n] 

) 

[On {fiegroup | Default}] 

[Textimage_On {fiegroup | Default}] 

例子: 

打开cust数据库,创建一个表,该表包含了学生的有关信息,即有学号、姓名、性别、出生日期、籍贯、联系电话、住址和备注信息。 

Use cust 

Create Table students 

( 

number int not null, 

name varchar(10) not null, 

sex char(2) null, 

birthday datetime null, 

hometown varchar(30) null, 

telphone_no varchar(12) null, 

address varchar(30) null, 

others varchar(50) null 

) 

在这个表中number表示学生代号,数据类型为int,不允许为空;name表示学生姓名,数据类型为varchar,长度为10,不允许为空;sex表示学生的性别,数据类型为char,长度为2,允许为空;birthday表示学生的出生日期,数据类型为datetime,允许为空;hometown表示学生的籍贯,数据类型为varchar,长度为30,允许为空;telephone_no表示学生的联系电脑,数据类型为varchar,长度为12,允许为空;address表示学生的住址,数据类型为varchar,长度为30,允许为空;others表示学生的备注信息,长度为50,允许为空。 


2.修改表的结构 

(1)使用T-SQL语句增加和删除一个新列 

语法: 

Alter Table table 

{ 

ADO 

{[] 

|colun_name As computed_column_expression 

|[] 

}[,...n] 

|Drop 

{Column column 

}[,...n] 

} 

例子:打开cust数据库,修改其中的表students的结构,增加一个新字段,字段名为ying,数据类型是varchar,长度是10,没有默认值,充许为空。 

Use cust 

Alter Table students Add ying varchar(10) null 

打开cust数据库,修改其中的表students的结构,删除一个字段,字段名为ying。 

Use cust 

Alter Table students Drop Column ying 

3.向表中插入数据 

(1)用 Insert 语句 

语法如下: 

Insert [Into] 

{table_name|view_name}[(column_list)] 

{Values|values_list|select_statement} 

注意:在插入数据时,字符数据和日期数据要使用引号引起来。 

例子: 

Use cust 

Insert Into students 

Values (11,"影子","男","1999-12-12","湖北","83779805","武汉市桥口区","VB爱好者") 

打开cust数据库,向students表中插入数据 

(2)用Default 选项 

在插入数据时,可以使用Default选项。Default选项有两种形式,一种形式是Default Values,另一种是Default。 

Default Values 
形式为表中的某一行的所有列插入默认值。使用这种形式的前提条件是表中的所有列必须是这四种类型之一:Identity属性,Timestamp数据类型,允许为Null,或者有一个指定的默认值。否则,会错误信息。 


例子: 

Use cust 

Insert Into students Default Values 

这个例子会出现错误,因为students表的number字段是设置为不允许为空的。 

Default 形式是为表中的某一列插入默认值。要插入的该列必须具备一定的条件,即该列要么是Timestamp 
数据类型,要么是允许为Null,要么是有一个指定的默认值,否则,会出现错误信息。 

例子: 

Use cust 

Insert Into students 
Values(11,"影子",Default,Default,Default,Default,Default,Default) 

由天前2个字段不能为空,所以要赋值,否则会出现错误,而后面的6个字段允许为空,因此可以调用Default默认。 

(3)插入部分数据 

在使用Insert语句插入数据是,还可以插入部分数据,也就是可以为每一行的指定的部分列插入数据。在插入部分数据时,应该注意以下三个问题: 

☆在 Insert 子句中,指定要插入数据的列名。 

☆在 Values 子句中,列出与列名对应的数据。列名的顺序和数据的顺序应该完全对应。 

☆在 Insert 子句中,没有列出的列应该至少具有这四种类型之一:Identtty 属性,Timestamp 数据类型,允许为 
Null,或者有一个指定的默认值。否则,会出现错误信息。 

例子: 

Use cust 

Insert Into students (number,name) 

Values (110,"影子") 

打开cust数据库,向students表中插入一行数据 

注意:如用下例语句将发生错误,因为name字段是不允许为空的(在创建数据库时设定的) 

Insert Into students (number) 

Values (110) 

(4)用 Select 语句插入多条数据 

Insert 语句插入数据的特点是每一次只能插入一行数据。相反,Select 也可以用在 Insert 语句中,并且可以一次插入多条数据。使用 Select 
语句插入数据的语法形式如下: 

Insert table_name 

Select column_list 

From table_list 

Where search_conditions 

在使用 Select 语句插入数据时,应该注意下面几点: 

☆在 Insert 语句中使用 Select 时,他们参考的表既可以是相同的,也可以是不同的。 

☆要插入数据的表必须已经存在。 

☆要插入数据的表必须和 Select 的结果集兼容。兼容的含义是列的数量和顺序必须相同,列的数据类型或者相同,或者SQL Server 可以自动转换。 

例子: 

Use cust 

Insert students 

Select number,name,sex,birthday,hometown,telphone_no,address,others 

From students 

注意: 

Select 后面的字段要输完整,这个例子是自己向自己插入多条数据(自己向自己插入是被允许的) 

补充: 

你还可以“From students”后面加上“Where name="影子"”,只插入name等于影子的记录,可以用And 和 Or 加上多个条件。 

(5)使用 Select Into 插入数据到一个新表中 

带有 Into 子句的 Select 
语句允许用户定义一个新表并且把数据插入到新表中。这种方法不同于前面讲述的那些方法。在前面的那些方法中,一个共同的特点,是在数据输入之前表已经存在。而使用 
Select Into 插入数据的方法,是在插入数据的过程中建立新表。 

Select Into 语句的语法如下: 

Select select_list 

Into new_table_name 

From table_list 

Where search_conditions 

在使用 Select Into 插入数据时,要注意下面几点: 

☆在某个数据库中使用 Select Into 插入数据时,设置该数据库的 Select Into/Bulk Copy 为真。 

☆新表不能存在,否则会产生错误信息。 

☆新表中的列和行是基于查询结果集 

☆要插入的数据不记录在日志中。 

☆在select_list 中出现的列应该使用别名,否则,新表中的列没有列名。没列名的表只能通过 Select * From new_table_name 
的形式查询。因此,应该为列起个别名。 

☆这种方法多用在对列进行各种计算的情况。 

例子: 

Select number,name 

Into newcust1 

From students 

创建新的表newcust1,插入students表中的number和name字段的所有数据。 

补充:如果要插入所有字段的记录,则“Select *”,也可在“From students”后加条件,方法和上个例子一样。 

(6)用 UPdate 语句修改表中的数据 

Update 语句用来修改表中已存在的数据。Update 语句既可以一次修改一行数据,也可以一次修改许多行,甚至可以一次修改表中的全部数据。Update 
语句使用 Where 子句指定要修改的行,使用 Set 子句给出新的数据。新数据可以是常量,也可以是指定的表达式,还可以是使用 From 子句来自其他表的数据。 


Update 语句的语法如下: 

Update {table_name|view_name} 

Set {column_list}=expression [,. . .] 

[Where clause] 

在使用 Update 语句时,如果没有使用 Where 子句,那么就对表中所有的行进行修改。如果使用Update 
语句修改数据时与数据完整性约束有冲突,那么修改就不会发生,整个修改事务全部滚回。例如,这种冲突可能是所输入的值是错误的数据类型,或者所输入的值违背了在该列定义的规则约束,等等。 


例子: 

Use cust 

Update students 

Set name=name+"007" 

Where number>100 

打开cust数据库,修改students表,使number>100的数据的name的值全部加"007"。 

4.用 Delete 语句删除表中的数据 

当数据库中的数据不需要的进修可以删除。一般情况下,删除数据使用 Delete 语句。Delete 语句可以一次 
回答者: yeqiezi - 高级经理 六级   2-5 08:46
我来评论>>
评价已经被关闭    目前有 1 个人评价
          好
      0% (0)不好
      100% (1)
相关内容
      • 谁能把SQL的入门以及下载地址和基本操作详细说下谢谢
      • 谁能帮我做一个以SQL的数据库为底本,用C,C++或VB实...
      • access导入MSSQL 后查询表不能正常怎么办
      • Sql存储过程问题,求高手解决
      • SQL Server 2005数据库管理与应用高手修炼指南 pdf 下载
       更多相关问题>>
      查看同主题问题:基本操作 
其他回答    共 3 条
select 
回答者: catjj1748 - 魔法师 五级   2-5 08:52
1、说明:创建数据库 


CREATE DATABASE database-name 


2、说明:删除数据库 


drop database dbname 


3、说明:备份sql server 


--- 创建 备份数据的 device 


USE master 

EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat' 


--- 开始 备份 


BACKUP DATABASE pubs TO testBack 


4、说明:创建新表 


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_old definition only 


5、说明: 


删除新表:drop table tabname 


6、说明: 


增加一个列: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(col….) 


删除索引:drop index idxname 


注:索引是不可更改的,想更改必须删除重新建。 


9、说明: 


创建视图:create view viewname as select statement 


删除视图:drop view viewname 


10、说明:几个简单的基本的sql语句 


选择:select * from table1 where 范围 


插入:insert into table1(field1,field2) values(value1,value2) 


删除:delete from table1 where 范围 


更新:update table1 set field1=value1 where 范围 


查找: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 table1 


最小:select min(field1) as minvalue from table1 


11、说明:几个高级查询运算词 


A: UNION 运算符 


UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 
一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 


B: EXCEPT 运算符 


EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 
(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 a.a = b.c 


B:right outer join: 


右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 


C:full outer join: 


全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 


其次,大家来看一些不错的sql语句 


1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 


法一:select * into b from a where 1<>1 


法二:select top 0 * into b from a 


2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用) 


insert into b(a, b, c) select d,e,f from b; 


3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) 


insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件 


例子:..from b in '"&Server.MapPath(".")&"/data.mdb" &"' where.. 


4、说明:子查询(表名1:a 表名2:b) 


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) 


5、说明:显示文章、提交人和最后回复时间 


select a.title,a.username,b.adddate from table a,(select max(adddate) adddate 
from table where table.title=a.title) b 

6、说明:外连接查询(表名1:a 表名2:b) 


select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c 


7、说明:在线视图查询(表名1:a ) 


select * from (SELECT a,b,c FROM a) T where t.a > 1; 


8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括 


select * from table1 where time between time1 and time2 


select a,b,c, from table1 where a not between 数值1 and 数值2 


9、说明:in 的使用方法 


select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 


10、说明:两张关联表,删除主表中已经在副表中没有的信息 


delete from table1 where not exists ( select * from table2 where 
table1.field1=table2.field1 ) 


11、说明:四表联查问题: 


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 ..... 


12、说明:日程安排提前五分钟提醒 


SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 


13、说明:一条sql 语句搞定数据库分页 


select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 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和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,col2,...) 


20、说明:列出数据库里所有的表名 


select name from sysobjects where type='U' 


21、说明:列出表里的所有的 


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 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 3 


23、说明:初始化表table1 


TRUNCATE TABLE table1 


24、说明:选择从10到15的记录 


select top 5 * from (select top 15 * from table order by id asc) table_别名 order 
by id desc 


随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现) 


对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环: 



Randomize 

RNumber = Int(Rnd*499) +1 


While Not objRec.EOF 

If objRec("ID") = RNumber THEN 

... 这里是执行脚本 ... 

end if 

objRec.MoveNext 

Wend 


这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 
的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 
等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了? 



采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示: 


Randomize 

RNumber = Int(Rnd*499) + 1 


SQL = "SELECT * FROM Customers WHERE ID = " & RNumber 


set objRec = ObjConn.Execute(SQL) 

Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email") 


不必写出RNumber 
和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。 



再谈随机数 


现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 
示例扩展一下就可以用SQL应对上面两种情况了。 


为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录: 


SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & 
" OR ID = " & RNumber3 


假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 
或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码): 

SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber 
& "+ 9" 


注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。 


随机读取若干条记录,测试过 


Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id) 

Sql server:select top n * from 表名 order by newid() 

mysql select * From 表名 Order By rand() Limit n 


Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查) 


语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on 
table1.fd1,table2.fd1 where ... 


使用SQL语句 用...代替过长的字符串显示 


语法: 


SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end 
as news_name,news_id from tablename 

Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename; 


Conn.Execute说明 


Execute方法 


该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种: 


1.执行SQL查询语句时,将返回查询得到的记录集。用法为: 


Set 对象变量名=连接对象.Execute("SQL 查询语言") 


Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。 


2.执行SQL的操作性语言时,没有记录集的返回。此时用法为: 


连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option] 


•RecordAffected 
为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。 


•Option 
可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。 


•BeginTrans、RollbackTrans、CommitTrans方法 


这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。 



事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。 


BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。 

 

  13

回答者: xiaojiexiongqi

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值