Skip to content

数据库的组成:

数据类文件:管理数据

  1. 主数据文件有且唯一一个,文件后缀:.mdf
  2. 辅助数据文件可以有,可以没有,也可以有多个,后缀:.ndf

日志类文件:备份数据

  1. 至少一个,后缀:.ldf

每个文件有五个属性:

  1. name:逻辑名称,字符型数据 name='aaaa111'

标准化命名:数据库名字+\_+data(log)+序号(类型)

  1. filename:路径

标准化命名:盘符(例如d:\\)+逻辑名称+文件类型名如:filename='d:\\xslg\_dat1.mdf'

  1. size:文件初始大小 size=5mb,
  2. maxsize:最大大小 maxsize=20mbmaxsize=unlimited(无限制)
  3. 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 数据库名

增加数据库文件

  1. 增加数据库数据文件
alter database 数据库名
 add file
 (name='数据文件名',
filename='数据文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
  1. 增加数据库日志文件
alter database xslg
 add log file
 (name='日志文件名',
filename='日志文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
  1. 移除数据库文件(数据文件和日志文件移除方式相同)
#数据文件移除
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
  1. 增加用户组
alter database 数据库名
add filegroup 用户组名
  1. 给用户组添加文件(需要先增加用户组)
alter database 数据库名
add file(
name='日志文件名',
filename='日志文件路径',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式
)
to filegroup 用户组名
  1. 增加辅数据文件
alter database 数据库名
add file(
name='日志文件名',
filename='日志文件路径', //后缀为ndf
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
  1. 修改文件属性
alter database 数据库
modify file
(
name='日志文件名',
size=初始文件大小,
maxsize=最大文件大小,
filegrowth=文件增长方式)
  1. 添加数据表
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
  1. 时间函数
getdate()
year() month() day()
datepart()
例如
select getdate() as 时间 //将获取时间标头命名为时间
SELECT YEAR(GETDATE())
SELECT DATEPART(HOUR, GETDATE())
  1. 表达式查询全体学生姓名和年龄:
select name as 姓名,year(getdate())-year(sbirthday) as 年龄 from student
  1. 查询计算机系全体学生的姓名
select name from student where sdept = '计算机系'
  1. 查询考试成绩大于90的学生的信息
select * from SC where Grade > 90
  1. 查询学分在2~3之间的所有信息
select * from course where credit between 2 and 3
或者
select * from course where credit >=2 and credit <=3
  1. 查询学分不在2~3之间的所有信息
select * from course where credit not between 2 and 3
或者
select * from course where credit < 2 or credit > 3
  1. 查询出生在1997年学生的全部信息
select * from student where sbirthday between '1997-01-01' and '1997-12-31'
  1. 查询计算机系和机电系学生的信息
select * from student where sdept in ('计算机系','机电系')
  1. 查询不在计算机和机电系的学生信息
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的字母中的任意一个字母
  1. 查询姓李的学生的信息
select * from student where name like '李%'
  1. 查询姓名中第二个字是"冲"的学生信息
select * from student where name like '_冲%'
  1. 查询学号最后不是2和3的学生信息
select * from student where sno not like '%[2,3]'
  1. 查询还没有考试的学生的信息
select * from sc where Grade is NULL
  1. 查询有备注的学生的信息
select * from student where Memo is not NULL
  1. 使用逻辑运算符,查询机电系有备注的学生信息
select * from student where Memo is not NULL and sdept = '机电系'
  1. 将"C01"号课程的成绩按升序排列
select cno,Grade from SC where Cno='C01' order by Grade
  1. 将“060101”号学生的成绩按升序排列
select cno Grade from SC where sno='060101' order by Grade DESC

聚合函数进行统计

count(*): 统计表中元组的个数
count([distinct]<列名>):统计本列的列值个数,DISTINCT选择表示去掉列的重复值后再统计
sum(<列名>):计算列值的和值(必须是数值型列)
AVG(<列名>):计算列值的平均值(必须是数值型列)
MAX(<列名>):得到列值的最大值
MIN(<列名>):得到列值的最小值
  1. 统计学生总人数
select count(*) as 学生总人数 from student
  1. 统计学生"060101"的总成绩
select sum(Grade) as 总成绩 from sc where sno = '060101'
  1. 统计学会说呢过“060101”的平均成绩
select avg(grade) as 平均成绩 from sc where sno='060101'
  1. 统计课程"C01"的最高分数和最低分数
select MAX (Grade) as 最高分,MIN (Grade) as 最低分 from SC where cno='C01'