SQL语句从入门到精通:只看这一篇就够了!
目录1. 什么是 SQL2. 环境准备新手推荐二、SQL 入门核心语法CRUD1. 数据库与表操作DDL2. 数据操作DML增删改3. 数据查询DQL最核心的 SELECT1基础查询2条件查询WHERE3排序ORDER BY4聚合函数5分组查询GROUP BY6分页查询三、SQL 进阶多表操作与高级语法1. 多表连接JOIN核心连接类型2. 子查询3. 常用高级语法1CASE WHEN条件分支2事务TRANSACTION3索引INDEX四、SQL 优化进阶必备五、实战练习总结SQL语句是操作数据库的核心无论是Mysql、PostgreSQL、SQL Server、Oracle都需要通过SQL语句进行操作。因此只要掌握了SQL语句今后不论遇到什么类型的关系型数据库都能利用SQL语句进行增删改查。1. 什么是 SQL在学习SQL语句之前我们先来了解一下什么是SQL语句。SQLStructured Query Language是结构化查询语言用于管理和操作关系型数据库如 MySQL、PostgreSQL、SQL Server、Oracle核心能力包括数据查询最常用数据新增 / 修改 / 删除数据库 / 表结构管理权限控制等简单来说SQL是一种用于操作关系型数据库的语言。如同java和C编写程序一样SQL不同的点在于操作数据库。如果读者有高级编程语言的基础的话对于SQL语句的学习会更加得心应手。2. 环境准备新手推荐本地安装 MySQL Navicat/DBeaver可视化工具在线使用 SQL Fiddle、DB Fiddle 等在线数据库平台无需安装即可练习下面是一些常见的SQL语句能够帮助你从0到1掌握SQL语句。SQL语句不区分大小写即对大小写不敏感因此以下大写字母均可以改为小写二、SQL 入门核心语法CRUD1. 数据库与表操作DDL先掌握如何创建 / 查看 / 删除数据库和表这是操作数据的基础。-- 1. 数据库操作 CREATE DATABASE IF NOT EXISTS test_db; -- 创建数据库避免重复 USE test_db; -- 切换到目标数据库 DROP DATABASE IF EXISTS test_db; -- 删除数据库 -- 2. 表操作以学生表为例 CREATE TABLE IF NOT EXISTS student ( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增 name VARCHAR(50) NOT NULL, -- 姓名非空 age INT, -- 年龄 gender VARCHAR(10), -- 性别 score DECIMAL(5,2), -- 分数5位数字2位小数 create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间默认当前时间 ); -- 查看表结构 DESC student; -- 修改表添加字段 ALTER TABLE student ADD COLUMN class VARCHAR(20); -- 删除表 DROP TABLE IF EXISTS student;2. 数据操作DML增删改-- 1. 新增数据INSERT -- 方式1指定字段 INSERT INTO student (name, age, gender, score, class) VALUES (张三, 18, 男, 90.5, 高一(1)班); -- 方式2批量新增 INSERT INTO student (name, age, gender, score, class) VALUES (李四, 17, 女, 88.0, 高一(1)班), (王五, 18, 男, 95.5, 高一(2)班); -- 2. 修改数据UPDATE必须加WHERE否则修改全表 UPDATE student SET score 92.0, class 高一(1)班 WHERE id 2; -- 3. 删除数据DELETE必须加WHERE否则删除全表 DELETE FROM student WHERE id 3; -- 清空表自增主键重置 TRUNCATE TABLE student;3. 数据查询DQL最核心的 SELECT查询是 SQL 最常用的功能从简单到复杂逐步掌握1基础查询-- 查询所有字段*生产环境尽量避免指定字段更高效 SELECT * FROM student; -- 查询指定字段 SELECT name, age, score FROM student; -- 去重查询DISTINCT SELECT DISTINCT class FROM student; -- 别名AS简化字段/表名 SELECT name AS 姓名, age AS 年龄, score AS 分数 FROM student AS s;2条件查询WHERE-- 基本条件、、、、、!/ SELECT * FROM student WHERE score 90; -- 多条件AND且、OR或、NOT非 SELECT * FROM student WHERE age 17 AND gender 女; -- 范围查询BETWEEN...AND... SELECT * FROM student WHERE score BETWEEN 85 AND 95; -- 模糊查询LIKE%任意字符_单个字符 SELECT * FROM student WHERE name LIKE 张%; -- 姓张的所有名字 SELECT * FROM student WHERE name LIKE 张_; -- 姓张且名字2个字 -- 空值判断IS NULL / IS NOT NULL SELECT * FROM student WHERE age IS NOT NULL; -- 枚举查询IN SELECT * FROM student WHERE class IN (高一(1)班, 高一(2)班);3排序ORDER BY-- 升序ASC默认、降序DESC SELECT * FROM student ORDER BY score DESC, age ASC;4聚合函数用于统计数据常用COUNT计数、SUM求和、AVG平均、MAX最大、MIN最小-- 统计总人数 SELECT COUNT(*) AS 总人数 FROM student; -- 统计男生人数COUNT指定字段避免NULL SELECT COUNT(id) AS 男生人数 FROM student WHERE gender 男; -- 平均分、总分、最高分 SELECT AVG(score) AS 平均分, SUM(score) AS 总分, MAX(score) AS 最高分 FROM student;5分组查询GROUP BY结合聚合函数按指定字段分组统计-- 按班级分组统计每个班的人数、平均分 SELECT class AS 班级, COUNT(*) AS 人数, AVG(score) AS 平均分 FROM student GROUP BY class; -- 分组后筛选HAVING区别于WHEREWHERE筛选行HAVING筛选分组 SELECT class AS 班级, COUNT(*) AS 人数 FROM student GROUP BY class HAVING COUNT(*) 5; -- 筛选人数大于5的班级6分页查询不同数据库语法略有差异新手重点掌握 MySQL-- MySQLLIMIT 起始位置从0开始, 条数 SELECT * FROM student LIMIT 0, 10; -- 第1页每页10条 SELECT * FROM student LIMIT 10, 10; -- 第2页每页10条 -- SQL ServerTOP / OFFSET...FETCH SELECT TOP 10 * FROM student; -- OracleROWNUM SELECT * FROM (SELECT *, ROWNUM rn FROM student) WHERE rn BETWEEN 1 AND 10;三、SQL 进阶多表操作与高级语法1. 多表连接JOIN当数据分布在多张表时如学生表 成绩表 课程表需要连接查询先创建关联表示例-- 课程表 CREATE TABLE course ( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(50) NOT NULL -- 课程名 ); -- 成绩表关联学生和课程 CREATE TABLE score ( sid INT, -- 关联student.id cid INT, -- 关联course.cid score DECIMAL(5,2), PRIMARY KEY (sid, cid), -- 复合主键 FOREIGN KEY (sid) REFERENCES student(id), -- 外键约束 FOREIGN KEY (cid) REFERENCES course(cid) );核心连接类型-- 内连接INNER JOIN只返回两表匹配的数据 SELECT s.name AS 学生姓名, c.cname AS 课程名, sc.score AS 分数 FROM student s INNER JOIN score sc ON s.id sc.sid INNER JOIN course c ON sc.cid c.cid; -- 左连接LEFT JOIN返回左表所有数据右表无匹配则为NULL SELECT s.name AS 学生姓名, c.cname AS 课程名, sc.score AS 分数 FROM student s LEFT JOIN score sc ON s.id sc.sid LEFT JOIN course c ON sc.cid c.cid; -- 右连接RIGHT JOIN返回右表所有数据左表无匹配则为NULL -- 全连接FULL JOIN返回两表所有数据MySQL不支持需用UNION模拟2. 子查询将一个查询结果作为另一个查询的条件 / 数据源分为标量子查询返回单个值列子查询返回一列行子查询返回一行表子查询返回多行多列-- 标量子查询查询分数高于平均分的学生 SELECT name, score FROM student WHERE score (SELECT AVG(score) FROM student); -- 列子查询查询高一(1)班的所有学生成绩 SELECT * FROM score WHERE sid IN (SELECT id FROM student WHERE class 高一(1)班); -- 表子查询将子查询结果作为临时表 SELECT t.name, t.平均分 FROM ( SELECT class, AVG(score) AS 平均分 FROM student GROUP BY class ) t WHERE t.平均分 90;3. 常用高级语法1CASE WHEN条件分支-- 给分数分级 SELECT name, score, CASE WHEN score 90 THEN 优秀 WHEN score 80 THEN 良好 WHEN score 60 THEN 及格 ELSE 不及格 END AS 等级 FROM student;2事务TRANSACTION保证多步操作要么全成功要么全失败如转账START TRANSACTION; -- 开启事务 UPDATE account SET balance balance - 100 WHERE id 1; UPDATE account SET balance balance 100 WHERE id 2; COMMIT; -- 提交事务生效 -- ROLLBACK; -- 回滚出错时撤销操作3索引INDEX提升查询效率新手重点掌握创建语法-- 创建索引针对查询频繁的字段 CREATE INDEX idx_student_name ON student(name); -- 查看索引 SHOW INDEX FROM student; -- 删除索引 DROP INDEX idx_student_name ON student;四、SQL 优化进阶必备** 避免 SELECT ***只查询需要的字段减少 IO 和内存消耗索引优化主键 / 外键自动建索引查询频繁的字段如 WHERE、JOIN、ORDER BY建索引避免在索引字段上做函数 / 运算如WHERE YEAR(create_time) 2024会失效索引减少全表扫描WHERE 条件尽量命中索引避免OR、%开头的LIKE分页优化大数据量分页用LIMIT 偏移量, 条数时偏移量越大越慢可改为WHERE id 上一页最大id LIMIT 10避免大事务事务越长锁占用时间越久容易引发并发问题。五、实战练习SQL语句的精通需要进行大量的练习以下是一些学习的建议和推荐练习的平台。推荐新手通过以下方式巩固练习经典 SQL 题LeetCode 数据库题库简单 / 中等难度、牛客网 SQL 专项模拟业务场景如 “统计每个班级的男女比例”、“查询不及格的学生及对应课程”。总结核心基础SQL 的核心是 CRUD其中SELECT查询是重点必须掌握条件、排序、聚合、分组、分页等基础语法进阶核心多表连接JOIN是处理关联数据的关键子查询和 CASE WHEN 能解决复杂业务逻辑实战关键写 SQL 时要注意效率索引、避免全表扫描生产环境中UPDATE/DELETE必须加 WHERE 条件避免误操作。

