文章目录
- 1.先明白“数据库”是什么
- 2.什么是SQL?
- 3.怎么写SQL
- 先不管“语法”是什么,先记住一个万能句子模板
- 进一步类比理解
- 进一步强化,写出SQL
- 自我检测
- 4.SQL 就四件事:增、删、改、查
- 查数据(SELECT)
- 新增数据(INSERT)
- 改数据(UPDATE)
- 删数据(DELETE)
- 5.常用部分:查
- 常用技巧
- 1.`*`(所有列)
- 2. AND / OR(逻辑组合条件)
- 3.` LIKE`(模糊匹配)
- 概述
- 为什么“前导 %”会让索引失效?
- 总结
1.先明白“数据库”是什么
想象你有一个超级 Excel 本:
它可以存几百万行数据
多个同事能同时查改
还能瞬间从里面找出“去年买了红色连衣裙的所有女生”
这个“超级 Excel”就是数据库,
2.什么是SQL?
SQL 就是你和数据库对话的指令。
- SQL 就四件事:增、删、改、查
日常几乎只用查(80%的工作),其余偶尔用。我们把数据存在表格里,比如一张 学生表:
3.怎么写SQL
先不管“语法”是什么,先记住一个万能句子模板
SQL 里 90% 的查询都长这样:
SELECT 哪几列 FROM 哪张表 WHERE 什么条件;就像填表格一样:
| 位置 | 填什么 | 例子 |
|---|---|---|
| SELECT 后面 | 你要看的列名 | 姓名, 年龄 |
| FROM 后面 | 表的名字 | 学生表 |
| WHERE 后面 | 筛选条件 | 年龄 >= 18 |
完整例子:SELECT 姓名, 年龄 FROM 学生表 WHERE 年龄 >= 18;
什么意思:从学生表里,找出年龄≥18岁的,只看他们的姓名和年龄。
注意:单词之间用空格隔开,整句话结尾要写分号
进一步类比理解
用电脑上的东西做类比(假设 Excel 就是数据库)想象你打开了一个 Excel 文件,里面有一个叫 成绩表 的 sheet:
| 姓名 | 科目 | 分数 |
|---|---|---|
| 张三 | 数学 | 85 |
| 李四 | 数学 | 92 |
| 王五 | 语文 | 78 |
你的需求:
“我要看分数那一列” → SQL:
SELECT 分数“从成绩表里看” → 加上
FROM 成绩表“只要数学那一行” → 加上
WHERE 科目 = '数学'
拼起来:
SELECT 分数 FROM 成绩表 WHERE 科目 = '数学';结果显示:
85 92进一步强化,写出SQL
假设你有一个真实的表叫员工表,里面有姓名,部门,工资三列。
案例1:看所有人的姓名和工资
你想:显示姓名和工资这两列,所有行(不筛选)。
写法:SELECT 姓名, 工资 FROM 员工表;
案例2:只看销售部的人
你想:加上条件,部门=‘销售部’。
写法:SELECT 姓名, 工资 FROM 员工表 WHERE 部门 = '销售部';
案例3:销售部里工资高于5000的人
条件变复杂:部门=‘销售部’并且工资>5000。
写法:SELECT 姓名, 工资 FROM 员工表 WHERE 部门 = '销售部' AND 工资 > 5000;
注意:文本(如’销售部’)要加单引号,数字(5000)不用。
自我检测
表名:订单表
列有:顾客名,商品,金额
只看‘顾客名’和‘商品’两列,怎么写?
SELECT ________ , ________ FROM 订单表;
只看金额大于100的订单,显示所有列(用 * 代替所有列),怎么写?
SELECT * FROM 订单表 WHERE ________ > 100;
找‘顾客名’为‘小明’的订单,显示‘商品’和‘金额’,怎么写?
SELECT 商品, 金额 FROM 订单表 WHERE ________ = ‘________’;
顾客名, 商品 金额 顾客名, 小明4.SQL 就四件事:增、删、改、查
我们把数据存在表格里,比如一张 学生表:
| 学号 | 姓名 | 班级 |
|---|---|---|
| 101 | 张三 | 1班 |
| 102 | 李四 | 2班 |
查数据(SELECT)
“把 1 班的所有学生名字给我”
SELECT 姓名 FROM 学生表 WHERE 班级='1班';新增数据(INSERT)
“插一条记录:学号103,王五,1班”
INSERT INTO 学生表(学号,姓名,班级)VALUES(103,'王五','1班');改数据(UPDATE)
“把李四的班级改成 1班”
UPDATE 学生表 SET 班级='1班'WHERE 姓名='李四';删数据(DELETE)
“删除学号是102的学生”
DELETE FROM 学生表 WHERE 学号=102;5.常用部分:查
常用技巧
1.*(所有列)
作用:代表表中的全部字段。
用法:SELECT * FROM 表名
适用场景:仅限自己快速排查数据、查看表结构或临时验证。
注意:正式代码或生产环境应显式列出所需字段(如 SELECT id, name),避免性能浪费、数据泄露或列顺序依赖。
2. AND / OR(逻辑组合条件)
AND:所有条件都必须为真 (逻辑与)。
OR:至少一个条件为真(逻辑或)
优先级:AND 高于 OR,务必用括号()明确分组,避免逻辑错误。
典型模式:WHERE (条件1 AND 条件2) OR (条件3 AND 条件4)
3.LIKE(模糊匹配)
概述
通配符:
%→ 任意多个字符(含 0 个)_→ 单个字符
常见用途:
- 前缀匹配:
LIKE '张%' - 后缀匹配:
LIKE '%@gmail.com' - 包含匹配:
LIKE '%小%' - 定长占位:
LIKE '张_'(两个字的“张X”)
反向匹配:NOT LIKE
性能提示:前导%会使索引失效,大表慎用。
为什么“前导 %”会让索引失效?
数据库的索引通常按照从左到右的顺序组织数据。
LIKE '张%'→ 索引能快速定位到“张”开头的部分,因为前缀是固定的。LIKE '%小%'→ 索引不知道开头是什么,必须扫描整张表的每一行,逐个判断是否包含“小”
好比查一本按拼音排序的通讯录:
找“张%” → 直接翻到 Zhang 那页。 找“%小%” → 只能从第一页翻到最后一页,看每个人的名字里有没有“小”字。总结
- 代表所有列:SELECT * FROM 表(仅自己排查数据时用)
- AND / OR 组合条件:WHERE 性别=‘女’ AND 年龄<25
- LIKE 模糊匹配:WHERE 姓名 LIKE ‘张%’(姓张的)