-
转-Vista扩展的平铺现象解决 - [代码/Code]
Lenne @ http://zl.pcw.com.cn/post/139/9409
上次用电脑用着用着,不知怎么回事,在我的电脑里,所有硬盘盘符下面的状态条都不见里, 我是Vista Ultimate系统,应该有容量条显示的. 这是由于"视图"设置错误引起的, 但是在视图设置里 ,发现没有平铺的选项,而变成了"扩展的平铺"
下面的vbs脚本通过修改注册表,解决了"扩展的平铺" 恢复了原先的平铺.因为遇到此现象的不是我一人,所以写上来分享一下.
将下面的蓝色字体内容完整复制到记事本txt文档中,,然后扩展名改为vbs就可以了,双击直接使用.
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'explorer.exe'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
Set objRegistry=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")
strKeyPath1 = "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags"
strKeyPath2 = "Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU"
strKeyPath3 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Streams\Defaults"
DeleteSubkeys HKEY_CURRENT_USER, strKeypath1
DeleteSubkeys HKEY_CURRENT_USER, strKeypath2
DeleteSubkeys HKEY_CURRENT_USER, strKeypath3
Sub DeleteSubkeys(HKEY_CURRENT_USER, strKeyPath)
objRegistry.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubkeys
If IsArray(arrSubkeys) Then
For Each strSubkey In arrSubkeys
DeleteSubkeys HKEY_CURRENT_USER, strKeyPath & "\" & strSubkey
Next
End If
objRegistry.DeleteKey HKEY_CURRENT_USER, strKeyPath
End Sub----------------------By Lenne
个人把这个vbs文件也传上来,方便那些不会保存vbs的朋友们。
下载地址 : http://feng26.blogbus.com/files/12453842970.vbs
-
SQL Server 2000简答题 - [代码/Code]
明天就SQL考试了,所以总结了一下书后的简答题,希望对一些人有些帮助!!
1.试述DBMS的基本功能?
答:
数据定义 DDL
数据操作 DML
数据库运行管理 DCL
数据库维护
数据安全与通信
2.SQL语言的特点?
答:1.高度非过程化;2.面向集合的操作方式;3.语法简单
3.SQL Server数据库对象都有哪些?
答:关系图、表、视图、存储过程、用户、角色、规则、默认、用户定义数据类型、用户定义的函数。
4.char和varchar类型在存储上有什么区别?
答:char定义存储字符类型,占用 “定义时的长度”字节;
varchar变长存储字符类型,占用 “1+实际存储长度” 字节。
5.简述空值(NULL)的含义,以及和0、空格的区别?
答:空值的含义是信息空缺、未知或者不可用,它不等同于任何一个具体值。而0值和空格都是具体数值,有着固定含义,因此也就和NULL值有着本质的区别。
6.DROP TABLE 语句与 DELETE FROM<表名>的作用相同?为什么?
答:不同。因为DELETE FROM<表名>是删除表中的数据行,而DROP TABLE是删除表,并且是表的定义和数据以及与表相关的数据对象都被删除。
7.简述一次插入多行的步骤?
答:在INSERT语句中,使用子查询可以实现一次插入多行,
格式: insert into<表名>[<列名表>]<子查询>
举例: insert into 学生 select 学号,姓名 from 学生基本信息表
8.简述插入操作过程中的常见异常情况?
答:插入数据的个数多于列的个数;提供数据类型与列类型不兼容;插入数据时违背了约束。
9.简述修改操作过程中的常见异常情况?
答:没有要修改的数据;设置新值时,数据类型不兼容;修改数据是违背了约束。
10.简述删除操作过程中的常见异常情况?
答:没有要删除的数据;删除数据是违背了约束。
11.什么是别名技术?
答:就是给表名重新起一个简洁的名字。
例如 select x.姓名,c.课程号 from 学生基本信息表 x,成绩表 c
where x.姓名='田甜' and x.学号=c.学号
其中x就是表示 学生基本信息表 ,c 表示 成绩表
12.如何正确使用GROUP BY子句?
答:对于GROUP BY子句中的列,在使用上有一个限制,出现在查询的SELECT列表中的列必须同时出现在GROUP BY子句中。而SELECT语句包含聚合函数时这一规则是一个例外。
13.试举例说明 COUNT(*)与COUNT(<列名>)之间的区别?
答:COUNT(列名)统计该列的非NULL值,而COUNT(*)对所有行计数,无论列中是否包含NULL值。
例子:
select 学号,count(*) as '所学课程总数',count(结束日期) as '已经学习完成的课程数'
from 成绩表
where 学号 like 'F%'
group by 学号
执行后就能看到两者的区别了。
14.试说明HAVING子句与WHERE子句之间的区别?
答:区别
1)having子句必须结合group by子句使用,where不结合group by子句使用;
2)where子句不能用聚集函数,而having子句可以。
15.试述在查询过程中如何定位或者使用空值?
答:如果要在查询中使用空值,则需在where子句中使用is null或 is not null。
例如: select 学号,姓名 from 学生基本信息表
where 备注 is null -
[原创]SQL常用语法手册 - [代码/Code]
这学期有SQL的课程,但是普遍学习的不是很好,主要原因是使用的教材太凌乱了,所以就编写了SQL常用语法手册。希望能给由此需要的人带来作用。本文附带排好版的WORD文档。
点击下载文档
大概内容如下(简选)
相应符号说明:
-- 后面就是注释说明,不参与执行
{} 内是必须写的内容 [] 内可以不写 | 表示或者 <>内的数据要写
数据库
1.创建数据库格式:
create database <数据库名>
on(name=数据库文件名,
filename='数据库存放的物理位置',
size=数据库初始化大小,
filegrowth=文件增长率,
maxsize=最大文件大小)
log on
(name=,
filename=,
size=,
filegrowth=,
maxsize=)
2.删除数据库格式:
drop database <数据库名称>
表格
1.创建表格式:
create table <表名>
( <列名> <列类型> <列说明>…,
[constraint <约束名称><约束条件>] )
<列类型>是列的数据类型。
<列说明>说明列的长度、列的默认值、主键等有关该列的约束条件。
2.修改表格式:
alter table <表名>
{ add <列说明>
| drop column <列名>
| alter column <列说明>
| add <约束说明>
| drop <约束> }
3.删除表格式:
drop table <表名>
4.创建主键约束:
constraint 主键约束名 primary key(被定义为主键的列名)
5.创建外键约束:
constratint 外键约束名 foreign key(本表中作为外键的列名) references 参照表(参照列)
6.check约束格式:
constraint <约束名称> check (<表达式>)
本章节例子
create table 学生基本信息表
( 学号 char(4) not null constraint PK_学号 primary key,
性别 char(2) not null default('男') constraint CK_性别 check (性别='男'or 性别='女'),
出生日期 datetime not null,
奖学金 money default(0) constraint CK_奖学金 check (奖学金>=0 and 奖学金<=5000),
constraint CK_日期 check (出生日期<入学日期) )
操纵数据
1.插入数据格式:
insert into <表名> [(列名)] values(<对应列的值表>)
列名可以不用写,但是values()里面的数据,就必须跟表格内的列相对应上,如果写列名,values()内的内容就是跟列名相对应的。
2.修改数据格式:
update<表名>
set <列>=<值>[,<列>=<值>]
[where <定位条件>]
3.删除数据格式:
delete from <表名>
[where<条件>]
Select语句
select <输出结果列表> from<表>
[where<选择条件>]
[order by<排序条件>]
[group by<分类条件>]
<排序条件>对输出结果进行排序的列明和次序说明
<分类条件>是分组统计的标准
select语句的几点补充
1.distinct关键字:
select distinct 列名 from 表名
作用:可以从查询结果中去除重复的数据行
2.TOP关键字:
select top n [percent] <列名> from <表名>
top n:表示返回前n行数据
top n percent:表示返回百分之n的数据
3.下几个关键字 多用于where子句
between and 操作符
举例来说明
where 奖学金 between 300 and 500
表示的就是奖学金在300到500的范围,包含300和500。等价于下面表达式
where 奖学金>=300 and 奖学金<=500
IN操作符:
表达式或者字段名 [not] in (列表或者子查询)
用于:表示根据表达式是包含在指定范围内还是范围外来制定表达式的搜索。
all操作符 any操作符:
all和any 都是在select语句中包含where子句时,才有意义。
语法如下:
<列名> < | > | != | <= | >= [all] | [any] <查询语句>
例子如下:
select 学号,姓名 from 学生基本信息表
where 出生日期 < all(select 出生日期 from 学生基本信息表 where 院系名称='商学院') and 院系名称='信息学院'
结果就是:查询信息学院的学生中比商学院任一学生年龄都大的学生学号和姓名
如果把all换成any,表示的就是查询信息学院的学生中比商学院某一个学生的年龄大的学生学号和姓名
all 等价于 and 逻辑关系,any相当于 or 逻辑关系
exists操作符:
[not] exists <子查询>
用于:测试子查询中是否有结果行,如果有返回 真值,否则返回 假。
LIKE关键字P200:
<字符串表达式> [not] like <可以带通配符串表达式>
通配符有四种:
% 表示任意个字符
_ 表示1个任意字符
[] 表示可以在方括号里列出的任意一个字符
[^] 表示不在方括号里列出的任意一个字符
like用处:当不能精确知道查询条件是使用。
空值:
在要查询中使用空值,需要在where子句中使用is null 或者 is not null。
举例
where 备注 is null 表示找到符合备注数据中是null的数据行
where 备注 is not null 表示找到备注数据中不是null的数据行
空值输出:
isnull (<检查表达式>,<替换值>)
<检查表达式>将被检查是否为null的表达式,可以是任何类型
<替换值>代替显示空值的值
4.group by
对于group by子句中的列,在使用上有一个限制,出现在查询的select列表中的列必须同时出现在group by子句中
group by子句都会于聚合函数使用。
聚合函数
可以用于表的所有行,不局限于group by子句:
count([distinct]<列名>) 统计<列名>中数值的个数,如果使用distinct就是先去除重复的数值,然后再进行统计。
count(*) 表示统计结果行
max()最大值 min()最小值 sum()求和 avg()求平均
--------------------------------------
having子句 常与group by 子句连用,用法跟where子句类似。
5.本章练习题 书P237,三、练习题 2
(1)查询学生基本信息表、课程表、成绩表 三张表的笛卡尔积的结果集中元组个数
select count(*) from 学生基本信息表,课程表,成绩表
(2)查询所有学生的学号、姓名、选课名称和成绩
select x.学号,x.姓名,k.课程名称,c.考试成绩 from 学生基本信息表 x,课程表 k,成绩表 c
where x.学号=c.学号 and k.课程号=c.课程号
(3)查询每门课的平均成绩
select k.课程名称,avg(c.考试成绩) as '平均成绩' from 课程表 k,成绩表 c
where c.课程号=k.课程号
group by k.课程名称
(4)查询说有女生的姓名和选课成绩
select x.姓名,k.课程名称,c.考试成绩 from 学生基本信息表 x,课程表 k,成绩表 c
where x.学号=c.学号 and k.课程号=c.课程号 and x.性别='女'
(5)查询至少选修了两门课程的学生学号和姓名
select x.学号,x.姓名 from 学生基本信息表 x,成绩表 c
where x.学号=c.学号
group by x.学号,x.姓名
having count(c.课程号)>=2
(6)查询平均分数大于等于80分的学生学号
select 学号 from 成绩表
group by 学号
having avg(考试成绩) >=80
视图
1.创建视图
create view <视图名>(<列名>……)
[with encryption]
as <查询>
[with check option]
<列名>新视图中的列名,与<查询>中的列名对应
<查询>是定义视图的select语句
with encryption:视图语句定义内容加密。
with check option:如果修改数据不满足视图定义条件,则不允许修改。
2.修改视图
alter view <视图名>(<列名>……)
[with encryption]
as <查询>
[with check option]
3.删除视图
drop view <视图名>
4.举例
(1)建立视图,名称“学生平均成绩”,它由 学号、姓名、平均考试成绩 三列组成。
create view 学生平均成绩 (学号,姓名,平均成绩)
as select x.学号,x.姓名,avg(c.考试成绩) as '平均成绩'
from 学生基本信息表 x,成绩表 c
where x.学号=c.学号
group by x.学号,x.姓名
(2)根据“学生平均成绩”视图,查询学习成绩优秀(平均成绩>=90)的学生学号
select 学号 from 学生平均成绩
where 平均成绩>=90
索引
1.创建索引
create [unique]
[clustered]|[nonclustered]
index <索引名称>
on <表名>(<列名>[,<列名>])
其中:
unique:唯一性索引
clustered:聚集索引
nonclustered:非聚集索引
2.举例
(3)在学生基本信息表上为出生日期建立索引,名称“年龄大小索引”
create index 年龄大小索引
on 学生基本信息表(出生日期)
2.删除索引
drop index <索引名称>
存储过程
1.创建存储过程
create procedure <存储过程名>
[{@<参数名><数据类型>[output]}]
as{语句>|<语句块>}
<参数名>是存储过程的输入输出参数
语句>或<语句块>定义存储过程内容的语句
2.修改存储过程
alter procedure <存储过程名>
[{@<参数名><数据类型>[output]}]
as{语句 -
边学边用SQL Server-选择查询语句Select - [代码/Code]
/*
查询与统计 P181:
select <输出结果列表> from<表>
[where<选择条件>]
[order by<排序条件>]
[group by<分类条件>]
<排序条件>对输出结果进行排序的列明和次序说明,具体的见下面的例子
<分类条件>是分组统计的标准
select语句的几点补充
---------------------------------------
distinct关键字:
select distinct 列名 from 表名
作用:可以从查询结果中去除重复的数据行
---------------------------------------
TOP关键字 P193:
select top n [percent] <列名> from <表名>
top n:表示返回前n行数据
top n percent:表示返回百分之n的数据
=============================================
以下几个关键字 多用于where子句
and、or、not 这三个逻辑表达式就不解释了
---------------------------------------
between and 操作符 P198
举一个例子来说明
where 奖学金 between 300 and 500
表示的就是奖学金在300到500的范围,包含300和500。等价于下面表达式
where 奖学金>=300 and 奖学金<=500
---------------------------------------
IN操作符P216:
表达式或者字段名 [not] in (列表或者子查询)
用于:表示根据表达式是包含在指定范围内还是范围外来制定表达式的搜索。
---------------------------------------
all操作符|any操作符 P217
all和any 都是在select语句中包含where子句时,才有意义。
语法如下:
<列名> <|>|!=|<=|>= [all]|[any] <查询语句>
例子如下:
select 学号,姓名 from 学生基本信息表
where 出生日期 < all(select 出生日期 from 学生基本信息表 where 院系名称='商学院')
and 院系名称='信息学院'
结果就是:查询信息学院的学生中比商学院任一学生年龄都大的学生学号和姓名
如果把all换成any,表示的就是查询信息学院的学生中比商学院某一个学生的年龄大的学生学号和姓名
all 等价于 and 逻辑关系,any相当于 or 逻辑关系
---------------------------------------
exists操作符P219:
[not] exists <子查询>
用于:测试子查询中是否有结果行,如果有返回 真值,否则返回 假。
---------------------------------------
LIKE关键字P200:
字符串表达式 [not] like 可以带通配符串表达式
通配符有四种:
% 表示任意个字符
_ 表示1个任意字符
[] 表示可以在方括号里列出的任意一个字符
[^] 表示不在方括号里列出的任意一个字符
like用处:当不能精确知道查询条件是使用。
---------------------------------------
空值:
在要查询中使用空值,需要在where子句中使用is null 或者 is not null。
举例
where 备注 is null 表示找到符合备注数据中是null的数据行
where 备注 is not null 表示找到备注数据中不是null的数据行
---------------------------------------
空值输出
isnull (<检查表达式>,<替换值>)
<检查表达式>将被检查是否为null的表达式,可以是任何类型
<替换值>代替显示空值的值
==============================================
对于group by子句中的列,在使用上有一个限制,出现在查询的select列表中的列必须同时出现在group by子句中
group by子句都会于聚合函数使用。
聚合函数P206-209,可以用于表的所有行,不局限于group by子句:
count([distinct]<列名>) 统计<列名>中数值的个数,如果使用distinct就是先去除重复的数值,然后再进行统计。
count(*) 表示统计结果行
max()最大值 min()最小值 sum()求和 avg()求平均
--------------------------------------
having子句 P213,常与group by 子句连用,用法跟where子句类似。
例如
group by 院系名称
having count(*)>3
表示的就是查询人数多于3人的院系
刘峰 编写 QQ:121497974
*/use 学生信息数据库
go
--===========================================================================================================
--=显示“学生基本信息表”,中的“学号”,“姓名”,“性别”和“年龄”列,(提示用现在日期减去出生日期计算 )=
--===========================================================================================================
select 学号,姓名,性别, (year(getdate())-year(出生日期)) as 年龄 from 学生基本信息表 --select的使用,我会在以后详细讲解
go
--=======================
--=显示全部学生的基本信息=
--======================
select * from 学生基本信息表
go--======================================
--=查询学生的学号,姓名,性别和出生日期=
--======================================
select 学号,姓名,性别,出生日期 from 学生基本信息表
go--==================================
--=查询男生的学号、姓名、奖学金信息=
--==================================
select 学号,姓名,奖学金 from 学生基本信息表
where 性别='男'
go--=======================================================================
--=输出奖学金大于500元,小于并等于2000元学生的学号,姓名,性别、奖学金=
--=======================================================================
select 学号,姓名,性别,奖学金 from 学生基本信息表
where 奖学金<=2000 and 奖学金>500
go--==============================
--=按性别降序显示学生的基本信息=
--==============================
select * from 学生基本信息表
order by 性别 desc -- order by 用来排序的列名 asc|desc ,其中ASC是升序排序(默认),DESC降序排序
go--===========================================================
--=输出1988年1与1日以后出生学生的学号,姓名,籍贯和奖学金=
--============================================================
select 学号,姓名,籍贯,奖学金 from 学生基本信息表
where 出生日期 > '1988-01-01'
go--====================================
--=按院系分组计算每个学院的平均奖学金=
--====================================
select AVG(奖学金)as 奖学金,院系名称 from 学生基本信息表
group by 院系名称 --分组:group by 用来分组的列名
go -
边学边用SQL Server-对表格插入数据 - [代码/Code]
/*+++++++++++++++++对表格插入数据++++++++++++++++++++++++*/
/*
给表格插入数据的方法 P154
语法:insert into <表名> [(列名)] values(<对应列的值表>)
列名可以不用写,但是values()里面的数据,就必须跟表格内的列相对应上
如果写列名,values()内的内容就是跟列名相对应的。
刘峰 编写 QQ:121497974
*/
--==========================
--=给学生基本信息表插入数据=
--==========================
use 学生信息数据库
go
delete from 学生基本信息表 --清空学生基本信息表内的数据
go
insert into 学生基本信息表 values('X101','张小力','男','1988-1-23','北京','信息学院','信息管理','2005-9-1',1500,null)
insert into 学生基本信息表 values('X102','李大鹏','男','1987-8-9','上海','信息学院','信息管理','2005-9-1',100,'班长')
insert into 学生基本信息表 values('X103','王亚丽','女','1988-10-10','北京','信息学院','信息管理','2005-9-1',500,null)
insert into 学生基本信息表 values('X104','赵一六','男','1987-6-11','山西','信息学院','信息管理','2005-9-1',500,null)
insert into 学生基本信息表 values('X105','钱七','女','1988-9-19','吉林','信息学院','信息管理','2005-9-1',150,null)
insert into 学生基本信息表 values('X106','赵爱国','男','1989-5-10','天津','信息学院','信息管理','2005-9-1',80,null)
insert into 学生基本信息表 values('X201','孙山','女','1987-2-23','上海','信息学院','计算机应用','2005-9-1',1020,'班长')
insert into 学生基本信息表 values('X202','于十','男','1989-3-17','河北','信息学院','计算机应用','2005-9-1',340,null)
insert into 学生基本信息表 values('X203','安一','男','1987-5-19','山西','信息学院','计算机应用','2005-9-1',260,null)
insert into 学生基本信息表 values('S101','万千一','男','1988-9-23','江苏','商学院','会计','2005-9-1',1500,null)
insert into 学生基本信息表 values('S102','关红','女','1987-9-19','辽宁','商学院','会计','2005-9-1',380,null)
insert into 学生基本信息表 values('S103','李立国','男','1988-3-1','上海','商学院','会计','2005-9-1',406,'班长')
insert into 学生基本信息表 values('F101','田甜','女','1986-4-10','北京','法学院','民法','2005-9-1',700,null)
insert into 学生基本信息表 values('F102','魏国庆','男','1987-12-26','山西','法学院','民法','2005-9-1',1300,null)
insert into 学生基本信息表 values('F103','孙和平','男','1988-6-15','福建','法学院','刑法','2005-9-1',400,'班长')
go
--==================
--=给课程表插入数据=
--==================
use 学生信息数据库
go
delete from 课程表
go
insert into 课程表 values('C001','英语','胡小雨')
insert into 课程表 values('C002','高等数学','李波')
insert into 课程表 values('C003','计算机原理','蔡静')
insert into 课程表 values('C004','程序设计导论','赵育')
insert into 课程表 values('C005','离散数学','李力')
insert into 课程表 values('C006','民法概论','张文')
insert into 课程表 values('C007','会计理论与方法','梦思')
go
--===================
--==给成绩表插入数据=
--===================
use 学生信息数据库
go
delete from 成绩表
go
insert into 成绩表 values('X101','C001',82,90,null,'2005-9-10','2006-1-12')
insert into 成绩表 values('X101','C002',null,83,null,'2005-9-10','2006-1-10')
insert into 成绩表 values('X101','C003',80,74,null,'2006-2-20',null)
insert into 成绩表 values('X101','C004',82,90,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X101','C005',75,80,null,'2006-2-20',null)
insert into 成绩表 values('X102','C001',76,82,null,'2005-9-10','2006-1-12')
insert into 成绩表 values('X102','C002',null,92,null,'2005-9-10','2006-1-10')
insert into 成绩表 values('X102','C003',85,62,null,'2006-2-20',null)
insert into 成绩表 values('X102','C004',85,80,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X103','C001',85,82,null,'2005-9-10','2006-1-12')
insert into 成绩表 values('X103','C002',null,78,null,'2005-9-10','2006-1-10')
insert into 成绩表 values('X103','C003',80,87,null,'2006-2-20',null)
insert into 成绩表 values('X104','C001',90,85,null,'2005-9-10','2006-1-12')
insert into 成绩表 values('X104','C002',null,67,null,'2005-9-10','2006-1-10')
insert into 成绩表 values('X104','C003',90,93,null,'2006-2-20',null)
insert into 成绩表 values('X104','C004',90,92,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X105','C001',80,93,null,'2005-9-10','2006-1-12')
insert into 成绩表 values('X105','C002',null,95,null,'2005-9-10','2006-1-10')
insert into 成绩表 values('X105','C003',82,90,null,'2006-2-20',null)
insert into 成绩表 values('X105','C004',83,83,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X106','C001',82,78,null,'2005-9-10','2006-1-12')
insert into 成绩表 values('X106','C002',null,96,null,'2005-9-10','2006-1-10')
insert into 成绩表 values('X106','C003',100,92,null,'2006-2-20',null)
insert into 成绩表 values('X106','C004',80,76,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X201','C004',90,80,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X201','C005',80,84,null,'2006-2-20',null)
insert into 成绩表 values('X202','C004',93,95,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X202','C005',86,90,null,'2006-2-20',null)
insert into 成绩表 values('X203','C004',90,91,null,'2005-9-10','2006-1-15')
insert into 成绩表 values('X203','C005',90,94,null,'2006-2-20',null)
insert into 成绩表 values('S101','C001',87,88,null,'2005-9-1','2006-1-12')
insert into 成绩表 values('S101','C007',null,85,null,'2006-2-20',null)
insert into 成绩表 values('S102','C001',65,71,null,'2005-9-1','2006-1-12')
insert into 成绩表 values('S102','C007',null,80,null,'2006-2-20',null)
insert into 成绩表 values('S103','C001',92,90,null,'2005-9-1','2006-1-12')
insert into 成绩表 values('S103','C007',null,92,null,'2006-2-20',null)
insert into 成绩表 values('F101','C001',90,95,null,'2005-9-1','2006-1-12')
insert into 成绩表 values('F102','C001',80,76,null,'2005-9-1','2006-1-12')
insert into 成绩表 values('F102','C006',null,null,null,'2006-2-20',null)
insert into 成绩表 values('F103','C001',85,82,null,'2005-9-1','2006-1-12')
insert into 成绩表 values('F103','C006',null,null,null,'2006-2-20',null)
go
/*+++++++++++++++++++++++作业2 三。修改表+++++++++++++++++++++++++++++*/
--===================================================================================
--=显示“学生基本信息表”,中的“学号”,“姓名”,“性别”和“年龄”列,(提示用现在日
--=期减去出生日期计算 )
--===================================================================================
select 学号,姓名,性别, (year(getdate())-year(出生日期)) as 年龄 from 学生基本信息表
go
--=======================================================================
--=修改“学生基本信息表”增加“政治面貌”列char(8),并设置默认值“团员”=
--=======================================================================
use 学生信息数据库
go
alter table 学生基本信息表
add 政治面貌 char(8) not null default('团员')
--这里要注意的就是,如果设置默认值的话,最好这个列有非空约束,否则默认值不能发挥出来
--===========================================================
--=修改“学生基本信息表” 将“政治面貌”列的类型改为char(12)=
--===========================================================
use 学生信息数据库
go
alter table 学生基本信息表
alter column 政治面貌 char(12) not null -
边学边用SQL Server-表格的修改 - [代码/Code]
/*+++++++++++++++++++++++++对表格的修改 作业1-6后面的一部分++++++++++++++++++++++++++*/
/*
更改表 P147
删除表 P148
修改表格式( | 表示的是或者的意思):
ALTER TABLE <表名>
{ ADD <列说明>
| DROP COLUMN <列名>
| ALTER COLUMN <列说明>
| ADD <约束说明>
| DROP <约束>
}
具体看下面的例子
刘峰 编写 QQ: 121497974 */
--这下面的语句,有的不能同时执行,因为有可能造成冲突,请有选择的,一个个的执行。
use 学生信息数据库
go
--=======================================================================================
--=作业1-6.用企业管理器或命令修改职工表,插入一个工作日期(gzrq)列,转正日期(zzrq)列=
--=======================================================================================
alter table 职工表 --修改表固定格式 alter table
add gzri datetime,zzrq datetime
--添加列:add 要增加的列名 列的类型 这一步跟创建表格时候,增加列的格式一样
go
--===========================================================================
--=作业1-7.用命令修改职工表,插入约束条件是转正日期大于工作日期(zzrq>gzrq)=
--===========================================================================
alter table 职工表
add constraint ck_zzrq check (zzrq>gzrq) --添加约束:add constraint 约束名称 (条件格式)
go
--=================================================================================
--=作业1-8.用命令办法修改职工表,删除转正日期大于工作日期(zzrq>gzrq)的约束条件 =
--=================================================================================
alter table 职工表
drop constraint ck_zzrq --删除约束:drop constraint 约束名称
go
--==========================================================================================
--=作业1-9.用命令办法删除转正日期(zzrq)列。若该列有条件约束时,先删除条件约束,
--=再删除该列。需要说明的是:如果列是参与约束的话,那么,必须先把相关的 约束 删除后,才可以
--=删除列,否则无法删除列
--==========================================================================================
alter table 职工表
drop constraint ck_zzrq
go
alter table 职工表
drop column zzrq --删除列: drop column 列名
go
--===========================================================================================
--=作业1-10.用命令办法修改职工表,插入工龄(gl)列,计算用现在的日期的年(year(getdate()))减去工=
--=作日期的年(year(gzrq))就是工龄。 =
--===========================================================================================
alter table 职工表
add gl as (year(getdate())-year(gzrq)),
constraint ck_zzrq check(zzrq>gzrq)
go -
边学边用SQL Server-创建表格、各种约束条件 - [代码/Code]
/*++++++++++++++++|创建表格、各种约束条件|++++++++++++++++++++*/
/*
创建表格P145
CREATE TABLE <表名>
(
<列名><列类型><列说明>…,
[CONSTRAINT <约束名称><约束条件>]
)
<列类型>是列的数据类型。
<列说明>说明列的长度、列的默认值、主键等有关该列的约束条件。
创建主键约束 P125
语法: constraint 主键约束名 primary key(被定义为主键的列名)
创建外键约束 P126
语法:constratint 外键约束名 foreign key(本表中作为外键的列名) references 参照表(参照列)
主键和外键约束,其实就是创建关系
详细的内容看下面的创建表格的部分说明
刘峰 编写 QQ:121497974
*/
--=======================================================
--=下面是分别创建 学新基本信息表、课程表、职工表、成绩表=
--=======================================================
use 学生信息数据库 --指定使用的数据库,这一步以后不再说明
go
create table 学生基本信息表
(
学号 char(4) not null constraint PK_学号 primary key,
--学号就是列名,char(4)是列定义的数据类型,定义该列的同时可以进行
性别 char(8) not null default('男') constraint CK_性别 check (性别='男'or 性别='女'),
--约束定义 constraint 约束名称 约束内容,
出生日期 datetime not null,
籍贯 char(10),
院系名称 char(20),
专业 char(20),
入学日期 datetime not null,
奖学金 money default(0) constraint CK_奖学金 check (奖学金>=0 and 奖学金<=5000),
备注 text,
constraint CK_日期 check (出生日期<入学日期)
)
go
create table 课程表
(
课程号 char(4) not null constraint PK_课程号 primary key ,
--在之后可以单独定义主键就是 constraint 主键约束名 primary key(被定义为主键的列名)
课程名称 char(20) not null,
上课教师 char(8)
)
go
create table 职工表
(
bmh char(2) not null constraint PK_bmh primary key,
bmmc char(10) not null,
bmszd char(6) not null default'北京'
)
go
/*
--==创建用户自定义数据类型==--
exec sp_addtype type,system_data_type,'null_type'
exec 执行存储过程
sp_addtype 创建用户定义数据的语句,详细使用,可以参见SQL联机帮助文档
type 用户定义的数据类型名
system_data_type 系统的数据类型(除了int text datetime real类型外,其余类型如numeric float char varchar必须加上单引号,就如上面的例子一样,否则会出现错误)
null_type 是否允许为空
*/
exec sp_addtype 学生成绩,'numeric(5,2)','null'
--需要使用用户自定义数据类型-学生成绩,故在这里定义一个
create table 成绩表
(
学号 char(4) not null,
课程号 char(4) not null,
平时成绩 学生成绩,
考试成绩 学生成绩,
总成绩 学生成绩,
开学日期 datetime,
结束日期 datetime,
constraint PK_成绩表 primary key(学号,课程号),
constraint FK_学号 foreign key(学号) references 学生基本信息表(学号),
constraint FK_课程号 foreign key(课程号) references 课程表(课程号)
--创建外键约束语法:constratint 外键约束名 foreign key(本表中作为外键的列名) references 参照表(参照列)
)
-
边学边用SQL Server-创建数据库 - [代码/Code]
--文件中 "--" "/* */" 都是SQL注释语言,不参与语句执行,仅用来做说明用
/*
创建数据库格式:
CREATE DATABASE <数据库名>
on(name=数据库文件名
filename='数据库存放的物理位置'
size=数据库初始化大小
filegrowth=文件增长率 (如果是按照百分比增长,那么请加上%)
maxsize=最大文件大小)
log on
(name=学日志的文件名
filename='日志存放的物理位置'
size=2,
filegrowth=2,
maxsize=12)
创建数据库 P142
刘峰 编写 QQ:121497974 */
--====================
--=创建学生信息数据库=
--====================
create database 学生信息数据库 --创建数据库
on (name=学生_主数据文件, --数据库的文件名
filename='D:\dsql07_刘峰\学生_主数据文件.mdf', --数据库存放的物理位置
size=2, --初始化大小
filegrowth=20%, --文件增长率,此为百分比增长
maxsize=48) --最大文件尺寸
log on --创建日志
(name=学生_日志文件, --日志的文件名
filename='D:\dsql07_刘峰\学生_日志文件.ldf', --日志存放的物理位置
size=2,
filegrowth=2,
maxsize=12)
开始关注... 关注我的生活;关注朋友的生活;关注社会的变化;关注...











