SQL Server数据库常用语句

目录

[1. 建库语句](#1. 建库语句)

[2. 删库语句](#2. 删库语句)

[3. 创建数据表](#3. 创建数据表)

[4. 创建视图](#4. 创建视图)

[5. 约束语句](#5. 约束语句)

[5.1 主键约束(PRIMARY KEY)](#5.1 主键约束(PRIMARY KEY))

[5.2 外键约束(FOREIGN KEY)](#5.2 外键约束(FOREIGN KEY))

[5.3 非空约束(NOT NULL)](#5.3 非空约束(NOT NULL))

[5.4 唯一约束(UNIQUE)](#5.4 唯一约束(UNIQUE))

[6. 增加语句(insert)](#6. 增加语句(insert))

[7. 删除语句(delete)](#7. 删除语句(delete))

[7.1 删除表数据(一行)](#7.1 删除表数据(一行))

[7.2 删除约束](#7.2 删除约束)

[8. 修改语句(update)](#8. 修改语句(update))

[9. 查询语句(select)](#9. 查询语句(select))

[9.1 查询全部](#9.1 查询全部)

[9.2 查询某列](#9.2 查询某列)

[9.3 自定义查询](#9.3 自定义查询)

[9.3.1 列名的重命名](#9.3.1 列名的重命名)

[9.3.2 列名的加减乘除](#9.3.2 列名的加减乘除)

[9.4 正倒序排列](#9.4 正倒序排列)

[9.4.1 升序](#9.4.1 升序)

[9.4.2 降序](#9.4.2 降序)

[9.4.3 升序和降序同时存在](#9.4.3 升序和降序同时存在)

[9.4.4 选择某列排序](#9.4.4 选择某列排序)

[9.5 去除重复项](#9.5 去除重复项)

[9.6 把一个表的数据插入另一个表](#9.6 把一个表的数据插入另一个表)

[9.7 求总行数](#9.7 求总行数)

[9.8 求最大值和最小值](#9.8 求最大值和最小值)

[9.9 求平均值](#9.9 求平均值)

[9.10 连接查询](#9.10 连接查询)

[9.10.1 第一种连接方式](#9.10.1 第一种连接方式)

[9.10.2 第二种连接方式](#9.10.2 第二种连接方式)

[9.11 模糊查询(LIKE)](#9.11 模糊查询(LIKE))

[9.11.1 以特定字符开头的字符串](#9.11.1 以特定字符开头的字符串)

[9.11.2 以特定字符结尾的字符串](#9.11.2 以特定字符结尾的字符串)

[9.11.3 匹配包含特定字符的字符串](#9.11.3 匹配包含特定字符的字符串)

[9.11.4 使用 _ 匹配单个字符](#9.11.4 使用 _ 匹配单个字符)

[9.11.5 使用多个 _ 匹配多个单个字符](#9.11.5 使用多个 _ 匹配多个单个字符)

[9.12 分组查询(GROUP BY)](#9.12 分组查询(GROUP BY))

[10. 常用函数](#10. 常用函数)

[10.1 判断语句(CASE WHEN)](#10.1 判断语句(CASE WHEN))

[10.2 日期差(DATEDIFF)](#10.2 日期差(DATEDIFF))

[10.3 数据类型转换(CAST)](#10.3 数据类型转换(CAST))

[11. 断开数据库](#11. 断开数据库)

[12. 分离数据库](#12. 分离数据库)

[13. 附加数据库](#13. 附加数据库)


1. 建库语句

**格式:**create database 数据库名;

例如:

sql 复制代码
--创建库
create database Demo01;

格式:创建数据库(自定义初始值)

create database 数据库名

on primary

(

name='逻辑名称',

filename='文件存储路径',

)

log on

(

name='逻辑名称',

filename='文件存储路径',

)

例如:

sql 复制代码
--创建数据库(自定义初始值)
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可以不一致)

sql 复制代码
--创建数据库(自定义初始值)
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 数据库名

例如:

sql 复制代码
--删库语句
drop database Demo03

3. 创建数据表

格式:

use 数据库名

GO

create table 表名

(

列名 数据类型(长度) 列级束缚

)

例如:

sql 复制代码
use Demo01
GO
create table student
(
	Sno char(5) NOT NULL UNIQUE,  -- UNIQUE 唯一值
	Sname char(8) NOT NULL,
	Sage smallint default 20,  --default 默认值
	Sex char(2) check(Sex='男' or Sex='女')
)

4. 创建视图

格式:

USE 数据库名

GO

CREATE VIEW 视图名

as select 列名

from 表名

GO

例如:

sql 复制代码
-- 创建视图
USE Demo01
GO
CREATE VIEW Demo01_View_student
as
	select * from student
GO

5. 约束语句

5.1 主键约束(PRIMARY KEY)

**格式一:**列名 数据类型(长度) PRIMARY KEY

例如:

sql 复制代码
-- 主键约束
use Demo02
GO
create table student1
(
	Sno char(5) primary key
)

**格式二:**CONSTRAINT 约束名 PRIMARY KEY(列名)

例如:

sql 复制代码
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 被引用列的名称(列名)

例如:

sql 复制代码
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

例如:

sql 复制代码
-- 非空约束
use Demo02
GO
create table student5
(
	Sno char(5) not null
)

5.4 唯一约束(UNIQUE)

**格式:**列名 数据类型(长度) UNIQUE

例如:

sql 复制代码
-- 唯一约束
use Demo02
go
create table student6
(
	Sno char(5) unique
)

6. 增加语句(insert)

**格式:**INSERT INTO 表名(列名1,列名2,列名......) VALUES(数据1, 数据2, 数据......);

例如:

sql 复制代码
insert into student(Sno, Sname) values ('s0001', '张三');

7. 删除语句(delete)

7.1 删除表数据(一行)

**格式:**DELETE FROM 表名 WHERE 列名='值'

例如:

sql 复制代码
delete from student where Sno='s0001' 
delete from student where Sno='s0001' and Sage not in (20,21)

7.2 删除约束

**格式:**ALTER TABLE 表名 DROP CONSTARAINT 约束名

例如:

sql 复制代码
use Demo02
go
alter table student drop constraint CK__student__Sex__108B795B

8. 修改语句(update)

**格式:**UPDATE 表名 SET 列名1=新值1, 列名2=新值2 WHERE 过滤条件

例如:

sql 复制代码
update student set Sno='s001',Sname='李四',Sage=25,Sex='女' where Sname='张三'

9. 查询语句(select)

9.1 查询全部

**格式:**SELECT * FROM 表名

例如:

sql 复制代码
select * from student

9.2 查询某列

**格式:**SELECT 列名 FROM 表名 WHERE 查询条件

例如:

sql 复制代码
select Sno,Sname from student where Sage=20

9.3 自定义查询

9.3.1 列名的重命名

**格式:**SELECT 列名 as 重命名 FROM 表名 WHERE 查询条件

例如:

sql 复制代码
select Sno as 学号 from student
select Sno 学号 from student

9.3.2 列名的加减乘除

**格式:**SELECT 列名*0.5 FROM 表名 WHERE 查询条件

例如:

sql 复制代码
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

例如:

sql 复制代码
select Sno,Sname,Sage,Sex from student order by Sage asc

9.4.2 降序

**格式:**ORDER BY 列名 DESC

例如:

sql 复制代码
select Sno,Sname,Sage,Sex from student order by Sage desc

9.4.3 升序和降序同时存在

**格式:**ORDER BY 列名1 DESC, 列名2 ASC

首先按照列名1进行降序排序,然后在相同的列名1值的情况下,再按照列名2进行升序排序。

例如:

sql 复制代码
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

sql 复制代码
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 查询条件

例如:

sql 复制代码
-- 学生表年龄不重复
select distinct Sage from student
-- 学生表姓名和年龄不重复
select distinct Sname,Sage from student

9.6 把一个表的数据插入另一个表

**格式一:(当要插入的表不存在时)**SELECT 列名 INTO 新表名 FROM 表名 WHERE 查询条件

例如:

sql 复制代码
select * into TU_student from student where Sex='男'

格式二:(当要插入的表本身便存在时)

INSERT into 表名1(列名1, 列名2)

select 列名1, 列名2 from 表名2 where 查询条件

例如:

sql 复制代码
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 查询条件

例如:

sql 复制代码
select count(*) from student

--  性别为男的行数
select count(*) from student where Sex='男'

9.8 求最大值和最小值

**格式:**SELECT max(列名), min(列名) FROM 表名 WHERE 查询条件

例如:

sql 复制代码
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 查询条件

例如:

sql 复制代码
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.列名

例如:

sql 复制代码
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.列名

例如:

sql 复制代码
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 '特定字符%'

例如:

sql 复制代码
select * from student where Sno like '0%'

9.11.2 以特定字符结尾的字符串

**格式:**SELECT 列名 FROM 表名 WHERE 列名 LIKE '%特定字符'

例如:

sql 复制代码
select * from student where Sname like '%三'

9.11.3 匹配包含特定字符的字符串

**格式:**SELECT 列名 FROM 表名 WHERE 列名 LIKE '%特定字符%'

例如:

sql 复制代码
select * from student where Sno like '%0%'

9.11.4 使用 _ 匹配单个字符

**格式:**SELECT 列名 FROM 表名 WHERE 列名 LIKE '特殊字符_'

例如:

sql 复制代码
select * from student where Sno like '00_'

9.11.5 使用多个 _ 匹配多个单个字符

**格式:**SELECT 列名 FROM 表名 WHERE 列名 LIKE '特定字符__'

例如:

sql 复制代码
select * from student where Sno like 's___'

9.12 分组查询(GROUP BY)

**格式:**SELECT 列名 FROM 表名 GROUP BY 分组

例如:

sql 复制代码
--  男女分别多少人
select Sex, count(*) 人数 from student group by Sex

10. 常用函数

10.1 判断语句(CASE WHEN)

**格式:**SELECT 列名1, 列名2, 列名... , CASE WHEN 判断条件 then 结果为真的返回值 else 结果为假的返回值 end from 表名

例如:

sql 复制代码
-- 学号是否为001
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 逻辑条件

例如:

sql 复制代码
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 逻辑条件

例如:

sql 复制代码
-- 吧001学号转为int数据类型
select CAST(Sno as int) from student where Sno='001'
-- 吧年龄转为char数据类型
select CAST(Sage as char) from student

11. 断开数据库

**格式:**ALTER DATABASE 数据库名 SET OFFLINE WITH ROLLBACK IMMEDIATE

例如:

sql 复制代码
alter database Demo02 set offline with rollback immediate

12. 分离数据库

**格式:**EXEC sp_detach_db @dbname=N'数据库名'

例如:

sql 复制代码
exec sp_detach_db @dbname=N'Demo02'

13. 附加数据库

格式:

EXEC sp_attach_db @dbname=N'数据库名',

@filename1=N'.mdf文件的存储路径', @filename2=N'.ldf文件的存储路径'

例如:

sql 复制代码
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'
相关推荐
Elastic 中国社区官方博客4 分钟前
Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
晴天のVlog6 分钟前
Fastapi使用MongoDB作为数据库
数据库·python·mongodb·fastapi
Desmend__20 分钟前
正则表达式那些事儿
数据库·mysql·正则表达式
袁庭新37 分钟前
LuaRocks如何安装数据库驱动?
java·数据库·redis·lua·luarocks·袁庭新
Narutolxy1 小时前
从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化20241112
数据库
chusheng18401 小时前
Python 正则表达式进阶用法:分组与引用详解
数据库·python·正则表达式
喵叔哟2 小时前
重构代码之移动字段
java·数据库·重构
念白4432 小时前
智能病历xml提取
数据库·sql·oracle
qingy_20462 小时前
【JavaWeb】JavaWeb入门之XML详解
数据库·oracle
大数据面试宝典2 小时前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt