当前位置: 首页 > news >正文

SQL 最常用技能详解与实战示例

引言

SQL(Structured Query Language,结构化查询语言)是与关系型数据库交互的核心工具。无论是数据分析师、后端开发工程师还是产品经理,掌握 SQL 的核心技能都至关重要。本文将系统性地介绍 SQL 中最常用、最核心的技能,并通过清晰的示例帮助你快速上手和巩固。

1. 数据查询基础:SELECT 与 FROM

SELECTFROM是 SQL 的基石,用于从表中检索数据。

核心语法:

SELECT列名1,列名2,...FROM表名;

示例:
假设我们有一个employees表(员工表),包含id,name,department,salary等列。

-- 查询所有员工的所有信息SELECT*FROMemployees;-- 查询所有员工的姓名和部门SELECTname,departmentFROMemployees;

2. 数据过滤:WHERE 子句

WHERE子句用于根据指定条件过滤记录。

核心语法:

SELECT列名FROM表名WHERE条件;

常用运算符:

  • =:等于
  • ><>=<=:比较
  • <>!=:不等于
  • BETWEEN ... AND ...:在某个范围内
  • LIKE:模糊匹配(%匹配任意字符,_匹配单个字符)
  • IN (...):在列表中
  • IS NULL:是空值

示例:

-- 查询销售部门的所有员工SELECT*FROMemployeesWHEREdepartment='Sales';-- 查询薪资大于 50000 的员工姓名SELECTnameFROMemployeesWHEREsalary>50000;-- 查询姓名以 ‘张’ 开头的员工SELECT*FROMemployeesWHEREnameLIKE'张%';-- 查询部门为 ‘Sales’ 或 ‘Marketing’ 的员工SELECT*FROMemployeesWHEREdepartmentIN('Sales','Marketing');

3. 数据排序:ORDER BY 子句

ORDER BY子句用于对结果集进行排序,默认升序(ASC),降序使用DESC

核心语法:

SELECT列名FROM表名ORDERBY列名1[ASC|DESC],列名2[ASC|DESC];

示例:

-- 按薪资从高到低排序所有员工SELECTname,salaryFROMemployeesORDERBYsalaryDESC;-- 先按部门升序排列,同部门内按薪资降序排列SELECTname,department,salaryFROMemployeesORDERBYdepartmentASC,salaryDESC;

4. 数据聚合与分组:GROUP BY 与聚合函数

聚合函数对一组值执行计算并返回单个值。GROUP BY子句将结果集按一列或多列分组,常与聚合函数一起使用。

常用聚合函数:

  • COUNT():计数
  • SUM():求和
  • AVG():求平均值
  • MAX():求最大值
  • MIN():求最小值

核心语法:

SELECT聚合函数(列名),分组列FROM表名GROUPBY分组列;

示例:

-- 统计每个部门的员工数量SELECTdepartment,COUNT(*)asemployee_countFROMemployeesGROUPBYdepartment;-- 计算每个部门的平均薪资和最高薪资SELECTdepartment,AVG(salary)asavg_salary,MAX(salary)asmax_salaryFROMemployeesGROUPBYdepartment;

5. 分组后过滤:HAVING 子句

WHERE子句在分组前过滤行,而HAVING子句在分组后过滤分组结果。

核心语法:

SELECT聚合函数(列名),分组列FROM表名GROUPBY分组列HAVING分组后条件;

示例:

-- 查询员工数量超过 5 人的部门SELECTdepartment,COUNT(*)asemployee_countFROMemployeesGROUPBYdepartmentHAVINGCOUNT(*)>5;-- 查询平均薪资超过 60000 的部门SELECTdepartment,AVG(salary)asavg_salaryFROMemployeesGROUPBYdepartmentHAVINGAVG(salary)>60000;

6. 数据连接:JOIN

JOIN用于根据两个或多个表之间的相关列合并行。这是处理关系型数据的核心技能。

常用 JOIN 类型:

  • INNER JOIN:返回两个表中匹配的行。
  • LEFT (OUTER) JOIN:返回左表的所有行,以及右表中匹配的行。不匹配的右表部分为 NULL。
  • RIGHT (OUTER) JOIN:返回右表的所有行,以及左表中匹配的行。不匹配的左表部分为 NULL。
  • FULL (OUTER) JOIN:返回两个表中所有的行,不匹配的部分为 NULL。

核心语法:

SELECT列名FROM表AJOIN表BON表A.关联列=表B.关联列;

示例:
假设我们还有一个orders表(订单表),包含order_id,employee_id,amount等列,通过employee_idemployees表关联。

-- 查询所有员工及其订单信息(内连接,只显示有订单的员工)SELECTe.name,e.department,o.order_id,o.amountFROMemployees eINNERJOINorders oONe.id=o.employee_id;-- 查询所有员工,以及他们的订单信息(左连接,即使员工没有订单也会显示)SELECTe.name,e.department,o.order_id,o.amountFROMemployees eLEFTJOINorders oONe.id=o.employee_id;

7. 子查询

子查询是嵌套在其他 SQL 查询中的查询。它可以出现在SELECTFROMWHEREHAVING子句中。

示例:

-- 在 WHERE 子句中使用子查询:查询薪资高于平均薪资的员工SELECTname,salaryFROMemployeesWHEREsalary>(SELECTAVG(salary)FROMemployees);-- 在 FROM 子句中使用子查询(派生表)SELECTdept_stats.department,dept_stats.avg_salFROM(SELECTdepartment,AVG(salary)asavg_salFROMemployeesGROUPBYdepartment)ASdept_statsWHEREdept_stats.avg_sal>50000;

