
1. 基本查询从零开始的SQL探索第一次接触SQL查询时我完全被那些陌生的关键字搞懵了。直到后来才发现基本查询就像在超市购物一样简单 - 你只需要告诉收银员数据库你想要什么商品数据。在SqlServer中最基本的查询语句结构是SELECT 字段名 FROM 表名这个简单的语句背后藏着不少实用技巧。比如使用*通配符可以查询所有字段就像把整个购物车都倒出来一样-- 查询学生表所有信息 SELECT * FROM Student但实际工作中我建议尽量避免使用*因为它会降低查询效率。更好的做法是明确指定需要的字段就像购物时列出清单一样精准-- 只查询学生姓名和年龄 SELECT name, age FROM Student这里有个实用小技巧 - 使用AS关键字可以给字段起别名让查询结果更易读-- 给字段起中文别名 SELECT name AS 姓名, age AS 年龄 FROM Student在实际项目中我发现很多人会忽略字段顺序的重要性。合理的字段排序能让查询结果更符合业务逻辑比如把姓名放在前面年龄放在后面这样更符合我们的阅读习惯。2. 条件查询精准定位你需要的数据如果说基本查询是全盘接收那么条件查询就是精挑细选。它就像在电商网站使用筛选器一样帮你快速找到符合特定条件的商品。SqlServer提供了丰富的条件运算符我把它们分为三类比较运算符,,,,,!逻辑运算符AND,OR,NOT特殊运算符IN,BETWEEN,LIKE,IS NULL举个实际例子假设我们要查询年龄在20-25岁之间的女生SELECT * FROM Student WHERE age BETWEEN 20 AND 25 AND sex 女这里有个容易踩的坑很多人会写成age 20 AND age 25虽然效果相同但BETWEEN语法更简洁直观。另一个实用技巧是CASE WHEN语句它相当于SQL中的条件判断SELECT name, age, CASE WHEN age 18 THEN 未成年 WHEN age BETWEEN 18 AND 22 THEN 大学生 ELSE 社会人士 END AS 年龄段 FROM Student我在项目中经常用这个功能做数据分类统计它比在代码中处理要高效得多。3. 聚合查询让数据开口说话聚合查询是数据分析的利器它能帮你从海量数据中提取关键指标。常用的聚合函数有五个COUNT()- 计数SUM()- 求和AVG()- 平均值MAX()- 最大值MIN()- 最小值举个实际案例计算班级平均年龄SELECT AVG(age) AS 平均年龄 FROM Student但这里有个常见误区很多人会直接使用AVG(age)而不给别名这样在程序处理结果集时可能会遇到麻烦。我建议始终为聚合字段设置明确的别名。更复杂的场景是嵌套聚合查询比如找出年龄最大的学生信息SELECT * FROM Student WHERE age (SELECT MAX(age) FROM Student)这种写法虽然有效但在大数据量表上性能可能不佳。我后来发现使用TOP配合ORDER BY通常效率更高SELECT TOP 1 * FROM Student ORDER BY age DESC4. 模糊查询像侦探一样寻找线索在真实业务中我们经常需要根据不完整信息查找数据这时模糊查询就派上用场了。SqlServer主要通过LIKE关键字配合通配符实现%- 匹配任意数量字符_- 匹配单个字符[]- 匹配指定范围内的字符[^]- 匹配不在指定范围内的字符比如查找所有姓张的学生SELECT * FROM Student WHERE name LIKE 张%这里有个性能优化技巧尽量避免在模糊查询条件前使用通配符如%张%这会导致全表扫描。如果必须这样做考虑添加适当的索引。更复杂的模糊查询可以结合多个通配符比如查找名字第二个字是小的学生SELECT * FROM Student WHERE name LIKE _小%在实际项目中我发现很多人会滥用模糊查询。对于精确匹配的场景使用运算符效率要高得多。5. 分组查询数据分类的艺术分组查询是数据分析的核心技能它能帮你发现数据中的模式和趋势。基本语法是SELECT 字段列表 FROM 表名 GROUP BY 分组字段举个典型例子按性别统计学生人数和平均年龄SELECT sex AS 性别, COUNT(*) AS 人数, AVG(age) AS 平均年龄 FROM Student GROUP BY sex这里有个关键点SELECT中的非聚合字段必须出现在GROUP BY子句中否则会报错。这是我初学时经常犯的错误。更高级的用法是HAVING子句它用于对分组结果进行筛选类似于WHERE对原始数据的筛选SELECT class_id, AVG(score) AS 平均分 FROM Student GROUP BY class_id HAVING AVG(score) 80记住一个简单规则WHERE在分组前过滤数据HAVING在分组后过滤结果。6. 多表查询连接数据的桥梁实际业务中数据往往分散在多个表中多表查询就是连接这些数据的桥梁。SqlServer支持多种连接方式内连接(INNER JOIN)- 只返回两表中匹配的行左外连接(LEFT JOIN)- 返回左表所有行右表不匹配则为NULL右外连接(RIGHT JOIN)- 返回右表所有行左表不匹配则为NULL全外连接(FULL JOIN)- 返回两表所有行不匹配则为NULL最常用的是内连接比如查询学生及其班级信息SELECT s.name AS 学生姓名, c.name AS 班级名称 FROM Student s INNER JOIN Class c ON s.class_id c.id这里我使用了表别名s和c这能让SQL更简洁易读。在实际项目中明确指定连接条件非常重要否则可能会产生笛卡尔积导致性能问题。左外连接特别适合查询主表信息即使从表没有匹配记录SELECT s.name AS 学生姓名, t.name AS 班主任 FROM Student s LEFT JOIN Teacher t ON s.teacher_id t.id在多表查询中我建议始终检查执行计划确保连接操作使用了适当的索引。对于复杂查询可以考虑使用临时表或CTE(公用表表达式)来简化逻辑。