学习 SQL server 笔记

数据基本 CRUD

1.新增数据

1
2
3
4
5
6
use 数据库名

go

insert into 表名([name],sex,age).value('张三','男','20')

2.查询数据

1
2
3
4
5
6
7
8
9

select * from 表名 //查询表里面的全部数据

select [name] from 表名 //查询表里面的name关键字

select sex from 表名 //查询表里面的性别关键字

select age from 表名 //查询表里面的年龄关键字

3.修改数据

1
2
3

update 表名 set [name]='小红',sex='女',age='18' where id=1 ///修改 id 为 1 的数据

4.删除数据

1
2
3

delete 表名 where id=1 //使用 delete 删除数据时一定给 where 条件

进阶查询

1.别名查询

1
2
3
4
5
6
7
8

select
[Id] as '标识ID',
[name] as '名称'
[sex] as '性别',
[age] as '年龄'
from 表名

2.条件查询

1
2
3
4
5
6
7
8
9

select
[Id] as '标识ID',
[name] as '名称'
[sex] as '性别',
[age] as '年龄'
from 表名 where age=18


3.范围查询

1
2
3
4
5
6
7
8
9
10

select
[Id] as '标识ID',
[name] as '名称'
[sex] as '性别',
[age] as '年龄'
from 表名 where age > 18 and age < 24

-- where age between 18 and 24 等同什么的查询条件(小的条件在前面,大的条件在后面)

4.null判断

1
2
3
4
5
6
7
8

select
[Id] as '标识ID',
[name] as '名称'
[sex] as '性别',
[age] as '年龄'
from 表名 where age is null

5.查询前多少行/按比例查询结果

1
2
3
4
5
6

select top 3 * from 表名 // 查询前三条数据

select top(50) percent * from 表名 // 查询总条数的百分之五十


6.case when 判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

//进行比较分支

select top(1000) [Id]
,[name] //名称
,[course] //班级
,[score] //分数
,case when score <90 then '不及格'
when score >=90 and score <120 then '及格'
when score >=120 and score <130 then '良好'
when score >=130 then '优秀'
else '鸭蛋'
end as '等级'
from 表名 order by [score] asc //根据分数进行升序

//进行对比分支

select top(1000) [Id]
,[name]
,[course]
,[score]
,case course when '高级班' then '走向高级开发'
when '架构班' then '走向架构师'
when '全栈班' then '走向全栈开发'
end '开发方向'

7.in查询

1
2
3
4
5
6
7

select top(1000) [Id]
,[name]
,[course]
,[score]
from 表名 where id in (4,5,6,7,8) //指定查询 id 为 (4,5,6,7,8)的数据

8.like模糊查询

**模糊查询笔记和通配符 % 一起使用才有效果 % 表示可以匹配任何字符

1
2
3
4
5
6
7

select top(1000) [Id]
,[name]
,[course]
,[score]
from 表名 where course like '高%'

9.with 关键字查询

1
2
3
4
5
6
7
8
9
10
11

with tt as (select top(1000) [Id]
,[name]
,[course]
,[score]
from 表名)

select * from tt

//whit个关键字查询 相当于给一段语句设置了一个别名 后期进行链表或者复杂的查询都方便一些

10.子查询/exists关键字查询

1
2
3
4
5
6
7
8
9
10
11
12
13
//子查询

select * from 表名 where id in (select Id from 表名 where [name]='张三')

//exists 关键字

select [Id]
,[name]
,[course]
,[score]
from 表名 t1(表别名)
where exists (select [Id],[name],[course],[scors] from 表名 t2(表别名) where t1.id = t2.id and t2.name = '张三')

11.复制新表/表数据复制

1
2
3
4
5
6
7
8
9
//复制新表

select * into 复制表的表名 from 被复制的表名


//把另外一个结构相同的表数据复制到指定表中

insert 被插入数据的表名 select [name],[course],[scors] from 被复制数据的表名

12.distinc 同一列去除重复

1
2
3

select distinct course from 表名 order by couse desc

13.排序

1
2
3
4
5
6
7

select * from 表名 order by score asc(升序)

select * from 表名 order by score desc(降序)

select * from 表名 order by [name],course asc (可以多列排序,从左往右优先级)

14.聚合查询分组

1
2
3
4
5

// group by (分组)

select [name],sum(score) score from 表名 group by [name]

15.分页查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

分页查询一

declare @pagesize int; //每一页数据数量
select pagesize=5; //查询页面数据的条数

declare @pageindex int; //第几页
select @pageindex=1; //第一页

select top(@pagesize) * from 表名
where id not in
(
select top(@paegsize * (@pageindex -1)) id from 表名 order by id
)

order by id


分页查询二 -- 如果 Id 没有自增 不是 int 类型

declare @pagesize int;
select @pagesize=5;

declare @pageindex int;
select @pageindex=1;

select top(@pagesize) * from
(
select row_number() over (order by score) as rownumber,* from ScoreInfo
)A

where rownumber > ((@pagesize)*(@pageindex) - 1)

分页查询三 -- 要求必须在 SQL Server2012版本之后可支持

declare @pagesize int;
select @pagesize=5;

declare @pageindex int;
select @pageindex=1;

select * from 表名 order by Id

offset (@pagesize * (@pageindex - 1)) --间隔多少条

rows fetch next (@pagesize) --获取多少条

rows only

16.union/umion all 操作

1
2
3