SQL Server 超详细入门教程

第 1 章 数据库基础概念(先看懂,再动手)

1.1 数据库有什么用?

  • 数据持久化保存在本地
  • 提供结构化、快速查询能力

1.2 四个必懂概念

  • DB:Database 数据库(存数据的仓库)
  • DBMS:数据库管理系统(MySQL、Oracle、SQL Server)
  • DBS:数据库系统(库 + 管理系统 + 人)
  • SQL:结构化查询语言(所有数据库通用)

1.3 数据库怎么存数据?

  • 数据 → 表 → 库
  • 一个库多张表,表名唯一
  • 列 = 字段 = Java 属性
  • 行 = 记录 = Java 对象

1.4 数据库分类

  • 关系型:MySQL、Oracle、SQL Server、DB2
  • 非关系型
    • 键值:Redis、Memcached
    • 列存储:HBase、Cassandra
    • 文档:MongoDB
    • 图:Neo4j

1.5 SQL 语言五大分类

  • DQL :查询 select
  • DML :增删改 insert/update/delete
  • DDL :定义库 / 表 create/alter/drop
  • DCL :权限 grant/revoke
  • TCL :事务 commit/rollback

第 2 章 SQL Server 介绍 + 安装 + 连接

2.1 介绍

微软出品的关系型数据库,Windows 平台友好,功能全面,企业常用。

2.2 下载(SQL Server 2008 R2)

复制代码
ed2k://|file|cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso|4662884352|1DB025218B01B48C6B76D6D88630F541|/

2.3 安装步骤

  • 解压 ISO
  • 运行安装程序
  • 选择默认实例
  • 身份验证选择 混合模式(SQL+Windows)
  • 设置 SA 密码(一定要记住)

2.4 第一种连接(官方工具)

开始菜单 → SQL Server Management Studio

  • 服务器名:. 或 localhost
  • 身份验证:SQL Server 身份验证
  • 账号:sa
  • 密码:你安装时设置的

2.5 第二种连接(Navicat)

  • 新建连接 → SQL Server
  • 输入 IP、账号、密码测试连接即可

学习推荐:官方工具 SSMS


第 3 章 数据库管理(创建、修改、删除)

3.1 创建数据库

界面方式

右键【数据库】→ 新建数据库 → 输入库名 → 确定

命令方式

复制代码
CREATE DATABASE TEST1
ON
(
	NAME='TEST1_DATA',
	FILENAME='C:\TEST1_DATA.MDF',
	SIZE=5MB,
	MAXSIZE=UNLIMITED,
	FILEGROWTH=10%
)
LOG ON
(
	NAME='TEST1_LOG',
	FILENAME='C:\TEST1_LOG.LDF',
	SIZE=5MB,
	MAXSIZE=50MB,
	FILEGROWTH=1MB
)
GO

3.2 修改数据库

复制代码
-- 修改文件大小与增长
ALTER DATABASE TEST1
MODIFY FILE 
(
	NAME=TEST1_DATA,
	MAXSIZE=100MB,
	FILEGROWTH=5MB
)
GO

-- 添加文件组
ALTER DATABASE TEST1 ADD FILEGROUP FGROUP
GO

-- 添加数据文件到文件组
ALTER DATABASE TEST1
ADD FILE
(
	NAME='TEST1_DATA2',
	FILENAME='C:\TEST1_DATA2.ndf',
	SIZE=10MB
),
(
	NAME='TEST1_DATA3',
	FILENAME='C:\TEST1_DATA3.ndf',
	SIZE=10MB
) TO FILEGROUP FGROUP
GO

-- 删除文件
ALTER DATABASE TEST1 REMOVE FILE TEST1_DATA2
GO

-- 删除文件组
ALTER DATABASE TEST1 REMOVE FILEGROUP FGROUP
GO

-- 添加日志文件
ALTER DATABASE TEST1
ADD LOG FILE
(
	NAME='TEST1_LOG2',
	FILENAME='C:\TEST1_LOG2.ldf',
	SIZE=5MB
)
GO

-- 数据库改名
ALTER DATABASE TEST1 MODIFY NAME=JUST_TEST
GO

3.3 删除数据库

复制代码
DROP DATABASE JUST_TEST
GO

第 4 章 SQL Server 数据类型(背会)

整数

  • bigint(8)、int(4)、smallint(2)、tinyint(1)

精确小数

  • decimal/numeric

浮点

  • floatreal

货币

  • moneysmallmoney

位类型

  • bit:存 0/1

字符

  • char(n):固定长度
  • varchar(n):可变长度

Unicode

  • ncharnvarchar(支持中文)

文本

  • textntext

二进制

  • binaryvarbinaryimage

日期

  • datetimesmalldatetime

