sqlserver 基础操作
- 此笔记使用SqlService_ 2008_r2
- 安装教程 【教程】SQL Server 2008 R2安装教程 - 小鱼啊小鱼 - 中文字幕_哔哩哔哩_bilibili
数据库 Database
- 右键数据库-新建数据库
- 复制/移动数据库-右键数据库-任务-分离-勾选删除连接 右键数据库-属性-地址
- mdf 导入数据库:右键数据库-附加-添加-找到导入的mdf文件位置-确定刷新
表 Table
- 关系数据库中的关系指的就是表
- 右键表-新建表
- 列 Column / 字段 Field/ 行/ Row
Sql Service 常用基本数据类型
- 整型
- int 4字节
- smallint 2字节
- 浮点
- real 4字节
- float 8字节
- decimal(p,s)
- 大精度 p精度(可以显示多少位),s小数部分可以显示多少小数
- 字符型
- char(n)
- 默认1个字节,n的取值为(1-8000),数据小于n补空格,大于截断
- varchar(n)
- 可变长度,,n的取值(1-8000),数据长度小于n就存n
- nchar(n)
- 固定长度,采用Unicode编码,n的取值(1-4000),一个字符占2个字节
- nvarchar(n)
- 可变长度,采用Unicode编码,n的取值(1-4000)
- char(n)
- 日期事件数据类型
- date
- 存储时间,用字符串存,格式为)(YYYY-MM-DD),占用三个字节的控件
- time
- 字符串形式记录一天中的某个时间,格式为(hh,mm:ss[n*7]) 7个长度存储毫秒 站5个字节
- datetime
- 时间和日期,占用8个字节
- smalldatetime
- 与datetime类似,缩小范围到(1900.1.1-2079.6.6)占4个字节
- date
- 文本
- text
- 存储文本类型,非Unicode,最大2个G
- text
表的基本操作
操作表
create table [user]
(
id int primary key identity(1, 1),
username nvarchar(20) not null,
age int check (age between 18 and 150),
gender tinyint default(0)
)
-- 讲解user表
-- 1 [user] 防止与数据库关键字起冲突
-- 2 定义主键的是primary key, identity(起始值,增长值)主键自动增长
-- 3 not null 不能为空
-- 4 check 限定值的范围
-- 5 default 默认值
-- 6 插入数据演示
-- 创建[account] 表
create table [account]
(
id int identity(1,1),
bank nvarchar(50),
userId int references [user](id)
)
增加删除修改字段
- 在account 表中添加 money 字段
alter table account add money decimal(10,3)
- 删除 字段
alter table [account] drop column [monet]
- 修改字段
alter table [account] alter column [money] int
增删改查
--增
insert into [user] (username,age,gender)
values('巫统慧',19,0);
--删
delete [user] where username='巫统慧'
--改
update [user] set gender = 1
where username='巫统慧'
--改
update [user] set username = '夏旭辉'
where username='刘波'
约束
数据库约束是为了保证数据的完整性(正确性)而实现的一套机制
-
非空约束
-
主键约束(PK)
- 右键/选择字段/设为主键
- 设置主键后,设计表中表示规范设置 增量;
-
唯一约束 (UQ)
- 右键-索引/键-类型(唯一键)-选择列
- 唯一,允许为空 但只能允许一次
-
默认约束 (DF)
- 常规-默认值或绑定
-
检查约束(CK)
- 右键-CHECk约束-添加- 填写表达式
- ([gender]=(0) OR [gender]=(1)) 二选一
- ([age]>=(18) AND [age]<=(150)) 范围
- 右键-CHECk约束-添加- 填写表达式
-
外键约束
- 右键-关系-设置列规范
- 理解:是给一个列,在另一个表中找一个主键
- 主键就是唯一且不为空,不重叠的一般是自增的字段,类似身份证
- 外键就是关联其他表的一个键,这个值必须存在另一个表中;
- 右键-关系-设置列规范
-
代码写约束
检索数据 关键字
- as 查询时给列命名
select userid as '序号' from user
- top
-- 获取前3条的数据
select top 3 * from student
-- 获取百分之50的数据 有小数会进1
select top 50 percent * from student
- distinct 去重
-- 要查询的列重复 将不显示,
select distinct sName from student
select distinct sName,sAge from student
聚合函数
select MAX(sAge) as '最大年龄' from Student
select MIN(sAge) as '最小年龄' from Student
select Avg(sAge) as '平均年龄' from Student
select Sum(sAge) as '年龄总和' from Student
select COUNT(*) as '总人数' from student
- isnull 处理空值
select isnull(要处理的列,要替换的值) from student
条件查询
- where
-- 查询所有男同学信息
select * from student
where sSex = '男'
- and
-- 查询学生年龄在 15-18岁之间的女同学
select * from student
where sAge >= 15
and sAge <= 18
and sSex = '女'
- between...and... 在什么之间
-- 查询学生年龄在 15-18岁之间的同学
select * from student
where sAge between 17 and 18
- or 或者
-- 查询年级编号为1 2 3的学生
select * from student
where sClassId = 1
or sClassId = 2
or sClassId = 3
- in ,or的简写
select * from student
where sClassId in (1,2,3)
- like 模糊查询
- % 匹配多个字符,省略部分信息 (如:张%,张三)
- _ 占位符 只匹配一个字符,匹配字符出现位置
- [] 也只匹配一个字符切得指定字符范围[0-9] [a-z] [a,b,c]
- not like 查询除了这个其他的信息
-- 查询姓巫的同学信息
select * from student
where sName like '巫%'
- union all 联合查询
- union all,不会去除重复数据,
- union, 会去除重复数据
- 联合两组数据,字段数量一定要相同!
-- 显示学校总人数 在一个表中
select sname,sClassId from student
union all
select '学校总人数', COUNT(*) from student
- order by desc 倒序/asc 正序
--倒叙
select * from student
order by sAge desc
--正序
select * from student
order by sAge asc
- group by 分组查询
- 分组后,再做什么操作
-- 每个班级的总人数 ,先分组 再算每个每个组的人数
select COUNT(*) from student
group by sClassId
- having 分组筛选
-- 每个班级的总人数大于5的班级人数
select COUNT(*) from student
group by sClassId
having COUNT(*)>5