news 2026/4/16 15:44:43

SQL常见知识点汇总

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL常见知识点汇总

俗话说:地基不牢,地动山摇。SQL常见知识点还是很重要的,掌握了,操作数据库是错错有余。

1. 数据库基本操作

创建数据库

-- 创建数据库 CREATE DATABASE EmployeeDB; GO -- 使用数据库 USE EmployeeDB; GO

创建表

-- 创建员工表 CREATETABLE Employees ( EmployeeID INTIDENTITY(1,1) PRIMARY KEY, FirstName NVARCHAR(50) NOTNULL, LastName NVARCHAR(50) NOTNULL, Email NVARCHAR(100) UNIQUE, HireDate DATEDEFAULTGETDATE(), Salary DECIMAL(10,2) CHECK (Salary > 0), DepartmentID INT ); -- 创建部门表 CREATETABLE Departments ( DepartmentID INTIDENTITY(1,1) PRIMARY KEY, DepartmentName NVARCHAR(100) NOTNULL, ManagerID INT );

2. 数据作语言(DML)

插入数据

-- 插入部门数据 INSERTINTO Departments (DepartmentName) VALUES ('技术部'), ('销售部'), ('人力资源部'); -- 插入员工数据 INSERTINTO Employees (FirstName, LastName, Email, Salary, DepartmentID) VALUES ('张三', '张', 'zhangsan@company.com', 8000.00, 1), ('李四', '李', 'lisi@company.com', 7500.00, 1), ('王五', '王', 'wangwu@company.com', 9000.00, 2);

更新数据

-- 更新员工薪资 UPDATE Employees SET Salary = Salary * 1.1 WHERE DepartmentID = 1; -- 使用JOIN更新 UPDATE e SET e.Salary = e.Salary * 1.05 FROM Employees e INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID WHERE d.DepartmentName = '技术部';

删除数据

-- 删除特定记录 DELETE FROM Employees WHERE EmployeeID = 3; -- 使用事务删除 BEGIN TRANSACTION; DELETE FROM Employees WHERE HireDate < '2020-01-01'; COMMIT TRANSACTION;

3. 数据查询

基础查询

-- 选择所有列 SELECT * FROM Employees; -- 选择特定列 SELECT FirstName, LastName, Salary FROM Employees; -- 使用别名 SELECT FirstName AS'名字', LastName AS'姓氏', Salary AS'薪资' FROM Employees;

WHERE条件查询

-- 基本条件查询 SELECT * FROM Employees WHERE Salary > 8000; -- 多条件查询 SELECT * FROM Employees WHERE Salary BETWEEN7000AND9000 AND DepartmentID = 1; -- LIKE模糊查询 SELECT * FROM Employees WHERE LastName LIKE'张%'; -- IN查询 SELECT * FROM Employees WHERE DepartmentID IN (1, 2);

聚合函数

-- 常用聚合函数 SELECT COUNT(*) AS '员工总数', AVG(Salary) AS '平均薪资', MAX(Salary) AS '最高薪资', MIN(Salary) AS '最低薪资', SUM(Salary) AS '薪资总额' FROM Employees;

4. 表连接查询

INNER JOIN

-- 内连接查询员工和部门信息 SELECT e.FirstName, e.LastName, e.Salary, d.DepartmentName FROM Employees e INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID;

LEFT/RIGHT JOIN

-- 左外连接:显示所有员工,即使没有部门 SELECT e.FirstName, e.LastName, d.DepartmentName FROM Employees e LEFTJOIN Departments d ON e.DepartmentID = d.DepartmentID; -- 右外连接:显示所有部门,即使没有员工 SELECT e.FirstName, e.LastName, d.DepartmentName FROM Employees e RIGHTJOIN Departments d ON e.DepartmentID = d.DepartmentID;

5. 高级查询技巧

分组查询

-- 按部门分组统计 SELECT d.DepartmentName, COUNT(e.EmployeeID) AS '员工数量', AVG(e.Salary) AS '平均薪资' FROM Departments d LEFT JOIN Employees e ON d.DepartmentID = e.DepartmentID GROUP BY d.DepartmentID, d.DepartmentName HAVING COUNT(e.EmployeeID) > 0;

子查询

-- 使用子查询查找薪资高于平均值的员工 SELECT FirstName, LastName, Salary FROM Employees WHERE Salary > (SELECTAVG(Salary) FROM Employees); -- 使用IN的子查询 SELECT FirstName, LastName FROM Employees WHERE DepartmentID IN ( SELECT DepartmentID FROM Departments WHERE DepartmentName LIKE'%技术%' );

6. 视图的创建与使用

创建视图

-- 创建员工信息视图 CREATE VIEW vw_EmployeeDetails AS SELECT e.EmployeeID, e.FirstName + ' ' + e.LastName AS FullName, e.Email, e.Salary, d.DepartmentName, e.HireDate FROM Employees e INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID;

使用视图

-- 查询视图 SELECT * FROM vw_EmployeeDetails WHERE Salary > 8000; -- 更新视图(有限制条件) UPDATE vw_EmployeeDetails SET Salary = 8500 WHERE EmployeeID = 1;

7. 存储过程

创建存储过程