时间戳

  • timestamp

第 5 章 数据表管理(学生表 / 课程表 / 成绩表)

5.1 创建表

学生表 XSB

复制代码
CREATE TABLE XSB (
    学号 char(6) NOT NULL PRIMARY KEY,
    姓名 char(8) NOT NULL,
    性别 bit DEFAULT 1,
    出生时间 datetime NULL,
    专业 char(12) NULL,
    总学分 int DEFAULT 0 CHECK(总学分>=0 AND 总学分<160),
    备注 varchar(500) NULL
)
GO

课程表 KCB

复制代码
CREATE TABLE KCB (
    课程号 char(3) NOT NULL PRIMARY KEY,
    课程名 char(16) NOT NULL,
    开课学期 tinyint DEFAULT 1 CHECK(开课学期>=1 AND 开课学期<=8),
    学时 tinyint DEFAULT 0,
    学分 tinyint DEFAULT 0
)
GO

成绩表 CJB

复制代码
CREATE TABLE CJB (
    学号 char(6) NOT NULL,
    课程号 char(3) NOT NULL,
    成绩 int DEFAULT 0,
    PRIMARY KEY(学号,课程号)
)
GO

5.2 修改表

复制代码
-- 添加列
ALTER TABLE XSB ADD 奖学金等级 tinyint NULL
GO

-- 修改列
ALTER TABLE XSB ALTER COLUMN 奖学金等级 int NOT NULL
GO

-- 删除列
ALTER TABLE XSB DROP COLUMN 奖学金等级
GO

5.3 删除表

复制代码
DROP TABLE XSB
DROP TABLE KCB
DROP TABLE CJB
GO

第 6 章 表数据管理(增删改)

6.1 插入

复制代码
INSERT INTO XSB(学号,姓名,性别,出生时间,专业) 
VALUES('180135','曹晨磊',1,'1997-12-05','计算机网络')
GO

6.2 修改

复制代码
UPDATE XSB SET 专业='计算机软件' WHERE 学号='180135'
GO

6.3 删除

复制代码
DELETE FROM XSB WHERE 学号='180135'
GO

第 7 章 数据查询(最重点!考试 / 作业必考)

先执行提供的建表 + 批量插入数据脚本。

7.1 简单查询

复制代码
SELECT * FROM XSB
SELECT 学号,姓名 FROM XSB

7.2 别名

复制代码
SELECT 学号,姓名 AS 学生姓名 FROM XSB
SELECT 学号,姓名 学生姓名 FROM XSB
SELECT 学号,学生姓名=姓名 FROM XSB

7.3 去重

复制代码
SELECT DISTINCT 专业 FROM XSB

7.4 条件查询(常用)

复制代码
-- 等于
SELECT * FROM XSB WHERE 学号='081103'

-- 模糊匹配
SELECT * FROM XSB WHERE 姓名 LIKE '王%'
SELECT * FROM XSB WHERE 姓名 LIKE '__民'

-- 范围
SELECT * FROM XSB WHERE 总学分 BETWEEN 42 AND 45

-- 空值
SELECT * FROM XSB WHERE 备注 IS NULL
SELECT * FROM XSB WHERE 备注 IS NOT NULL

-- IN
SELECT * FROM XSB WHERE 学号 IN('081101','081102','081103')

-- 成绩等级
SELECT 学号,成绩等级=
CASE
	WHEN 成绩>=90 THEN '优秀'
	WHEN 成绩>=70 THEN '良好'
	WHEN 成绩>=60 THEN '及格'
	ELSE '不及格'
END
FROM CJB

7.5 分组查询

复制代码
SELECT 专业,COUNT(*) 人数 FROM XSB GROUP BY 专业

SELECT 课程号,MAX(成绩) FROM CJB GROUP BY 课程号
SELECT 课程号,MIN(成绩) FROM CJB GROUP BY 课程号
SELECT 课程号,AVG(成绩) FROM CJB GROUP BY 课程号

7.6 分组后过滤 HAVING

复制代码
SELECT 课程号,AVG(成绩) FROM CJB 
GROUP BY 课程号 
HAVING AVG(成绩)>75

7.7 排序

复制代码
SELECT * FROM CJB WHERE 课程号='101' ORDER BY 成绩 DESC

7.8 多表连接(三表联查)

复制代码
SELECT x.学号,x.姓名,k.课程名,c.成绩
FROM XSB x,CJB c,KCB k
WHERE x.学号=c.学号 AND c.课程号=k.课程号
AND x.学号='081101'
ORDER BY c.成绩 ASC

7.9 子查询

复制代码
-- 选离散数学的学生
SELECT 学号 FROM CJB 
WHERE 课程号=(SELECT 课程号 FROM KCB WHERE 课程名='离散数学')