相关新闻

大数据领域Kafka的主题删除与重建流程

大数据领域Kafka的主题删除与重建流程

大数据领域Kafka的主题删除与重建流程 关键词:Kafka、主题删除、主题重建、分区管理、数据一致性、运维实践、性能优化 摘要:本文深入探讨Apache Kafka中主题删除与重建的核心流程,从底层原理到实际操作进行全面解析。文章首先介绍Kafka主题的基本概念和管理需求,然后详细分…

2026/5/17 4:39:01 阅读更多 →
超声波风速计:原理、技术与应用全解析

超声波风速计:原理、技术与应用全解析

目录 一、工作原理:基于声波传播的时间差效应 1.1 基本物理模型 1.2 时差法核心公式推导 1.3 风速风向合成原理 1.4 测量模式对比 二、核心技术:实现高精度测量的关键要素 2.1 换能器技术:声波发射与接收的核心 2.2 高精度时间测量技术…

2026/5/17 4:39:01 阅读更多 →
论文写作AI工具大比拼,10个实用网站的深度评测与推荐

论文写作AI工具大比拼,10个实用网站的深度评测与推荐

毕业论文写作是学术生涯中的重要环节,但文献整理和内容创作往往耗费大量精力。随着AI技术的快速发展,智能工具正逐步改变这一现状。以aibiye和aicheck为代表的专业学术AI工具,通过智能文献分析、内容优化和查重校对等功能,显著提升…

