--建库 if exists(select * from sys.sysdatabases where name='wf') begin use master drop database wf end go create database wf on (name=N'wf',filename=N'E:\MyCode\ETC收费站\ETC收费站\ETC_Data\wf.mdf',size=3mb,maxsize=unlimited,filegrowth=1)
--建库
if exists(select * from sys.sysdatabases where name='wf')
begin
use master
drop database wf
end
go
create database wf
on
(name=N'wf',filename=N'E:\MyCode\ETC收费站\ETC收费站\ETC_Data\wf.mdf',size=3mb,maxsize=unlimited,filegrowth=1)
log on
(name=N'wf',filename=N'E:\MyCode\ETC收费站\ETC收费站\ETC_Data\wf_log.ldf',size=3mb,maxsize=unlimited,filegrowth=1)
go
use wf
go
if exists(select * from sys.sysobjects where name='wf' )
begin
drop table wf
end
--建表、建束缚、关系
use wf
go
create table tableok
(
col1 int,
col2_notnull int not null,
col3_default nchar(1) not null default('男'), --默许男
col4_default datetime not null default(getdate()), --默许得到系统时间
col5_check int not null check(col5_check>=18 and col5_check<=55), --添加束缚,数据值在18到55之间
col6_check nchar(9) not null check(col6_check like 'msd0902[0⑼][^6⑼]'), --添加束缚,数据值前7位必须是‘msd0902’,倒数第两位可以是0⑼中任意1个数字,最后1位不是6⑼之间的数字。
cola_primary nchar(5) not null primary key, --建立主键
colb_unique int unique, --唯1束缚
col7_Identity int not null identity(100,1), --自增长,从100开始,每列值增加1个
col8_identity numeric(5,0) not null identity(1,1) --自增长,从1开始,每列值增加1个,最大值是5位的整数
col9_guid uniqueidentifier not null default(newid()) --使用newid()函数,随机获得列值
)
--alter
--主外键/援用/关系 束缚
alter table 从表名 [with check]--启用 with nocheck--禁用束缚
add constraint FK_主表名_从表名
foreign key (从表中的字段名) references 主表名 (主表中的字段名)
--其它非主外键束缚
alter table wf
add constraint 束缚名 束缚类型 具体的束缚说明
alter table wf--修改联合主键
add constraint Pk_cola_primary primary key(cola_primary,col1)
--⑴.insert 【into】 <表名>【列名】 values <值列表>
-⑴)全部【列名】 可以省略
insert stuinfo values('','','')
create table outtable
(
id int not null primary key,
[name] nvarchar(4) not null,
adrress nvarchar(20) default '地址不详'
)
truncate table outtable
alter table outtable alter column id int identity(4,1)
insert outtable values (1,22,'')
insert outtable values(2,32,'')
insert outtable values(3,33,'')
-⑵)部份
insert stuinfo (stuno) values ('')
-⑶)自动增长列,不能手动插入。将列名、列值省略
--⑵多行插入
--⑴)从1个现有表中取出所取字段插入到目标表中
insert into stuinfo (stuno,stuname) select stuno,stuname from stumarks
insert into stuinfo(stuno) select stuno from stumarks
--⑵)从现有的表中取出数据,创建1个新表,将数据插入到新表中
select [列名] into <表名> from <源表名>
select id as '编号',[name] into newtable from outtable
select cast(id as varchar(4))+cast([name] as nvarchar(4)) as '编号及姓名' ,id into newtable from outtable
select * from newtable
drop table newtable
--⑶)union 现有的多个表中取数据放入现有的表3中
insert into<表名3> [列名]
select * from 表1 union
select * from 表2
-⑶.更新语句 update <表名> set <列名=更新值> [where <更新条件>]
---注意:1般where不要省略,如不写将修改全部表
-⑷truncate删除数据
--比delete只能全部删除数据,不能部份删除,删除的效力高,可以重置自增长列
select * from stumarks
select * from stuinfos
--给考试成绩各提5分,100分封顶。
update stumarks set writtenexam=100
where writtenexam>95
update stumarks set labexam=100
where labexam>95
update stumarks
set writtenexam=writtenexam+5
where writtenexam+5<=100
update stumarks
set labexam=labexam+5
where labexam+5<=100
select examno,stuno,writtenexam+5 as 笔试,labexam+5 as 机试 from stumarks where writtenexam+5<=100 and labexam+5<=100
create table t
(
id int ,
name nchar(4),
dt datetime,
age int,
score int
)
insert t values (1,'a',getdate(),20,50)
insert t values (2,'b',getdate(),21,60)
insert t values (3,'c',getdate(),21,100)
insert t values (4,'d',getdate(),23,80)
select * from t
select top 2 * from t
select top 60 percent * from t
select top 5 * from products
select top 5 percent * from products
--启别名:两种方式 As(可省略) 、=
select productid as '编号' from products
select productid '编号' from products
select '编号'=productid from products
select employeeid from employees
--declare @a nvarchar(6)
--set @a='员工编号为:'
select N'员工编号为:'+cast(employeeid as nvarchar(2)) from employees
select distinct country from suppliers order by country
select * from t
select * from products
select * from products order by 4 asc,6 desc
select * from products where unitprice>16 and productname like 'T%' or productid=16
select * from suppliers where country in('japan','italy')
(1)char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区分在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有到达指定的长度时将自动以英文空格在其后面填充,使长度到达相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31⑴(2,147,483,647)个字符。
后面3种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写进程序的朋友对Unicode应当很了解。字符中,英文字符只需要1个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这类不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
(2)datetime和smalldatetime
datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之3秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
(3)bitint、int、smallint、tinyint和bit
bigint:从⑵^63(⑼223372036854775808)到2^63⑴(9223372036854775807)的整型数据。
int:从⑵^31(⑵,147,483,648)到2^31⑴(2,147,483,647)的整型数据。
smallint:从⑵^15(⑶2,768)到2^15⑴(32,767)的整数数据。
tinyint:从0到255的整数数据。
bit:1或0的整数数据。
(4)decimal和numeric
这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左侧和右侧可以存储的10进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右侧可以存储的10进制数字的最大个数,s必须是从0到p之间的值,默许小数位数是0。
(5)float和real
float:从⑴.79^308到1.79^308之间的浮点数字数据。
real:从⑶.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。
SELECT --从
数据库表中检索数据行和列
select col1,col2,col3.....from table
INSERT --向
数据库表添加新数据行
insert into table(col1,col2....) values(value1,value2...)
insert into table(col1,col2....) select col1,col2...from table
DELETE --从
数据库表中删除数据行
delete from table
UPDATE --更新
数据库表中的数据
update table set col1=value,......
--数据定义
CREATE TABLE --创建1个
数据库表
create table tbame (col1 int,col2 char(20))
DROP TABLE --从
数据库中删除表
drop table tbname
ALTER TABLE --修改
数据库表结构
--增加列
alter table #a add col3 int
--删除列
alter table #a drop column col3
--增加列的默许值
alter table tbname add CONSTRAINT tf_name default 'a' for col2 CREATE VIEW --创建1个视图
create view view_name as
select * from tbname where ....
DROP VIEW --从
数据库中删除视图
drop view view_nameCREATE INDEX --为
数据库表创建1个索引
--创建简单的非聚集索引 CREATE INDEX index_name ON tbname (VendorID);
--创建简单的唯1非聚集索引
CREATE UNIQUE INDEX index_name
ON tbname (VendorID);
DROP INDEX --从
数据库中删除索引
drop index index_name on tbnameCREATE PROCEDURE --创建1个存储进程
create procedure name as
begin
......
end
DROP PROCEDURE --从
数据库中删除存储进程
drop procedure nameCREATE TRIGGER --创建1个触发器
create trigger name on tbname
FOR INSERT,UPDATE AS
.......
DROP TRIGGER --从
数据库中删除触发器