8. 数据操作:INSERT, UPDATE, DELETE

除了查询,SQL 也用于操作数据。

INSERT(插入数据):

-- 插入一行完整数据INSERTINTOemployees(id,name,department,salary)VALUES(101,'张三','Engineering',75000);-- 插入多行数据INSERTINTOemployees(id,name,department,salary)VALUES(102,'李四','Sales',60000),(103,'王五','Marketing',55000);

UPDATE(更新数据):

-- 将员工 ‘张三’ 的部门更新为 ‘Management’UPDATEemployeesSETdepartment='Management'WHEREname='张三';-- 为所有销售部门的员工加薪 10%UPDATEemployeesSETsalary=salary*1.10WHEREdepartment='Sales';

DELETE(删除数据):

-- 删除 id 为 101 的员工DELETEFROMemployeesWHEREid=101;-- 删除所有薪资低于 30000 的员工(谨慎使用!)DELETEFROMemployeesWHEREsalary<30000;

9. 数据定义:CREATE TABLE, ALTER TABLE, DROP TABLE

这些语句用于定义和修改数据库结构。

CREATE TABLE(创建表):

CREATETABLEemployees(idINTPRIMARYKEY,nameVARCHAR(100)NOTNULL,departmentVARCHAR(50),salaryDECIMAL(10,2),hire_dateDATEDEFAULTCURRENT_DATE);

ALTER TABLE(修改表结构):

-- 添加一个新列ALTERTABLEemployeesADDCOLUMNemailVARCHAR(255);-- 修改列的数据类型ALTERTABLEemployeesALTERCOLUMNsalaryTYPEDECIMAL(12,2);-- 删除一个列ALTERTABLEemployeesDROPCOLUMNemail;

DROP TABLE(删除表):

-- 删除表(极其危险,会丢失所有数据)DROPTABLEemployees;

总结

掌握以上 SQL 技能,你就能应对日常工作中 80% 以上的数据库操作需求。核心路径是:查询(SELECT) -> 过滤(WHERE) -> 排序(ORDER BY) -> 聚合分组(GROUP BY/HAVING) -> 连接(JOIN)。数据操作(增删改)和表结构操作(DDL)则用于维护数据本身。

建议在本地安装 MySQL、PostgreSQL 或使用在线 SQL 练习平台,结合本文的示例进行实操,是掌握 SQL 最快的方式。

http://www.jsqmd.com/news/867773/

相关文章:

  • API调用成本失控?从prompt设计到流式响应,7类高费场景避坑清单,立即止损
  • Java 程序员第 27 阶段:多模型动态路由,灵活切换公有云与本地大模型
  • 腾讯 Marvis 马维斯完整使用教程 2026 最新版
  • 2026年5月更新:武汉元泉世纪健身管理有限公司——武汉瑜伽培训行业的领航者与性价比之选 - 2026年企业推荐榜
  • ElevenLabs江苏话语音适配指南(方言TTS工程化白皮书):覆盖苏州/南京/南通3大方言片,含ASR对齐误差率↓42.7%实测数据
  • 福贡县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 大中小型企业数据层配置规模分析与选型指南
  • ChatGPT FAQ生成不再“假大空”:引入领域知识图谱+用户会话埋点的增强生成框架(已获专利受理号CN2024XXXXXX)
  • hls::stream作为高层次设计中最总要的建模
  • 2026年5月北京办公室装饰装修公司推荐:TOP5排行办公高效评测专业价格注意事项 - 品牌推荐
  • 大中小型企业数据配置年度成本估算分析
  • 如何用3个微小改动让React组件从“能用”升级为“爱用”?——Lovable前端落地实录
  • 在 LangGraph 里做动态路由:意图分类+置信度阈值+回退链路
  • 【央行金融科技白皮书深度解码】:AI Agent在跨境支付、信贷审批、监管报送三大场景的9项强制性技术基线
  • 红河县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • SQL 语句:从产生、发展到内容全景
  • 2026年5月新消息:洛阳地区工业级EDTA采购,为何洛阳崟生化工有限公司是可靠供应商? - 2026年企业推荐榜
  • 河口瑶族自治县黄金回收白银铂金店铺哪家好 门店推荐 - 莘州文化
  • 别再死磕传统SEO!2026年AI搜索流量爆发,头部GEO公司推荐与转型指南 - 商业科技观察
  • NotebookLM移动端响应延迟高达2.7秒?揭秘GPU加速未启用背后的架构真相,3步强制优化
  • 小龙虾 AI 太香了!10 分钟部署 OpenClaw 数字员工
  • 红塔区黄金回收白银回收铂金回收店铺哪家好 靠谱门店推荐 - 莘州文化
  • 澜沧拉祜族自治县黄金回收贵金属回收店推荐 联系方式 - 莘州文化
  • ChatGPT API响应延迟高达8s?揭秘网络层、模型路由与缓存策略的4层加速方案(实测TP99↓62%)
  • 江城哈尼族彝族自治县黄金回收贵金属回收店推荐 联系方式 - 莘州文化
  • SQL 新手入门:最适合上手的工具全解析(免费/付费、小型/中大型项目)
  • ZenTimings完整指南:轻松监控和优化AMD Ryzen内存时序的终极工具
  • 巧家县黄金回收店铺哪家好 靠谱门店推荐及联系方式 - 莘州文化
  • 深度避坑!90%的SEO公司都在“挂羊头卖狗肉”,2026正规GEO服务商排名与防坑指南 - 商业科技观察
  • 在AWS中国区使用NYC Taxi数据集在Apache Flink(KDA)中实现流数据处理管道的实践