-- 比计算机所有学生都小
SELECT * FROM XSB 
WHERE 出生时间 > (SELECT MAX(出生时间) FROM XSB WHERE 专业='计算机')

7.10 限制条数 TOP

复制代码
SELECT TOP 10 * FROM XSB

SELECT TOP 10 * FROM XSB 
WHERE 学号 NOT IN(SELECT TOP 10 学号 FROM XSB)

第 8 章 SQL Server 高级语法

8.1 索引

复制代码
-- 创建
CREATE INDEX I_KCM ON KCB(课程名)
GO

-- 重建
ALTER INDEX I_KCM ON KCB REBUILD
GO

-- 删除
DROP INDEX KCB.I_KCM
GO

8.2 视图

复制代码
CREATE VIEW V_CJ AS
SELECT x.学号,x.姓名,k.课程名,c.成绩
FROM XSB x,CJB c,KCB k
WHERE x.学号=c.学号 AND c.课程号=k.课程号
GO

SELECT * FROM V_CJ
GO

DROP VIEW V_CJ
GO

8.3 T-SQL 语言

变量

复制代码
DECLARE @var1 VARCHAR(10), @var2 VARCHAR(30)
SET @var1='中国'
SET @var2=@var1+'很棒'
SELECT @var1,@var2

分支 IF

复制代码
IF 1=1
	SELECT * FROM XSB
ELSE
	SELECT * FROM KCB

循环 WHILE

复制代码
DECLARE @num INT=0
WHILE(SELECT 总学分 FROM XSB WHERE 学号='081102')<60
BEGIN
	UPDATE XSB SET 总学分=总学分+2 WHERE 学号='081102'
	SET @num=@num+1
END
SELECT @num

常用函数

复制代码
SELECT ABS(-1)
SELECT GETDATE()
SELECT YEAR(GETDATE())
SELECT LOWER('ABC')
SELECT UPPER('abc')
SELECT SUBSTRING('hello',2,3)
SELECT CAST(123 AS VARCHAR)
SELECT CONVERT(VARCHAR,123)

自定义函数

复制代码
CREATE FUNCTION F_GET_AVG(@学号 CHAR(6))
RETURNS INT
AS
BEGIN
	DECLARE @avg INT
	SELECT @avg=AVG(成绩) FROM CJB WHERE 学号=@学号
	RETURN @avg
END
GO

SELECT dbo.F_GET_AVG('081102')
GO

8.4 触发器

复制代码
CREATE TRIGGER T_XSB_DELETE
ON XSB AFTER DELETE
AS
BEGIN
	DELETE FROM CJB WHERE 学号 IN(SELECT 学号 FROM deleted)
END
GO

8.5 存储过程

复制代码
CREATE PROCEDURE P_GET_AVG
@num CHAR(6),
@avgScore FLOAT OUTPUT
AS
BEGIN
	SELECT @avgScore=AVG(成绩) FROM CJB WHERE 学号=@num
END
GO

-- 调用
DECLARE @avg FLOAT
EXEC P_GET_AVG '081102',@avg OUTPUT
SELECT @avg

第 9 章 备份与恢复

备份

复制代码
USE master
GO
EXEC sp_addumpdevice 'disk','mybackup','D:\mybackup.bak'
GO

BACKUP DATABASE 学生信息数据库 TO mybackup
GO

恢复

复制代码
RESTORE DATABASE 学生信息数据库 FROM mybackup WITH REPLACE
GO
相关推荐
吴声子夜歌6 小时前
SQL经典实例——元数据查询
数据库·sql
吴声子夜歌7 小时前
SQL经典实例——处理字符串
数据库·sql
罗政12 小时前
AI工作流实现Excel自动化+SQL,零 VBA ,零公式,电商订单分析案例 | DTBot
sql·自动化·excel
吴声子夜歌12 小时前
SQL经典实例——处理数字
java·数据库·sql
NineData12 小时前
日常巡检 Oracle 时,ChatDBA 怎么把会话、SQL 和等待事件一起看
数据库·sql·oracle·ninedata·故障排查·chatdba·实例巡检
吴声子夜歌1 天前
SQL经典实例——使用多张表
数据库·sql
摇滚侠1 天前
MyBatis 入门到项目实战 特殊 SQL 的执行 34-37
java·sql·mybatis
layflat_coder1 天前
NL2SQL 正确率怎么提升:ChatBI 的 `<error-msg>` 错误反馈闭环
sql
摇滚侠1 天前
MyBatis 入门到项目实战 MyBatis 分页插件 65-66
java·开发语言·sql·mybatis
北风toto1 天前
深度拆解:本体与智能体协同生成SQL的底层逻辑与工程实践
数据库·sql·microsoft