sp_helpdb
--显示系统数据库信息
alterdatabasetestDBmodifyname=test_db
--更改数据库testDB的名称为test_db
alterdatabasetest_dbmodifyname=test01
--更改数据库test_db的名称为test01
selectDATABASEPROPERTYEX('db01','version')
-------------------------
selectDATABASEPROPERTYEX('db01','Recovery')
-------------------------
createdatabaseNorthwind_snap
On(name=Northwind,filename=
'F:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA\Northwind000.mdf')
assnapshotofNorthwind
-------------------------
格式:
createdatabasedatabase_snapshot_name
on
(name=logic_snapshot_name,
filename='os_file_name.mdf')
assnapshotofsource_database_name
-------------------------
createdatabaseschool_new_s
on
(name=school,---数据库=>属性=>文件=>逻辑名称
filename=
'F:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA\school_n_s.mdf')
assnapshotofschool_new
消息5014,级别16,状态3,第1行
数据库'school_new'中不存在文件'school_new'。
-------------------------
createdatabasetest01_s
on
(name=testDB,
filename=
'F:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA\test01_n_s.mdf')
assnapshotoftest01
-------------------------
restoredatabasetest01
fromdatabase_snapshot='test01_s'
-------------------------
注意:
char(10)和varchar(10)的区别
char(10)和nchar(10)的区别
返回目录
--临时表-------------------
--局部表
createtable#temp0
(
idint,
namenvarchar(10)
)
--创建一个(局部)临时表
insert#temp0values(11,'aa')
--向临时表插入值
select*from#temp0
--访问临时表
--全局表
Sqlquery1:
createtable##temp00
(
idintnotnull,
namenvarchar(20),
sexint
)
--创建一个全局临时表
insert##temp00values(22,'aaa',1)
--向全局临时表中插入数据
Sqlquery2:
select*from##temp00
--新建另一个查询,访问全局临时表
-----------------------
createtablestu1
(
idintidentity(12,2),
namenvarchar(20),
ageintdefault18
)
--创建一个表
altertablestudent_info
add身高intnull
--向表student_info添加一个新的列身高,数据类型为型int,可空
altertablestudent_info
altercolumn身高float
--在表student_info中修改列’身高’的数据类型为float型
altertablestudent_info
dropcolumn身高
--从表student_info中删除’身高’列
返回目录
--constraint(约束)-----------------
返回目录
--rule(规则)---------------------
createrulebetween_0_100
as
@xbetween0and100
--创建一个规则between_0_100,要求:
between0and100
--规则类似于约束,但:
一个列可以有多个约束,一个约束只能应用到一个列;
--一个规则可以应用到多个列,一个列只能有一个规则.
sp_bindrulebetween_0_100,'stu1.score'
--在stu1表的score'列上应用规则between_0_100
sp_bindrulebetween_0_100,'stu1.age'
--在'stu1表的age列上应用规则between_0_100
sp_unbindrule'stu1.age'
--在某一列上取消规则
sp_unbindrule'stu1.score'
--在某一列上取消规则
droprulebetween_0_100
--删除某个规则
select
sc.stu_id,
sc.stu_name
from
score_infoass
innerjoin
student_infoassc
on
sc.stu_id=s.stu_id
--上下两句效果相同
select
sc.stu_id,
sc.stu_name
from
score_infoass,student_infoassc
wheresc.stu_id=s.stu_id
-----------------------
select12*11
--132
select2*PI()
--6.28318530717959
返回目录
--rollup同cube的区别-----------------------
--rollup:
生成包含小计和合计的报表
-------class_info表----------
selectc_depart,c_name,SUM(c_count)
fromclass_info
groupbyc_depart,c_namewithrollup
--按专业统计人数
selectc_collage,c_depart,COUNT(c_depart)
fromclass_infogroupbyc_collage,c_departwithrollup
--统计专业班级数,及每个系的班级数
select*fromA
selectid,name,sum(stock)
fromA
groupbyid,namewithrollup
--按id进行合计
selectid,name,sum(stock)
fromA
groupbyid,namewithcube
--按groupby后的每一项进出合计
selecttop3withties*fromscore_infoorderbyyuwendesc
--按yuwen成绩降序排列选出前三行,如果有多个同学并列第三,则全部列出(withties的作用)
declare@iint
set@i=20
selecttop(@i)percent*fromstudent_info
--列出前20%的同学(向上取整:
如若20%为3.1个人,则列出四个)
declare@iint
set@i=20
selecttop(@i+20)percent*fromstudent_info
--40%
declare@iint
set@i=20
selecttop(@i+20)percentwithties*fromstudent_infoorderbystu_age
--列出末位的平局
updatetop
(2)student_infosetstu_home='河南郑州'
---更新表student_info最上面两行
selectstu_name,stu_sex,stu_agefromstudent_infoorderbystu_sex
computeavg(stu_age)bystu_sex
--将显示四个表
--
select*fromstudent_infowherestu_age%2=1
--年龄除2的余等于1
select*fromstudent_infowherestu_age%3>=1
--年龄除3的余大于等于1(不等于0)
select*fromstudent_infowherestu_age%3!
=0
--年龄除3的余不等于0
select*fromstudent_infowherestu_age%3<>0
--年龄除3的余不等于0
altertablestudent_info
dropcolumnstu_class
--在一个表中删除一个列
返回目录
--inner\left\right\full\cross连接-------
--innerjoin时,两表数据均按条件筛选;
--leftjoin时,左侧的表数据全选;rightjoin时,右侧的表数据全选
--fulljoin\crossjoin时,两表数据均全选
--innerjoin----------------
selects.stu_name,c.c_name
fromstudent_infoassinnerjoinclass_infoasc
ons.stu_class=c.c_id
--按条件进出内连接,在两个表中各选若干列组成一个新的数据集(表)
selects.stu_id,s.stu_name,s.stu_class,t.t_name,t.t_class_id
fromstudent_infosinnerjointeacher_infot
ons.stu_class=t.t_class_id
--as关键字可以省略
selects.stu_name,c.c_name,s.stu_sex
fromstudent_infoassinnerjoinclass_infoasc
ons.stu_class=c.c_idands.stu_sex='女'
--把s.stu_sex='女'作为连接条件
--下句中把s.stu_sex='女'作为限定条件,效果相同
selects.stu_name,c.c_name,s.stu_sex
fromstudent_infoassinnerjoinclass_infoasc
ons.stu_class=c.c_id
wheres.stu_sex='女'
-----------------------
selects.stu_name,c.c_name,s.stu_sex
fromstudent_infoassjoinclass_infoasc
ons.stu_class=c.c_id
wheres.stu_sex='女'
--innerjoin时,inner可以省略
selects.stu_name,c.c_name,s.stu_sex
fromstudent_infoassjoinclass_infoasc
ons.stu_class=c.c_id
wheres.stu_sex='女'
--leftjoin-----------------
selects.stu_id,s.stu_name,s.stu_class,t.t_name,t.t_class_id
fromstudent_infosleftouterjointeacher_infot
ons.stu_class=t.t_class_id
--leftjoin-----------------------
selects.stu_id,s.stu_name,s.stu_sex,s.stu_class,t.t_name,t.t_class_id
fromstudent_infosleftouterjointeacher_infot
ons.stu_class=t.t_class_idands.stu_sex='男'
注意上句同下面一句存在严重区别!
!
!
区别:
在上句中,ands.stu_sex='男'这个条件等于没有,因为leftouterjoin已经决定了选择s表中的所有值;
而在下一句中,wheres.stu_sex='男'这个条件,是对连接后的集合进行条件限定,
selects.stu_id,s.stu_name,s.stu_sex,s.stu_class,t.t_name,t.t_class_id
fromstudent_infosleftouterjointeacher_infot
ons.stu_class=t.t_class_id
wheres.stu_sex='男'
--以左表为主(全部显示),把右表符合条件的数据同左表匹配起来,
---rightjoin--------------------
selects.stu_id,s.stu_name,s.st