数据库的组成:
数据类文件:管理数据
- 主数据文件有且唯一一个,文件后缀:
.mdf
- 辅助数据文件可以有,可以没有,也可以有多个,后缀:
.ndf
日志类文件:备份数据
- 至少一个,后缀:
.ldf
每个文件有五个属性:
name
:逻辑名称,字符型数据name='aaaa111'
标准化命名:数据库名字+\_+data(log)+序号(类型)
filename
:路径
标准化命名:盘符(例如d:\\)+逻辑名称+文件类型名
如:filename='d:\\xslg\_dat1.mdf'
size
:文件初始大小size=5mb,
maxsize
:最大大小maxsize=20mb
或maxsize=unlimited(无限制)
filegrowth
:文件增长方式filegrowth=5%
或filegrowth=2mb
创建sql server数据库
create database 数据库名
on
(name='数据文件名',
filename='数据文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
log on
(name='日志文件名',
filename='日志文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
go
删除数据库
drop database 数据库名
增加数据库文件
- 增加数据库数据文件
alter database 数据库名
add file
(name='数据文件名',
filename='数据文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
- 增加数据库日志文件
alter database xslg
add log file
(name='日志文件名',
filename='日志文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
- 移除数据库文件(数据文件和日志文件移除方式相同)
#数据文件移除
alter database xslg
remove file xslg_dat3
#日志文件移除
alter database xslg
remove file xslg_log2
例子:
数据库叫 xslg
假设他由3个文件组成 1个主数据
1个辅助文件
1个日志文件
create database xslg
on
(name='xslg_dat1',
filename='d:\xslg_dat1.mdf',
size=5mb,
maxsize=50mb,
filegrowth=10%),
(name='xslg_dat2',
filename='d:\xslg_dat2.ndf',
size=5mb,
maxsize=50mb,
filegrowth=10%)
log on
(name='xslg_log1',
filename='d:\xslg_log1.ldf',
size=2mb,
maxsize=20mb,
filegrowth=1mb)
go
- 增加用户组
alter database 数据库名
add filegroup 用户组名
- 给用户组添加文件(需要先增加用户组)
alter database 数据库名
add file(
name='日志文件名',
filename='日志文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式
)
to filegroup 用户组名
- 增加辅数据文件
alter database 数据库名
add file(
name='日志文件名',
filename='日志文件路径', //后缀为ndf
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
- 修改文件属性
alter database 数据库
modify file
(
name='日志文件名',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
- 添加数据表
use stu; //使用数据库stu
create table studeat //创建数据表studeat
(
sno int primary key, //表项sno,int类型,primary key定义为主键,
# 或者使用sno char(5) primary key check(sno>='20000' and sno<='30000'), //对数据进行限制在20000到30000
sname char(16) unique, //表项sname,char类型,unique 定义非空约束
ssex char(2) default('男'), //表项ssex,char类型,默认为'男'
sbirthday date not null, //表项sbirthday,date类型,not null 定义为非空
sdept varchar(30) //表项sdept,varchar类型
);
9.向表中添加数据
INSERT INTO studeat (sno, sname, ssex, sbirthday, sdept)
VALUES
(1, '艾瑞克', '男', '2000-05-15', '数学'),
(2, '鲍勃', '女', '1999-09-20', '英语'),
(3, '嘉里', '男', '2001-03-10', '法语'),
(4, '德纳', '男', '2002-07-25', '德语');
10.删除表中数据
DELETE FROM studeat
WHERE sno IN (1, 2, 3, 4);
11.查询数据表
select * from studeat
- 时间函数
getdate()
year() month() day()
datepart()
例如
select getdate() as 时间 //将获取时间标头命名为时间
SELECT YEAR(GETDATE())
SELECT DATEPART(HOUR, GETDATE())
- 表达式查询全体学生姓名和年龄:
select name as 姓名,year(getdate())-year(sbirthday) as 年龄 from student
- 查询计算机系全体学生的姓名
select name from student where sdept = '计算机系'
- 查询考试成绩大于90的学生的信息
select * from SC where Grade > 90
- 查询学分在2~3之间的所有信息
select * from course where credit between 2 and 3
或者
select * from course where credit >=2 and credit <=3
- 查询学分不在2~3之间的所有信息
select * from course where credit not between 2 and 3
或者
select * from course where credit < 2 or credit > 3
- 查询出生在1997年学生的全部信息
select * from student where sbirthday between '1997-01-01' and '1997-12-31'
- 查询计算机系和机电系学生的信息
select * from student where sdept in ('计算机系','机电系')
- 查询不在计算机和机电系的学生信息
select * from student where sdept not in ('计算机系','机电系')
字符串匹配
_ (下划线): 匹配任意一个字符
% (百分号): 匹配0到多个字符
[]: 匹配[]中的任意一个字符,如[abdg]表示匹配a、b、d、g中任意一个字母,[a-g]表示匹配a到g的字母中的任意一个字母
[^]: 不匹配[]中的任意一个字符,如[^abdg]表示不匹配a、b、d、g中任意一个字母,[^a-g]表示不匹配a到g的字母中的任意一个字母
- 查询姓李的学生的信息
select * from student where name like '李%'
- 查询姓名中第二个字是"冲"的学生信息
select * from student where name like '_冲%'
- 查询学号最后不是2和3的学生信息
select * from student where sno not like '%[2,3]'
- 查询还没有考试的学生的信息
select * from sc where Grade is NULL
- 查询有备注的学生的信息
select * from student where Memo is not NULL
- 使用逻辑运算符,查询机电系有备注的学生信息
select * from student where Memo is not NULL and sdept = '机电系'
- 将"C01"号课程的成绩按升序排列
select cno,Grade from SC where Cno='C01' order by Grade
- 将“060101”号学生的成绩按升序排列
select cno Grade from SC where sno='060101' order by Grade DESC
聚合函数进行统计
count(*): 统计表中元组的个数
count([distinct]<列名>):统计本列的列值个数,DISTINCT选择表示去掉列的重复值后再统计
sum(<列名>):计算列值的和值(必须是数值型列)
AVG(<列名>):计算列值的平均值(必须是数值型列)
MAX(<列名>):得到列值的最大值
MIN(<列名>):得到列值的最小值
- 统计学生总人数
select count(*) as 学生总人数 from student
- 统计学生"060101"的总成绩
select sum(Grade) as 总成绩 from sc where sno = '060101'
- 统计学会说呢过“060101”的平均成绩
select avg(grade) as 平均成绩 from sc where sno='060101'
- 统计课程"C01"的最高分数和最低分数
select MAX (Grade) as 最高分,MIN (Grade) as 最低分 from SC where cno='C01'