SQL Server T-SQL 一周学习完整概述|约束、多表查询、子查询、事务、模糊查询全套实战
一、前言本周系统学习了 SQL Server T-SQL 完整核心知识从数据库基础、建表与数据四大完整性约束到增删改查基础语法、多表关联查询、子查询、事务处理最后补充生产高频使用的模糊查询 LIKE全套内容。本文整合全部知识点去重梳理配套可直接执行的 SQL 示例适合复习、面试、开发查阅。二、Day01 认识 SQL Server 数据库基础1.核心概念1DB/DBMS/DBA1.DBDatabase数据库存储结构化数据的容器2.DBMS数据库管理系统操作数据库软件主流SQL Server、MySQL、Oracle、DB23.DBA数据库管理员负责库维护、调优、权限管理。2SQL Server 文件结构1..mdf主数据文件一个库只能 1 个2..ldf事务日志文件记录所有增删改操作用于事务回滚、数据恢复3..ndf次要数据文件可选分担存储压力。3系统自带数据库master系统核心库、model新建库模板、msdb代理任务、tempdb临时数据重启清空。4常用数据类型表格类型分类关键字说明整型int存储整数常用于主键 ID、自增标识列货币money自动保留 4 位小数薪资、金额专用布尔bit仅存 0/1代表否 / 是日期date/datetime存储入职时间、创建时间固定字符串nchar(n)长度固定不足补空格查询更快可变字符串varchar(n)/nvarchar(n)占用实际字符长度节省存储空间5示例创建数据库-- 创建测试库 CREATE DATABASE SchoolDB ON PRIMARY ( NAME SchoolDB_Data, FILENAME D:\SQLData\SchoolDB.mdf, SIZE 5MB, FILEGROWTH 2MB ) LOG ON ( NAME SchoolDB_Log, FILENAME D:\SQLData\SchoolDB.ldf, SIZE 2MB, FILEGROWTH 1MB ); GO三、Day02 建表 四大数据完整性约束数据完整性分类思维导图总结1.实体完整性约束行唯一主键、唯一约束、标识自增列2.域完整性约束列数据合法数据类型、非空、默认值、CHECK 检查约束3.引用完整性约束多表关系外键 FOREIGN KEY4.自定义完整性复杂业务规则进阶内容各类约束特点对比1.主键 PRIMARY KEY唯一 非空一张表仅 1 个主键可单字段 / 多字段组合2.唯一 UNIQUE值不能重复允许 1 行 NULL3.标识列 IDENTITY (种子增量)int 专用自动自增无法手动插入4.CHECK 检查约束自定义规则如性别只能男 / 女、年龄 18~605.外键 FOREIGN KEY关联另一张表主键保证引用数据真实存在。完整建表示例带全部约束-- 部门表主键自增 CREATE TABLE dept( id INT PRIMARY KEY IDENTITY(1,1), dname VARCHAR(50) NOT NULL, -- 非空约束 loc VARCHAR(50) DEFAULT 北京 -- 默认值约束 ); -- 员工表含外键、检查约束 CREATE TABLE emp( id INT PRIMARY KEY IDENTITY(1,1), ename NVARCHAR(20) NOT NULL, gender NCHAR(2), salary MONEY, joindate DATE, dept_id INT, -- 检查约束性别只能男/女 CONSTRAINT ck_gender CHECK(gender N男 OR gender N女), -- 外键关联部门表 CONSTRAINT fk_emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id) );四、Day03 T-SQL 增删改查 DML 基础1. DML 分类INSERT/UPDATE/DELETE/SELECT1插入 INSERT-- 指定字段插入 INSERT INTO dept(dname,loc) VALUES(N研发部,N上海); -- 全字段插入顺序匹配表结构 INSERT INTO emp(ename,gender,salary,joindate,dept_id) VALUES(N孙悟空,N男,7200,2013-02-24,1);2修改 UPDATE-- 带条件更新不加WHERE会更新全表高危 UPDATE emp SET salary 8000 WHERE ename N孙悟空;3删除 DELETE / TRUNCATE / DROP 区别DELETE 表名 WHERE 条件删除指定行日志记录可事务回滚自增编号不重置TRUNCATE TABLE 表名清空全表数据不记录单行日志速度快自增重置DROP TABLE 表名直接删除整张表结构 数据无法恢复。DELETE FROM emp WHERE id 1; TRUNCATE TABLE emp; DROP TABLE emp;4基础查询 SELECT-- 基础查询、别名、分页、判空、不等于 SELECT TOP 10 id AS 员工编号, ename 姓名, salary 工资 FROM emp WHERE salary 5000 AND gender IS NOT NULL -- 不为空 AND ename N猪八戒 -- 不等于 ORDER BY salary DESC; -- 降序五、高级查询多表连接、子查询高级查询 PDF 核心1. 笛卡尔积问题多表直接查询不加关联条件会生成两表所有数据组合产生大量无效数据必须用关联条件过滤。2. 内连接 INNER JOIN只查两张表交集数据两种写法隐式 WHERE、显式 JOIN ON-- 隐式内连接 SELECT e.ename,d.dname FROM emp e,dept d WHERE e.dept_id d.id; -- 显式内连接推荐可读性更高 SELECT e.ename,d.dname FROM emp e INNER JOIN dept d ON e.dept_id d.id;3.外连接1.左外连接 LEFT JOIN左表全部数据匹配右表数据无匹配显示 NULLSELECT e.*,d.dname FROM emp e LEFT JOIN dept d ON e.dept_id d.id;2.右外连接 RIGHT JOIN右表全部数据匹配左表数据4. 自连接同一张表上下级关联-- 查询员工和直属领导姓名 SELECT sub.ename 员工,leader.ename 领导 FROM emp sub LEFT JOIN emp leader ON sub.mgr leader.id;5. 子查询三大分类1.单行单列子查询搭配 -- 查询工资高于平均工资的员工 SELECT * FROM emp WHERE salary (SELECT AVG(salary) FROM emp);2.多行单列子查询搭配IN-- 查询财务部、市场部所有员工 SELECT * FROM emp WHERE dept_id IN ( SELECT id FROM dept WHERE dname IN(N财务部,N市场部) );3.多行多列子查询子查询作为虚拟表参与关联-- 查询2011年后入职员工对应部门 SELECT d.*,t.* FROM dept d, (SELECT * FROM emp WHERE joindate 2011-11-11) t WHERE d.id t.dept_id;六、事务 Transaction 转账实战1. 事务作用保证一组增删改操作要么全部成功要么全部失败解决转账、库存扣减等数据一致性问题。事务四大特性 ACID原子性、一致性、隔离性、持久性转账完整事务示例-- 银行账户表 CREATE TABLE bank( uname NVARCHAR(20), umoney MONEY CHECK(umoney 1) ); INSERT INTO bank VALUES(N班长,10000),(N学委,100); -- 事务转账逻辑 DECLARE myerror INT 0; BEGIN TRANSACTION -- 开启事务 -- 扣款 UPDATE bank SET umoney umoney - 5000 WHERE uname N班长; SET myerror myerror ERROR; -- 收款 UPDATE bank SET umoney umoney 5000 WHERE uname N学委; SET myerror myerror ERROR; -- 判断是否出错 IF myerror 0 BEGIN ROLLBACK TRANSACTION; -- 出错回滚 PRINT N转账失败数据回滚; END ELSE BEGIN COMMIT TRANSACTION; -- 无错误提交 PRINT N转账成功; END七、SQL Server T-SQL 模糊查询 LIKE1. LIKE 完整语法SELECT 字段 FROM 表 WHERE 字符串字段 LIKE 匹配模板 [ESCAPE 转义符]四类通配符符号作用示例%0 或多个任意字符ename LIKE N李%_单个任意字符ename LIKE N_悟_[xy]匹配括号内单个字符tel LIKE 1[358]%[^xy]排除括号内字符id LIKE [^0]%2. ESCAPE 转义字段包含_/%时使用-- 查询名称带下划线的记录/为转义符 SELECT * FROM emp WHERE ename LIKE N%/_% ESCAPE /;3. NOT LIKE 反向模糊匹配-- 筛选姓名不含“妖”的员工 SELECT ename,salary FROM emp WHERE ename NOT LIKE N%妖%;4. 多表联查模糊实战-- 查询部门名含“部”、员工姓名含“唐”的数据 SELECT e.ename,d.dname FROM emp e INNER JOIN dept d ON e.dept_id d.id WHERE e.ename LIKE N%唐% AND d.dname LIKE N%部%;5. 数字 / 日期模糊匹配需 CAST 转字符串-- 查询2001年入职员工 SELECT ename,joindate FROM emp WHERE CAST(joindate AS VARCHAR) LIKE 2001%;6. 模糊查询的性能核心要点1.%放在最前面LIKE %关键词索引失效全表扫描2.前缀匹配关键词%可正常走索引3.全文索引解决全局模糊检索%xx%百万级数据高效查询。八、本周知识点整体梳理总结本文整合本周SQL Server T-SQL全部学习内容系统梳理从数据库基础、建表约束、增删改查、多表查询、子查询、事务到模糊查询的完整知识体系。文章先讲解数据库文件、数据类型与四大数据完整性约束搭配带约束的建表代码区分INSERT、UPDATE、DELETE、TRUNCATE、DROP的使用差异详解内/外/自连接与三类子查询实操通过转账案例演示事务回滚与提交机制补充文档未完整覆盖的T-SQL模糊查询包含四类通配符、转义字符、多表模糊匹配及索引优化要点。全文配套可直接执行的SQL示例去重整合多份教学文档内容覆盖开发常用场景清晰梳理知识点层级帮助快速掌握SQL Server核心查询与数据保障能力适用于复习与日常开发查阅。