1. 建库语句
格式:create database 数据库名;
例如:
格式:创建数据库(自定义初始值)
1 2 3 4 5 6 7 8 9 10 11 | create database 数据库名
on primary
(
name = '逻辑名称' ,
filename= '文件存储路径' ,
)
log on
(
name = '逻辑名称' ,
filename= '文件存储路径' ,
)
|
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | create database Demo02
on primary
(
name = 'Demo02' ,
filename= 'M:\SQLServer_File\Demo02_Data\Demo02.mdf' ,
size =5MB
)
log on
(
name = 'Demo02_Log' ,
filename= 'M:\SQLServer_File\Demo02_Data\Demo02_Log.ldf' ,
size =2MB
)
|
或者(数据库名Demo03和路径中的文件Demo03_Data.mdf可以不一致)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | create database Demo03
on primary
(
name = 'Demo03' ,
filename= 'M:\SQLServer_File\Demo03_Data\Demo03_Data.mdf' ,
size =5MB
)
log on
(
name = 'Demo02_Log' ,
filename= 'M:\SQLServer_File\Demo03_Data\Demo03_Log.ldf' ,
size =2MB
)
|
2. 删库语句
格式:drop database 数据库名
例如:
3. 创建数据表
格式:
use 数据库名
GO
create table 表名
(
列名 数据类型(长度) 列级束缚
)
例如:
1 2 3 4 5 6 7 8 9 | use Demo01
GO
create table student
(
Sno char (5) NOT NULL UNIQUE ,
Sname char (8) NOT NULL ,
Sage smallint default 20,
Sex char (2) check (Sex= '男' or Sex= '女' )
)
|
4. 创建视图
格式:
USE 数据库名
GO
CREATE VIEW 视图名
as select 列名
from 表名
GO
例如:
1 2 3 4 5 6 7 | USE Demo01
GO
CREATE VIEW Demo01_View_student
as
select * from student
GO
|
5. 约束语句
5.1 主键约束(PRIMARY KEY)
格式一:列名 数据类型(长度) PRIMARY KEY
例如:
1 2 3 4 5 6 7 | use Demo02
GO
create table student1
(
Sno char (5) primary key
)
|
格式二:CONSTRAINT 约束名 PRIMARY KEY(列名)
例如:
1 2 3 4 5 6 7 8 | use Demo02
GO
create table student2
(
Sno char (5),
Sname char (5),
constraint c1 PRIMARY KEY (Sno)
)
|
5.2 外键约束(FOREIGN KEY)
格式:CNOSTRAINT 约束名 FOREIGN KEY(列名) REFERENCES 被引用列的名称(列名)
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | use Demo02
GO
create table student3
(
Sno char (5),
constraint c2 primary key (Sno)
)
GO
create table student4
(
Sno char (5),
Cno char (5),
constraint c3 primary key (Cno),
constraint c4 foreign key (Sno) references student3(Sno)
)
|
5.3 非空约束(NOT NULL)
格式:列名 数据类型(长度) NOT NULL
例如:
1 2 3 4 5 6 7 | use Demo02
GO
create table student5
(
Sno char (5) not null
)
|
5.4 唯一约束(UNIQUE)
格式:列名 数据类型(长度) UNIQUE
例如:
1 2 3 4 5 6 7 | use Demo02
go
create table student6
(
Sno char (5) unique
)
|
6. 增加语句(insert)
格式:INSERT INTO 表名(列名1,列名2,列名......) VALUES(数据1, 数据2, 数据......);
例如:
1 | insert into student(Sno, Sname) values ( 's0001' , '张三' );
|
7. 删除语句(delete)
7.1 删除表数据(一行)
格式:DELETE FROM 表名 WHERE 列名='值'
例如:
1 2 | delete from student where Sno= 's0001'
delete from student where Sno= 's0001' and Sage not in (20,21)
|
7.2 删除约束
格式:ALTER TABLE 表名 DROP CONSTARAINT 约束名
例如:
1 2 3 | use Demo02
go
alter table student drop constraint CK__student__Sex__108B795B
|
8. 修改语句(update)
格式:UPDATE 表名 SET 列名1=新值1, 列名2=新值2 WHERE 过滤条件
例如:
1 | update student set Sno= 's001' ,Sname= '李四' ,Sage=25,Sex= '女' where Sname= '张三'
|
9. 查询语句(select)
9.1 查询全部
格式:SELECT * FROM 表名
例如:
9.2 查询某列
格式:SELECT 列名 FROM 表名 WHERE 查询条件
例如:
1 | select Sno,Sname from student where Sage=20
|
9.3 自定义查询
9.3.1 列名的重命名
格式:SELECT 列名 as 重命名 FROM 表名 WHERE 查询条件
例如:
1 2 | select Sno as 学号 from student
select Sno 学号 from student
|
9.3.2 列名的加减乘除
格式:SELECT 列名*0.5 FROM 表名 WHERE 查询条件
例如:
1 2 3 | select Sno 学号,Sname 姓名,Sage*0.5 年龄 from student where Sage=20;
select Sno 学号,Sname 姓名,Sage+100 年龄 from student where Sage=20;
select Sno 学号,Sname 姓名,Sage/4 年龄 from student where Sage=20;
|
9.4 正倒序排列
9.4.1 升序
格式:ORDER BY 列名 ASC
例如:
1 | select Sno,Sname,Sage,Sex from student order by Sage asc
|
9.4.2 降序
格式:ORDER BY 列名 DESC
例如:
1 | select Sno,Sname,Sage,Sex from student order by Sage desc
|
9.4.3 升序和降序同时存在
格式:ORDER BY 列名1 DESC, 列名2 ASC
首先按照列名1进行降序排序,然后在相同的列名1值的情况下,再按照列名2进行升序排序。
例如:
1 2 | select Sno,Sname,Sage,Sex from student order by Sage desc , Sno asc
select Sno,Sname,Sage,Sex from student order by Sage desc , Sno desc
|
9.4.4 选择某列排序
格式:ORDER BY 列数 DESC 或者 ORDER BY 列数 ASC
1 2 | select Sno,Sname,Sage,Sex from student order by 1 desc
select Sno,Sname,Sage,Sex from student order by 3 asc
|
9.5 去除重复项
格式:SELECT DISTINCT 列名1, 列名2 FROM 表名 WHERE 查询条件
例如:
1 2 3 4 | select distinct Sage from student
select distinct Sname,Sage from student
|
9.6 把一个表的数据插入另一个表
格式一:(当要插入的表不存在时)SELECT 列名 INTO 新表名 FROM 表名 WHERE 查询条件
例如:
1 | select * into TU_student from student where Sex= '男'
|
格式二:(当要插入的表本身便存在时)
INSERT into 表名1(列名1, 列名2)
select 列名1, 列名2 from 表名2 where 查询条件
例如:
1 2 3 4 5 6 | insert into TU_student(Sno,Sname,Sage,Sex)
select * from student where Sex= '女'
insert into Demo02.dbo.student(Sno,Sname,Sage,Sex)
select * from Demo01.dbo.student
|
9.7 求总行数
格式:SELECT count(*) from 表名 WHERE 查询条件
例如:
1 2 3 4 | select count (*) from student
select count (*) from student where Sex= '男'
|
9.8 求最大值和最小值
格式:SELECT max(列名), min(列名) FROM 表名 WHERE 查询条件
例如:
1 2 3 4 5 6 7 8 9 10 11 | select max (Sage) 最大值, min (Sage) 最小值 from student
select TU_student.Sex, MAX (student.Sage) 最大年龄, MIN (student.Sage) 最小年龄
from TU_student,student
where TU_student.Sno=student.Sno
group by TU_student.Sex
select TU_student.Sname, MAX (student.Sage) 最大年龄, MIN (student.Sage) 最小年龄
from TU_student,student
where TU_student.Sno=student.Sno
group by TU_student.Sname
|
9.9 求平均值
格式:SELECT AVG(列名) FROM 表名 WHERE 查询条件
例如:
1 2 3 | select AVG (Sage) from student
select Sex 性别, AVG (Sage) 平均年龄 from student group by Sex
|
9.10 连接查询
9.10.1 第一种连接方式
格式:SELECT * FROM 表名1, 表名2 WHERE 表名1.列名 = 表名2.列名
例如:
1 2 3 | select TU_student.Sno,student.Sname,TU_student.Sage,student.Sex
from TU_student,student
where TU_student.Sno = student.Sno
|
9.10.2 第二种连接方式
格式:SELECT 列名 FROM 表名1 JOIN 表名2 ON 表名1.列名 = 表名2.列名
例如:
1 2 | select TU_student.Sno,student.Sname,TU_student.Sage,student.Sex
from student join TU_student on student.Sno = TU_student.Sno
|
9.11 模糊查询(LIKE)
9.11.1 以特定字符开头的字符串
格式:SELECT 列名 FROM 表名 WHERE 列名 LIKE ’特定字符%‘
例如:
1 | select * from student where Sno like '0%'
|
9.11.2 以特定字符结尾的字符串
格式:SELECT 列名 FROM 表名 WHERE 列名 LIKE ’%特定字符‘
例如:
1 | select * from student where Sname like '%三'
|
9.11.3 匹配包含特定字符的字符串
格式:SELECT 列名 FROM 表名 WHERE 列名 LIKE ’%特定字符%‘
例如:
1 | select * from student where Sno like '%0%'
|
9.11.4 使用 _ 匹配单个字符
格式:SELECT 列名 FROM 表名 WHERE 列名 LIKE ’特殊字符_‘
例如:
1 | select * from student where Sno like '00_'
|
9.11.5 使用多个 _ 匹配多个单个字符
格式:SELECT 列名 FROM 表名 WHERE 列名 LIKE ’特定字符__‘
例如:
1 | select * from student where Sno like 's___'
|
9.12 分组查询(GROUP BY)
格式:SELECT 列名 FROM 表名 GROUP BY 分组
例如:
1 2 | select Sex, count (*) 人数 from student group by Sex
|
10. 常用函数
10.1 判断语句(CASE WHEN)
格式:SELECT 列名1, 列名2, 列名... , CASE WHEN 判断条件 then 结果为真的返回值 else 结果为假的返回值 end from 表名
例如:
1 2 3 4 5 6 7 | select Sno 学号, case when Sno= '001' then 'true' else 'false' end 是否为001 from student
select Sno 学号,Sname 姓名,Sage 年龄, Sex 性别,
case when Sex= '男' then 'true' else 'false' end 性别是否为男 from student
|
10.2 日期差(DATEDIFF)
格式:SELECT DATEDIFF(day,日期1,日期2) AS 列的别名(例如:日期差多少天) FROM 表名 where 逻辑条件
例如:
1 2 3 | SELECT DATEDIFF( day , '2024-03-01' , '2024-04-01' ) AS 日期差多少天
SELECT DATEDIFF( day ,day1,day2) AS 日期差多少天 from a_dateTable
|
10.3 数据类型转换(CAST)
格式:SELECT CAST(列名 as 数据类型) FROM 表名 where 逻辑条件
例如:
1 2 3 4 | select CAST (Sno as int ) from student where Sno= '001'
select CAST (Sage as char ) from student
|
11. 断开数据库
格式:ALTER DATABASE 数据库名 SET OFFLINE WITH ROLLBACK IMMEDIATE
例如:
1 | alter database Demo02 set offline with rollback immediate
|
12. 分离数据库
格式:EXEC sp_detach_db @dbname=N'数据库名'
例如:
1 | exec sp_detach_db @dbname=N 'Demo02'
|
13. 附加数据库
格式:
EXEC sp_attach_db @dbname=N'数据库名',
@filename1=N’.mdf文件的存储路径‘, @filename2=N'.ldf文件的存储路径'
例如:
1 2 3 | exec sp_attach_db @dbname=N 'Demo02' ,
@filename1=N 'M:\SQLServer_File\Demo02_Data\Demo02.mdf' ,
@filename2=N 'M:\SQLServer_File\Demo02_Data\Demo02_Log.ldf'
|