create database db_Student
on(name=db_Student_data,filename='D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_Student_data.mdf',size=3MB,maxsize=100MB,filegrowth=1MB)
log on(name=db_Student_data,filename='D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_Student_data.ldf',size=3MB,maxsize=100MB,filegrowth=1MB)
name:数据库名
Filename=‘D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_Student_data.mdf’:数据库文件名
size=3MB 初始大小(后面单位没写默认:MB)
maxsize=100MB:最大大小(不受限制:unlimited)
filegrowth=1MB: 增长量级
mdf:主数据文件后缀名
ndf:辅数据文件后缀名
ldf:日志文件后缀名
辅数据文件只需在主数据文件括号后用逗号隔开加括号在括号中编辑五个属性即可
查看指定数据库或所有的数据库信息
语句格式: Execute sp_helpdb 数据库名
(1)查看当前数据库服务器中所有数据库的信息
Execute sp_helpdb
(2)查看当前数据库服务器中Student数据库的信息
Execute sp_helpdb Student
语句格式:
sp_renamedb 当前数据库名称,数据库新名称
分离:Sp_detach_db 数据库名
附加:Sp_attach_db 数据库名,文件名 (文件名:附加到的文件的物理地址)
删除数据库:drop database 数据库名 (数据库一旦被删除,就永久的被删除)
修改数据库:ALTER DATABASE 数据库名
1、添加次要数据库文件(由于添加辅数据库文件导致数据库结构改动)
ALTER DATABASE db_HX
add file(name=db_HX,name=db_HX,filename='D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\db_HX.ldf',size=3MB,maxsize=100MB,filegrowth=1MB)
2、更改指定文件
ALTER DATABASE db_HX
modify file(name=db_HX,size=20mb)
3、删除指定文件
ALTER DATABASE db_HX
remove file db_HX
4、添加文件组
ALTER DATABASE db_HX
add filegroup group1
5、将db_HX_data文件添加到文件组group中
ALTER DATABASE db_HX
add file(name=db_HX_data,filename='物理文件名')
to filegroup group
1、缩减数据库空间的方法:
(1) 缩减已有数据库文件大小
(2) 删除没有数据或清空的数据库文件
2、缩减已有数据库文件大小
(1)收缩数据库
dbcc shrinkdatabase(db_HX,10)
(2)收缩特定数据库文件
dbcc shrinkfile(db_HX _dat,5)
语句格式:
CREATE TABLE
[数据库名.DBO.] 创建数据表的表名
( 列名1 数据类型 [NULL|NOT NULL],
列名2 数据类型 [NULL|NOT NULL],
………
列名n 数据类型 [NULL|NOT NULL]
)
注意:
每个字段之间用半角状态下的逗号“,”分隔,最后一个字段没有逗号 。
1、分类:
[CONSTRAINT constraint_name(约束名)]<约束类型>
约束不指定名称时,系统会给定一个名称。
(1)主键(primary key)
语句格式:
constraint 约束名 primary key(列名)
--eg:
create table tb_score
(
sno char(10) not null,
cno char(10) not null,
score float,
constraint PK_tb_score primary key(sno,cno)
)
注意:
命名规范:PK_[表名称]
(2) 惟一性约束 (unique)
constraint 约束名 unique (列名)
--eg:
create table tb_student
( sno nchar(10) not null,
sn nvarchar(30) not null,
……
constraint pk_tb_student primary key(sno),
constraint uq_tb_student unique(sn)
)
主键约束与惟一约束的区别:
①在一个基本表中只能定义一个primary key约束,但可定义多个unique约束;
②对于指定为primary key的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于unique所约束的惟一键,则允许为空。
注意: 不能为同一个列或一组列既定义unique约束,又定义primary key约束。
(3)检查约束(check)
constraint 约束名 check (约束表达式)
--eg:
create table tb_score
( sno char(5),
……
constraint ck_tb_score check (score>=0 and score<=100)
)
--注: score between 0 and 100也可以
(4)默认约束 (default)
default 默认值
--eg:
create table tb_student
(
sno char(10),
dept varchar(50) default ‘软件学院',
……
)
(5) 空值约束(null)
(6) 外键约束 (foreign key)
constraint 约束名 foreign key (列名)references 主键表名 (主键表列名)
--eg:创建tb_score表,sno和cno为外键。
create table tb_score
( sno char(10),
……
constraint FK_tb_score_tb_student foreign key(sno) references tb_student(sno),
constraint FK_tb_score_tb_course foreign key(cno) references tb_course(cno)
)
--eg: :在表tb_student中增加一个remark字段,类型为varchar,长度为200,删除表中的polity字段,并且修改sn字段的数据类型为char,长度为20。
alter table tb_student
add remark varchar(200) null
alter table tb_student
drop column polity
alter table tb_student
alter column sn char(20) null
删除表
drop table 表名
注意:
--eg::在tb_student表中添加完整性约束定义,使birthday为系统当前时间。
alter table tb_student
add constraint def_tb_student default getdate() for birthday
--eg::在tb_score表中删除完整性约束定义,使score取任意值。
alter table tb_score
drop constraint ck_tb_score
SELECT语句格式:
SELECT select_list [ INTO new_table_name ] FROM talbe_list
[ WHERE 行条件表达式 ]
[ GROUP BY 分组表达式 [ HAVING 组条件表达式 ] ]
[ ORDER BY order_list] [ ASC|DESC ]
select基本语句格式:
select 查询字段1,字段2 ,…字段n from 表名
--从db_student数据库的tb_student表中检索所有学生的全部字段内容。
select * from tb_student
-- 注意:当显示全部列时可用*代替
1、top关键字
使用top关键字 可以返回查询结果中的前n行 ,如果指定percent关键字 ,将从结果集中返回前n%行 。
-- 返回tb_student的前3条记录。
select top 3 * from tb_student
-- 返回tb_student的前20%的记录。
select top 20 percent * from tb_student
2、列别名
对查询数据列标题进行修改,或为没有标题的列增加临时标题,列别名表示方式如下:
列别名 = 列名
列名as 列别名
-- tb_student 表中查询所有学生的学号,姓名,出生日期字段内容,要求用别名显示。
select sno as 学号,姓名=sn,birthday=出生日期 from tb_student
3、组合列
除了只是显示基础字段的信息列之外,查询还可以使用运算或函数来任意组合得到列。
-- 查询学生的学号姓名,要求如下效果201401010101 (陈广录)。
select sno+ '(' + sn + ') ' as '学号姓名' from tb_student
-- 显示每名同学的学号,姓名和年龄。
select sno as 学号, sn as 姓名, year(getdate()) - year(birthday) as 年龄 from tb_student
基本的where子句格式:
where 筛选列名 操作符 值
查询条件 | 谓词 |
---|---|
比较(比较运算符) | =,>,<,>=,<=,!=,<>,!>,!< |
确定范围 | BETWEEN a AND b,NOT BETWEEN a AND b |
确定集合 | IN,NOT IN |
字符匹配 | LIKE,NOT LIKE |
空值 | IS NULL,IS NOT NULL |
多重条件(逻辑谓词) | AND,OR |
(1)where条件使用算术表达式:
注意: 不同数据类型值前后界定符号不同
-- 在tb_student表中找到姓名为陈君然的同学。
select * from tb_student where sn = '陈君然'
-- 查询tb_student表中姓“张”的同学信息。
select * from tb_student where left(sn, 1) = '张'
/*注意本例中left函数的使用
left 函数:返回从字符串左边开始指定个数的字符
eg:left (字段名, 2) 结果返回该字段数据的前2位
*/
(2)where条件使用逻辑表达式
-- 列出tb_score表中的所有低于30分或高于90分的同学。
select * from tb_score where (score< 30) or (score > 90)
-- 列出tb_student表中所有男团员的学生。
select * from tb_student where (sex= '男') and (polity = '团员')
-- 列出tb_score表中c01成绩中大于60分或c02成绩中大于60分的同学。
select * from tb_score where (cno = 'c01') and (score > 60) or (cno= 'c02') and (score> 60)
--注意:使用or逻辑关系时,只要满足任意一个表达式即可。而and需要同时满足两个条件。
(3)where条件使用三种特殊运算。
-- 从表tb_student表中查询1995~1996年出生的同学。
select * from tb_student where year(birthday) between 1995 and 1996
-- 查询tb_student表中所有党员和团员的信息。
select * from tb_student where polity in ('党员', '团员')
-- 查询tb_student表中所有姓“张”和姓“李”的同学。
select * from tb_student where left(sn, 1) in ('张', '李')
通配符 | 含义 | 示例 |
---|---|---|
- | 任意单个字符 | where sn like’王_'匹配姓王的两个字的 |
% | 由零个或多个字符组成的字符串 | where sn like’%刘%'匹配含刘该字的所有字符串 |
[] | 某个范围或集合内的任意指定的字符 | where sn like '张[1-3]'匹配"张1"或"张2"或"张3"但不匹配"张4" |
[^] | 不在某个范围或集合内的任意指定的字 | Where sn like '张[^3]'匹配处张3以外的所有字符串 |
-- 在tb_student表中找到姓“李X”的同学。
select * from tb_student where sn like '李_'
-- 在tb_student表中找到所有姓名中带佳字的同学。
select * from tb_student where sn like '%佳%'
-- 在tb_student表中找到所有姓王名 (阳/洋/杨)的同学。
select * from tb_student where sn like '王[阳洋杨]'
-- 在tb_student表中找到所有不姓张的同学。
select * from tb_student where sn like '[^张]%'
(4)where条件使用null
NULL(空值)表示列的数据值未知或不可用
匹配方式: 列名 is NULL
列名 is not NULL
-- 在tb_student表中查询政治面貌为空的学生学号、姓名、院系。
select sno,sn,dept from tb_student where polity is null