★创建数据库:create database 数据库名;
★删除数据库:drop database 数据库名;
★表的维护:
建表:create table 表名(列名及列的类型);
增加列:alter table 表名 add 列名 <约束条件>;
删除列:alter table表名 drop column 列名;
插入列值(正行同时插入):insert into 表名(列名)values(列值);——注:列名与列值要一一对应
修改列值(单列):update 表名 set 列名=''(若插入值为数字类型则不加''),where 条件;
删除行:delete from 表名 where 条件;—— 注:1. 省略where子句,将会删除整个表;2.用delete删除的数据将永远丢失
清空表格:truncate table 表名
13:05 2009-12-1
★创建索引:
create [unique(唯一)][clustered(聚簇)|nonclustered(非聚簇)]
index 索引名 on {表名|视图名}
(列名[asc(升)|desc(降)])
[with fillfactor=填充因子的值]
[on filegroup]
例子:
例1:创建简单索引(非聚集索引)
CREATE INDEX IX_city
ON city (cityname)
例2:创建联合索引
CREATE INDEX IX_city_1
ON city (cityname, citylevel)
例3:创建唯一索引
CREATE UNIQUE INDEX IX_city_2
ON city (cityname)
例4:创建聚集索引
CREATE CLUSTERED INDEX IX_city_3
ON city (cityname)
★数据的查询:
简单查询:select * from * ——注:查询所有表中的所有的列
select 列名 from 表名 where 条件
使用top关键字:select [top 数字]|[top 数字 percent] 列名 from 表名 where 条件
使用distinct关键字:select distinct 列名 from where 条件
使用计算列:select 列名+运算符+数字 from 表名
操作查询的别名:
命名列别名的三种方式:
= 新名=旧名
AS 旧名 AS 新名
空格 旧名 新名
例子:select 书名=title,价格=price from titles
select title as 书名,price as价格from titles
select title书名,price 价格from titles
13:09 2009-12-2
△高级查询:
★内连接:①等值连接:使用"="
select * from 表名1 inner join 表名2 on 表名1.列名=表名2.列名
②不等值连接:使用>、>=、<=、<、!>、!<和<>
★外连接:①左连接:
select 列名 from 表名1 left outer join 表名2 on 条件
②右连接:
select 列名 from 表名1 right outer join 表名2 on 条件
③全连接:
select 列名 from 表名1 full outer join 表名2 on 条件
★★小结★★:
□在内连接中:
from a inner join b on a.列名=b.列名 ===(等价) from a,b where a.列名=b.列名
□加上限制条件:
from a inner join b on a.列名=b.列名 where 条件 ===(等价) froma,b where a.列名=b.列名 and 条件
或者 from a inner join b on a.列名=b.列名 and 条件 ===(等价) froma,b where a.列名=b.列名 and 条件
④自连接:
select 列名 from a a1 join a a2 on 条件
⑤多表连接:
1.SQL Server规定:一个SELECT语句可以连接的表的最大数目是64。
2.通常情况下,一个SELECT语句最多连接8--10个表。
★使用统计函数:
① sun:select sum(列名) from 表名
注:
1.>Sum([ all ]列名):返回所有列的和
2.>Sum(distinct 列名):返回区分列的和
3.>数字类型包括:int、smallint、tinyint、decimal、numeric、float、real、money 和 smallmoney
4.>如果列字段数据类型是非数字类型的则函数返回“0”
② avg:select avg(列名) from 表名
注:
1.>返回组中值的平均值。空值将被忽略。
2.>ALL:对所有的值进行聚合函数运算。ALL 是默认设置。
3.>DISTINCT:指定 AVG 操作只使用每个值的唯一实例,而不管该值出现了多少次。
③ max 和 min: select max(列名)或min(列名) from 表名
注:
1.>MAX 和MIN 可用于数字列、字符列或 datetime列,但不能用于 bit 列、text和image
④ count:select count(列名) from 表名
注:
1.>ALL:对所有的值进行聚合函数运算。ALL 是默认设置。
2.>DISTINCT:指定 COUNT 返回唯一非空值的数量。
3.>*:指定应该计算所有行以返回表中行的总数。COUNT(*) 不需要任何参数,而且不能与 DISTINCT 一起使用,包括含有空值的行。
⑤与统计函数一起使用where子句:
例子:
SELECT COUNT(*), AVG(price)
FROM titles
WHERE advance > $1000 ——则结果返回advance>1000的所有行的聚合值
⑥group by子句:
select 列名或聚合函数 from 表名 where 条件 group by 分组列
⑦having子句:
select 分组列或聚合函数 from 表名 where 条件 group by 分组列 having 条件
注:
**WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
**GROUP BY 子句用来分组 WHERE 子句的输出。
**HAVING 子句用来从分组的结果中筛选行。
⑧where和having比较:
1.>HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。
2.>WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。
3.>HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
△嵌套查询:
★简单嵌套查询:
Select <目标列表达式序列>
From <表或视图序列>
Where [条件表达式]
( Select <目标表达式>
From <表或视图名>
Where [表达式] )
[ Group by 列名序列
[ Having 组条件表达式
( Select <目标表达式>
From <表或视图名>
Where [表达式] ) ]]
[ ORDER BY 列名[ASC|DESC] ]
12:30 2009-12-3
★表中的约束:
①primary key:
增加主键:alter table 表名 add constraint 约束名(列名)
删除主键:alter table 表名 drop constraint 约束名
查询主键:sp_helpconstraint 表名
sp_pkeys 表名
②unique(唯一):
创建unique(唯一)约束:
create table 表名(列名 数据类型 [constraint 约束名] unique [CLUSTERED | NONCLUSTERED] [,…n])
添加uqique约束:
alter table 表名 add [constraint] 约束名 unique [CLUSTERED | NONCLUSTERED] (列名 [,…n])
删除unique约束:
alter table 表名 drop [constraint] 约束名
③check:
创建check约束:
create table 表名(列名 数据类型 [constraint] 约束名 check)
添加check约束:
alter table 表名 add 约束名 check(约束条件)
删除check约束:
alter table 表名 drop [constraint] 约束名
14:24 2009-12-5
★视图
视图的创建:
create view 视图名 [with encryption] as 查询语句 [with check option]
注:
①with encryption :定义加密视图
②with check option:强制所有通过视图修改的数据满足
③“查询语句”中指定的选择条件
视图的删除:
drop view 视图名
修改视图定义:
alter view 视图名 [with encryption] as 查询语句(待改)[with check option]
★编程结构:
①SQL中的两种变量:
1.>局部变量 @变量名
2.>全局变量 @@变量名
注:变量必须先声明,后使用。
Declare @name 数据类型
Declare @@ name 数据类型
②while:
While 条件
Begin
执行语句
[break]
[continue]
End
注:
1.>CONTINUE语句可以使程序跳出本次WHILE循环。
2.>BREAK语句则使程序跳出整个循环,结束WHILE语句的执行
③case:
Case
when 逻辑表达式 then 结果
Else 结果
end
④游标:
1.>游标有严格的生命周期,顺序如下;
(1)声明(DECLARE):定义游标的名称、类型和属性。
(2)打开(OPEN):打开和填充数据。
(3)提取(FETCH)数据:从结果集中读取单行的数据
(4)关闭(CLOSE):停止游标使用的查询,可以再次打开。
(5)释放(DEALLOCATE):删除游标释放资源
2.>语法:
DECLARE 游标名 [scroll]
CURSOR FOR SELECT * FROM 表名
OPEN 游标名
FETCH NEXT FROM 游标名
CLOSE 游标名
DEALLOCATE 游标名
注:SCROLL:所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未指定 SCROLL,则 NEXT 是唯一可以使用的提取选项。
⑤事务:
□事务处理控制语句有以下4个:
Begin transaction transaction_name
开始一个事务单元
Commit transaction_name
完成一个事务单元
Rollback transaction_name
回滚一个事务单元
Save transaction_name
设置保存点
○例子:
begin transaction
use pubs
go
insert into student values (7,'李勇','男',20,'y01')
--save transaction demo
insert into student values (2,'刘晨','男',21,'y02')
--rollback transaction demo
if @@error > 0 or @@rowcount >0
begin
rollback transaction
end
else
commit transaction
go
★存储过程:
①创建存储过程:
create proc 存储过程名
[@参数 数据类型 [=default][OUTPUT]]
as SQL语句
②删除存储过程:
Drop proc 存储过程名
③修改存储过程:
Alter proc[dure] 存储过程名
[with encryption]
As SQL语句
★触发器:
①创建触发器:
CREATE TRIGGER 触发器名
ON {表名|视图名}
{ FOR | AFTER | INSTEAD OF } { [DELETE][,][INSERT][,][UPDATE] }
AS
BEGIN
SQL语句
END
②修改触发器:
ALTER TRIGGER 触发器名称
ON {表名|视图名}
{ FOR | AFTER | INSTEAD OF } { [DELETE][,][INSERT][,][UPDATE] }
AS
BEGIN
SQL语句集合
END
③删除触发器:
DROP TRIGGER 触发器名
④修改触发器的名称:
sp_rename oldname, newname
mssql时整理
最新推荐文章于 2024-08-27 14:28:37 发布