工作经常使用的SQL整理,实战篇,地址一览:
目录概览:
1.数据库
2.表
3.临时表
4.索引和约束
5.范式
6.增删改查
7.连接
8.分组和排序
9.通配符
10.视图
11.存储过程和事务
12.游标
13.触发器
14.作业
自己亲手编写的一些常用的SQL,希望对大家有用喔,废话不多说了,直接入正题~
1.数据库
创建数据库
use
master
if
exists
(
select
*
from
sysdatabases
where
name
=
'
OrderDB
'
)
drop
database
OrderDB
create
database
OrderDB
on
(
name
=
'
OrderDB_data
'
,
filename
=
'
D:\DB\OrderDB_data.mdf
'
,
size
=
10
,
filegrowth
=
15
%
)
log
on
(
name
=
'
OrderDB_log
'
,
filename
=
'
D:\DB\OrderDB_log.ldf
'
,
size
=
3
,
filegrowth
=
10
%
)
删除数据库
drop
database
OrderDB
2.表
创建表
--用户表
if
exists
(
select
*
from
sysobjects
where
name
=
'
Tse_User
'
)
drop
table
Tse_User
Create
table
Tse_User
(
ID
int
identity
(
1
,
1
),
UserID
int
not
null
,
UserName
varchar
(
64
)
not
null
,
RealName
varchar
(
64
)
null
,
PRIMARY
KEY
(UserID)
)
--
产品表
if
exists
(
select
*
from
sysobjects
where
name
=
'
Tse_Product
'
)
drop
table
Tse_Product
Create
table
Tse_Product
(
ID
INT
IDENTITY
(
1
,
1
),
ProductID
varchar
(
64
)
not
null
,
ProductName
varchar
(
256
)
not
null
,
Price
float
not
null
,
Storage
int
not
null
,
--
库存
PRIMARY
KEY
(ProductID)
)
--
订单表
if
exists
(
select
*
from
sysobjects
where
name
=
'
Tse_Order
'
)
drop
table
Tse_Order
Create
table
Tse_Order
(
ID
int
identity
(
1
,
1
),
OrderID
varchar
(
64
)
not
null
,
UserID
int
not
null
,
ProductID
varchar
(
64
)
not
null
,
Number
int
not
null
,
--
购买数量
PostTime
datetime
not
null
,
PRIMARY
KEY
(OrderID),
FOREIGN
KEY
(UserID)
REFERENCES
Tse_User(UserID),
FOREIGN
KEY
(ProductID)
REFERENCES
Tse_Product(ProductID)
)
删除表
drop
table
Tse_User
清空表
truncate table Tse_User 清除表中所有数据,下次插入编号从 1 开始
delete from Tse_User 清除表中所有数据,但下次插入编号从原有编号 +1 开始
3.临时表
生成临时表,插入数据,将员工姓名全部打印出来
use
master
go
create
table
#Employee
(
ID
int
identity
(
1
,
1
),
Name
varchar
(
64
)
not
null
,
primary
key
(ID)
)
insert
into
#Employee(Name)
values
(
'
zhangsan
'
)
insert
into
#Employee(Name)
values
(
'
lisi
'
)
insert
into
#Employee(Name)
values
(
'
wangwu
'
)
insert
into
#Employee(Name)
values
(
'
tony
'
)
insert
into
#Employee(Name)
values
(
'
mike
'
)
declare
@i
int
declare
@Name
varchar
(
64
)
declare
@Count
int
declare
@Str
nvarchar
(
4000
)
set
@i
=
0
select
@Count
=
COUNT
(
0
)
from
#Employee
while
(
@i
<
@Count
)
begin
set
@Str
=
'
select top 1 @Name = Name from #Employee where id not in (select top
'
+
STR
(
@i
)
+
'
id from #Employee)
'
exec
sp_executesql
@Str
,N
'
@Name varchar(64) output
'
,
@Name
output
select
@Name
,
@i
set
@i
=
@i
+
1
End
查看表结构及表附加属性
SP_HELP Tse_User
4.索引和约束
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
非聚集 索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。 一个表可以创建多个非聚集索引。
创建聚集索引
CREATE UNIQUE CLUSTERED INDEX [PK_Tse_ID] ON [dbo] . [Tse_User]
( -- 唯一聚集索引
[ID] ASC
) WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , SORT_IN_TEMPDB = OFF , IGNORE_DUP_KEY = OFF , DROP_EXISTING = OFF ,
ONLINE = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
GO
创建非聚集索引
CREATE UNIQUE NONCLUSTERED INDEX [IX_Tse_UserID] ON [dbo] . [Tse_User]
( -- 唯一非聚集索引
[UserID] ASC
) WITH ( PAD_INDEX = OFF , STATISTICS_NORECOMPUTE = OFF , SORT_IN_TEMPDB = OFF , IGNORE_DUP_KEY = OFF , DROP_EXISTING = OFF ,
ONLINE = OFF , ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
GO
约束
alter table Tse_User
add constraint CS_UserName check ( len ( Username ) > 3 ),
constraint CS_Email check ( charindex ( '@' , Email ) > 0 )
5.范式
第一范式 1NF
第一范式需满足两个条件:
1)每个数据行必须包含具有原子性(即不可再分)的值;
2)每个数据行必须包含一个独一无二的值,即主键。
举例:假如客户表中存在地址列,如果经常需要按城市归类,那么,应该地址列拆分为省份,城市,县,街道地址等列。
第二范式 2NF
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种 数据,不可以把多种数据保存在同一张数据库表中。
举例:比如常用的选课表中,以学号和课程号为联合主键,不能将课程名,学分等课程相关信息写入选课表,因为他们只与主键的一部分(课程号)相关。
第三范式 3NF
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
举例:订单表中以订单号为主键,用户真实姓名和邮箱等信息与用户有关,与订单没有直接关系,因此,用户真实姓名和邮箱等不能放到订单表中。
由于时间关系,余下的几个问题在下一篇中讨论,谢谢关注~,下一篇地址为: 工作经常使用的SQL整理,实战篇(二)
如果您有什么问题,欢迎在下面评论,我们一起讨论,谢谢~
如果您觉得还不错,不妨点下右下方的推荐,有您的鼓励我会继续努力的~