2026/7/3 4:35:04 阅读更多 →

最新新闻

基于STM32单片机宠物自动喂食系统喂水控制系统 WIFI监控宠物喂养1(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)

基于STM32单片机宠物自动喂食系统喂水控制系统 WIFI监控宠物喂养1(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)

基于STM32单片机宠物自动喂食系统喂水控制系统 WIFI监控宠物喂养1(设计源文件万字报告讲解)(支持资料、图片参考_降重降ai) 版本0 :5个定时喂食喂食提醒自动/手动模式TFT液晶显示年,月,日,十,分…

2026/7/3 16:24:33 阅读更多 →
ICM-42688-P运动传感器与PIC18F4455在工业自动化中的应用

ICM-42688-P运动传感器与PIC18F4455在工业自动化中的应用

1. ICM-42688-P运动传感器的技术解析 ICM-42688-P是一款六轴运动传感器,集成了三轴陀螺仪和三轴加速度计。这款传感器在工业应用中表现出色,主要得益于以下几个关键技术特性: 1.1 高精度运动检测能力 ICM-42688-P的陀螺仪量程可达2000dps&a…

2026/7/3 16:24:33 阅读更多 →
STM32G031K8与KMX62 IMU在运动控制中的实践应用

STM32G031K8与KMX62 IMU在运动控制中的实践应用

1. 项目背景与核心价值在工业自动化、机器人技术和消费电子领域,稳定性和平衡控制一直是关键挑战。传统方案往往采用分立式传感器搭配复杂算法,不仅成本高企,调试周期也漫长。KMX62作为一款6自由度(6DOF)惯性测量单元(IMU),结合ST…

2026/7/3 16:22:33 阅读更多 →
零售收款机安全漏洞深度解析与实战加固指南

零售收款机安全漏洞深度解析与实战加固指南

1. 项目概述:为什么收款机安全不容忽视你可能觉得,一台小小的收款机,不就是收个钱、打个单吗?能有什么大不了的漏洞?我干了十几年零售和餐饮系统的技术运维,见过太多因为忽视收款机安全而“翻车”的案例。从…

2026/7/3 16:22:33 阅读更多 →
ICM-42688-P与STM32L081CB在机器人控制与工业监测中的应用

ICM-42688-P与STM32L081CB在机器人控制与工业监测中的应用

1. ICM-42688-P与STM32L081CB的黄金组合解析 在机器人控制和工业监测领域,传感器与处理器的协同设计往往决定系统性能上限。ICM-42688-P作为TDK InvenSense推出的6轴MEMS惯性测量单元(IMU),其核心价值在于将三轴陀螺仪和三轴加速度计集成在3x3x0.9mm的LG…

2026/7/3 16:20:31 阅读更多 →
MC6470与MSP432P401R的6DOF传感器数据融合实践

MC6470与MSP432P401R的6DOF传感器数据融合实践

1. MC6470与MSP432P401R的硬件协同架构解析MC6470作为一款6自由度惯性测量单元(6DOF IMU),其核心价值在于集成了三轴加速度计和三轴磁力计,通过I2C接口与主控芯片通信。在实际工程应用中,我发现这颗传感器有两个关键特性需要特别注意&#xf…

2026/7/3 16:20:31 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