第 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
浮点
float、real
货币
money、smallmoney
位类型
bit:存 0/1
字符
char(n):固定长度varchar(n):可变长度
Unicode
nchar、nvarchar(支持中文)
文本
text、ntext
二进制
binary、varbinary、image
日期
datetime、smalldatetime
时间戳
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