-- 创建获取员工信息的存储过程 CREATEPROCEDURE sp_GetEmployeesByDepartment @DepartmentID INT = NULL, @MinSalary DECIMAL(10,2) = 0 AS BEGIN SELECT FirstName, LastName, Salary, HireDate FROM Employees WHERE (@DepartmentID ISNULLOR DepartmentID = @DepartmentID) AND Salary >= @MinSalary ORDERBY Salary DESC; END;

执行存储过程

-- 执行存储过程 EXEC sp_GetEmployeesByDepartment @DepartmentID = 1, @MinSalary = 7000; -- 使用默认参数 EXEC sp_GetEmployeesByDepartment;

8. 索引优化

创建索引

-- 创建单列索引 CREATEINDEX IX_Employees_DepartmentID ON Employees(DepartmentID); -- 创建复合索引 CREATEINDEX IX_Employees_Name ON Employees(LastName, FirstName); -- 创建唯一索引 CREATEUNIQUEINDEX IX_Employees_Email ON Employees(Email); -- 查看索引信息 SELECT nameAS IndexName, type_desc ASIndexType FROM sys.indexes WHERE object_id = OBJECT_ID('Employees');

9. 事务处理

事务基本使用

-- 简单事务示例 BEGINTRANSACTION; BEGIN TRY -- 更新员工薪资 UPDATE Employees SET Salary = Salary * 1.1 WHERE DepartmentID = 1; -- 记录日志(假设有Log表) INSERTINTO SalaryLog (EmployeeID, OldSalary, NewSalary, ChangeDate) SELECT EmployeeID, Salary / 1.1, Salary, GETDATE() FROM Employees WHERE DepartmentID = 1; COMMITTRANSACTION; PRINT '事务执行成功'; END TRY BEGIN CATCH ROLLBACKTRANSACTION; PRINT '事务执行失败: ' + ERROR_MESSAGE(); END CATCH;

10. 常用系统函数

字符串函数

-- 字符串处理示例 SELECT FirstName, LastName, UPPER(FirstName) AS UpperFirstName, LOWER(LastName) AS LowerLastName, LEN(FirstName) AS NameLength, LEFT(FirstName, 1) AS FirstInitial, REVERSE(FirstName) AS ReversedName FROM Employees;

日期函数

-- 日期处理示例 SELECT FirstName, HireDate, GETDATE() AS CurrentDate, DATEDIFF(YEAR, HireDate, GETDATE()) AS YearsOfWork, DATEADD(MONTH, 6, HireDate) AS ProbationEndDate, DATENAME(MONTH, HireDate) AS HireMonth FROM Employees;

11. 窗口函数

排名函数

-- 使用窗口函数进行排名 SELECT FirstName, LastName, Salary, DepartmentID, ROW_NUMBER() OVER (PARTITIONBY DepartmentID ORDERBY Salary DESC) AS DeptSalaryRank, RANK() OVER (ORDERBY Salary DESC) AS OverallSalaryRank, DENSE_RANK() OVER (ORDERBY Salary DESC) AS DenseSalaryRank, NTILE(4) OVER (ORDERBY Salary DESC) AS SalaryQuartile FROM Employees;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 6:24:09

程序员必学!RAG技术详解:从鸡哥拿投资的实战到AI架构收藏指南

本文通过鸡哥的故事引入RAG&#xff08;检索增强生成&#xff09;技术&#xff0c;介绍其工作原理&#xff1a;先从知识库检索相关信息&#xff0c;再结合问题输入大语言模型生成更准确回答。文章详细讲解了实现RAG的关键技术&#xff0c;包括文本向量化、文档切分和向量数据库…

作者头像 李华
网站建设 2026/4/16 14:28:59

无线LED照明系统

摘 要 本次毕业设计的题目是无线LED照明系统&#xff08;Zigbee&#xff09;的设计与实现。本论文就毕业设计的内容&#xff0c;选用Atmega16单片机作主控制器&#xff0c;系统地阐述了整个由Zigbee协议支持的无线LED照明系统的功能及实现。在指导老师的帮助下设计并实现了从底…

作者头像 李华
网站建设 2026/4/16 10:57:32

11个AI论文工具,支持LaTeX排版与多维度内容优化

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数&#xff0c;兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化&#xff0c;语义保留佳 是 格式统一化 askpaper 降重降AI一体&#xff0c;20分钟快速响应 是 初稿优化 秒篇 人类特…

作者头像 李华
网站建设 2026/4/15 15:16:16

11种AI论文创作助手,提供LaTeX排版与语义优化双重支持

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数&#xff0c;兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化&#xff0c;语义保留佳 是 格式统一化 askpaper 降重降AI一体&#xff0c;20分钟快速响应 是 初稿优化 秒篇 人类特…

作者头像 李华
网站建设 2026/4/16 12:22:48

智能化的11类论文辅助工具,兼容LaTeX并实现高效内容升级

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数&#xff0c;兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化&#xff0c;语义保留佳 是 格式统一化 askpaper 降重降AI一体&#xff0c;20分钟快速响应 是 初稿优化 秒篇 人类特…

作者头像 李华
网站建设 2026/4/16 12:28:51

一种基于STM32的智能门锁系统的设计

第二章 整体方案设计 2.1 需求分析 搭建简单的智能门锁系统作品&#xff0c;需要相应的硬件与软件结合&#xff0c;本设计基于STM32的智能门锁系统主要实现的功能要求有&#xff1a; (1)显示屏显示操作界面&#xff1b; (2)使用者可以通过设置按键进入管理界面&#xff0c;可以…

作者头像 李华