news 2026/4/23 13:00:45

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/15 17:38:43

小白必学!RAG与向量数据库完全指南,5分钟掌握大模型核心技术

文章介绍了RAG&#xff08;检索增强生成&#xff09;是一种结合检索与生成的大语言模型应用架构&#xff0c;其检索部分通常通过向量数据库实现。向量数据库用于存储和高效搜索高维向量表示&#xff0c;将文本转换为向量进行相似度检索。RAG通过预处理文档为向量存入数据库&…

作者头像 李华
网站建设 2026/4/22 17:35:28

【Day32】Tomcat 服务器:安装、配置与 Web 应用部署

本文收录于「Java 学习日记&#xff1a;从入门到架构师」专栏&#xff0c;聚焦 Java Web 核心基础&#xff0c;从 Tomcat 实操入手&#xff0c;帮你打通 “写代码 - 部署运行” 的最后一公里&#xff5e; 一、为什么要学 Tomcat&#xff1f; 在上一篇 HTTP 协议的学习中&…

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

转行大模型领域:30+程序员的明智之选,收藏这份学习资料包,想转行大模型,还来得及吗?

文章论述了转行到大模型领域的可行性和优势&#xff0c;特别强调了30程序员的技术积累、跨领域知识和抗压能力等优势。提供了转行AI大模型的具体步骤和学习路径&#xff0c;包括初阶应用、高阶应用、模型训练和商业闭环四个阶段。大模型领域人才需求大&#xff0c;薪资高&#…

作者头像 李华
网站建设 2026/4/16 17:55:40

重磅!谷歌推出全新TranslateGemma翻译模型系列

1 月 16 日&#xff0c;Google 正式推出了全新开放翻译模型系列 TranslateGemma。该系列基于 Gemma 3 架构开发&#xff0c;提供 4B、12B 和 27B 三种参数规模。Google 表示&#xff0c;TranslateGemma 的推出标志着开放翻译技术的又一重大进展&#xff0c;旨在打破语言障碍&am…

作者头像 李华
网站建设 2026/4/20 13:03:01

学习黑客了解5分钟了解中间人攻击(MITM)

5分钟了解中间人攻击&#xff08;MITM&#xff09;&#x1f575;️‍♂️ 什么是中间人攻击&#xff08;Man-in-the-Middle, MITM&#xff09;&#xff1f; 中间人攻击是一种网络攻击方式&#xff0c;攻击者悄无声息地“夹在”通信两端之间&#xff0c;偷偷读取、篡改、伪造或…

作者头像 李华