为了便于演示,首先创建一张商品信息表并插入测试数据。
products
示例表结构如下(商品表):
-- 删除已存在的表(避免重复)
DROP TABLE IF EXISTS products;
-- 创建商品表
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL, -- 商品名称
price DECIMAL(10,2) NOT NULL, -- 单价(元)
stock INT NOT NULL -- 库存数量
);
向表中插入以下测试数据:
INSERT INTO products (name, price, stock) VALUES
('苹果', 5.00, 100),
('香蕉', 3.50, 200),
('牛奶', 8.00, 50),
('面包', 6.50, 80),
('矿泉水', 2.00, 300);
最终生成的完整数据表内容为:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 3.50 | 200 |
| 3 | 牛奶 | 8.00 | 50 |
| 4 | 面包 | 6.50 | 80 |
| 5 | 矿泉水 | 2.00 | 300 |
若仅需查看商品名称,可执行单列查询:
SELECT name FROM products;
执行后返回结果为:
| name |
|---|
| 苹果 |
| 香蕉 |
| 牛奶 |
| 面包 |
| 矿泉水 |
当需要同时获取商品名称与单价时,使用多字段查询方式:
SELECT name, price FROM products;
输出结果如下:
| name | price |
|---|---|
| 苹果 | 5.00 |
| 香蕉 | 3.50 |
| 牛奶 | 8.00 |
| 面包 | 6.50 |
| 矿泉水 | 2.00 |
通过特定语法可以一次性获取所有列的数据:
*
SELECT * FROM products;
查询结果包含所有字段:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 3.50 | 200 |
| 3 | 牛奶 | 8.00 | 50 |
| 4 | 面包 | 6.50 | 80 |
| 5 | 矿泉水 | 2.00 | 300 |
在查询过程中可对数值型字段进行运算,例如计算每种商品的总价值(单价 × 库存):
SELECT name, price, stock, price * stock AS total_value
FROM products;
说明:语句中的 price * stock AS total_value 表示将计算结果命名为别名 "total_value"。AS 关键字可省略,用空格代替即可(格式如:price * stock total_value)。对于中文别名,建议加上引号,例如:price * stock AS '总价' 或 price * stock AS "总价"。
执行后的结果为:
| name | price | stock | total_value |
|---|---|---|---|
| 苹果 | 5.00 | 100 | 500.00 |
| 香蕉 | 3.50 | 200 | 700.00 |
| 牛奶 | 8.00 | 50 | 400.00 |
| 面包 | 6.50 | 80 | 520.00 |
| 矿泉水 | 2.00 | 300 | 600.00 |
以下是常用查询条件及其对应的功能说明和实际应用效果:
| 运算符 / 关键字 | 语法示例 | 核心含义 | 对应结果说明(贴合演示) |
|---|---|---|---|
| =(等于) | |
查找字段值等于指定值的记录 | 返回 price=5.00 的商品(如 id=1 苹果) |
| !=(不等于) | |
查找字段值不等于指定值的记录 | 返回 id 不是 3 的所有商品(排除 id=3 牛奶) |
| <(小于) | |
查找字段值小于指定值的记录 | 返回 price<5.00 的商品(id=2 香蕉、id=5 矿泉水) |
| <=(小于等于) | |
查找字段值小于或等于指定值的记录 | 返回 price≤5.00 的商品(id=1 苹果、id=2 香蕉、id=5 矿泉水) |
| >(大于) | |
查找字段值大于指定值的记录 | 返回 stock>100 的商品(id=2 香蕉、id=5 矿泉水) |
| >=(大于等于) | |
查找字段值大于或等于指定值的记录 | 返回 price≥6.00 的商品(id=3 牛奶、id=4 面包) |
| BETWEEN ... AND | |
查找字段值在某一区间范围内(含边界)的记录 | 返回 price 在 [2.00,6.00] 区间内的商品(id=1 苹果、id=2 香蕉、id=5 矿泉水) |
| NOT BETWEEN ... AND | |
查找字段值不在指定区间内(含边界)的记录 | 返回 price 不在 [2.00,6.00] 范围的商品(id=3 牛奶、id=4 面包) |
| IN | |
查找字段值属于给定集合中任意一个元素的记录 | 返回 id 为 1、3、5 的商品(id=1 苹果、id=3 牛奶、id=5 矿泉水) |
| NOT IN | |
查找字段值不属于集合中任何一个元素的记录 | 返回 id 非 1、3、5 的商品(id=2 香蕉、id=4 面包) |
| IS NULL | |
查找字段值为空(NULL)的记录 | 返回 stock 为 NULL 的商品(id=3 牛奶,假设已修改 stock 为 NULL) |
| IS NOT NULL | |
查找字段值非空(非 NULL)的记录 | 返回 stock 不为 NULL 的所有商品(排除 id=3 牛奶) |
| IS TRUE | |
判断某个布尔条件是否成立,并返回满足条件的记录 | 返回 price>5 的商品(id=3 牛奶、id=4 面包),相比直接写条件更规范严谨 |
| LIKE | |
实现字符串模糊匹配,支持前缀、后缀、包含、固定长度及完全匹配等模式 | 配合通配符使用:(代表任意数量字符)(代表恰好一个字符)例如: 可匹配“苹果” 可匹配“张三丰”无通配符时等效于 |
| AND(且) | |
多个条件必须同时满足才返回记录 | 返回 price>5 且 stock>50 的商品(id=1 苹果、id=3 牛奶、id=4 面包、id=5 矿泉水) |
| OR(或) | |
只要满足任一条件即返回记录 | 返回 price>6 或 stock<100 的商品(具体结果依数据而定) |
以下是对运算符使用方法的详细说明与演示:
当多个条件中至少有一个成立时,系统将返回符合条件的商品记录。例如:查询 price>6 或 stock>150 的商品,结果包括 id=3 牛奶、id=4 面包、id=2 香蕉 和 id=5 矿泉水。
NOT(非)操作用于对原条件的结果进行取反,即返回那些不满足原始条件的记录。
等价于返回 price≤5 的商品,对应结果为 id=1 苹果、id=2 香蕉 和 id=5 矿泉水。
NOT (price > 5)
price <= 5
下面通过具体示例展示各运算符的实际应用效果:
SELECT * FROM products WHERE price = 5.00; --查询价格等于5.00的商品
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
SELECT * FROM products WHERE id != 3;--查询id不等于3的数据
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 3.50 | 200 |
| 4 | 面包 | 6.50 | 80 |
| 5 | 矿泉水 | 2.00 | 300 |
SELECT * FROM products WHERE price < 5.00; --价格小于 5.00 的商品。
结果:
| id | name | price | stock |
|---|---|---|---|
| 2 | 香蕉 | 3.50 | 200 |
| 5 | 矿泉水 | 2.00 | 300 |
SELECT * FROM products WHERE price <= 5.00; --价格小于等于 5.00 的商品。
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 3.50 | 200 |
| 5 | 矿泉水 | 2.00 | 300 |
SELECT * FROM products WHERE stock > 100; --库存大于 100 的商品。
结果:
| id | name | price | stock |
|---|---|---|---|
| 2 | 香蕉 | 3.50 | 200 |
| 5 | 矿泉水 | 2.00 | 300 |
SELECT * FROM products WHERE price >= 6.00; --价格大于等于 6.00 的商品。
结果:
| id | name | price | stock |
|---|---|---|---|
| 3 | 牛奶 | 8.00 | 50 |
| 4 | 面包 | 6.50 | 80 |
SELECT * FROM products WHERE price BETWEEN 2.00 AND 6.00;
--价格在 2.00 到 6.00 之间的商品(含边界)
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 3.50 | 200 |
| 5 | 矿泉水 | 2.00 | 300 |
SELECT * FROM products WHERE price NOT BETWEEN 2.00 AND 6.00;
--价格 不在区间内[2,6]中
结果:
| id | name | price | stock |
|---|---|---|---|
| 3 | 牛奶 | 8.00 | 50 |
| 4 | 面包 | 6.50 | 80 |
SELECT * FROM products WHERE id IN (1, 3, 5);
--查找 ID 为 1、3、5 的商品
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 3 | 牛奶 | 8.00 | 50 |
| 5 | 矿泉水 | 2.00 | 300 |
SELECT * FROM products WHERE id NOT IN (1, 3, 5);
--查找 ID 不是 1、3、5 的商品
结果:
| id | name | price | stock |
|---|---|---|---|
| 2 | 香蕉 | 3.50 | 200 |
| 4 | 面包 | 6.50 | 80 |
假设此前已将牛奶的库存(stock)修改为 NULL:
UPDATE products SET stock = NULL WHERE id = 3;
SELECT * FROM products WHERE stock IS NULL;
--查询stock 为 NULL的信息
结果:
| id | name | price | stock |
|---|---|---|---|
| 3 | 牛奶 | 8.00 | NULL |
SELECT * FROM products WHERE stock IS NOT NULL;
--查询stock 不为 NULL的信息
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 3.50 | 200 |
| 4 | 面包 | 6.50 | 80 |
| 5 | 矿泉水 | 2.00 | 300 |
SELECT * FROM products WHERE (price > 5) IS TRUE;
--检查价格大于5的条件是否成立(更安全),成立就是结果
结果:
| id | name | price | stock |
|---|---|---|---|
| 3 | 牛奶 | 8.00 | 50 |
| 4 | 面包 | 6.50 | 80 |
字符串模糊匹配——like 操作符的应用:
SELECT * FROM products WHERE name LIKE '苹%';
--等价于 price <= 5
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
like 的用法较为丰富,下表汇总了常见使用场景及示例:
| 情况 | 语法示例 | 含义 | 匹配结果(示例) |
|---|---|---|---|
| 1. 开头匹配 | |
以 “张” 开头,后面可接任意字符 | 张三、张三丰、张 123 |
| 2. 结尾匹配 | |
以 “三” 结尾,前面可为任意字符 | 张三、李三四(注意:“王张”结尾是“张”,不匹配) |
| 3. 包含匹配 | |
字符串中任意位置包含 “三” | 张三、张三丰、李三四 |
| 4. 固定长度匹配 | |
以 “张” 开头,后跟恰好两个字符 | “张三” 符合(两字),而 “张三丰” 为三字,需用 才能匹配; 仅匹配如 “张三” 这类名称 |
5. 完全匹配(等同于 ) |
|
字符串完全等于 “张三”,无通配符 | 仅 “张三” 被匹配,效果与 相同 |
AND
—— 且
SELECT * FROM products WHERE price > 5 AND stock > 50;
--价格大于 5 且库存大于 50 的商品
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 3 | 牛奶 | 8.00 | 50 |
| 4 | 面包 | 6.50 | 80 |
| 5 | 矿泉水 | 2.00 | 300 |
OR
—— 或
SELECT * FROM products WHERE price > 6 OR stock > 150;
--价格大于 6 或库存大于 150 的商品
结果:
| id | name | price | stock |
|---|---|---|---|
| 3 | 牛奶 | 8.00 | 50 |
| 4 | 面包 | 6.50 | 80 |
| 2 | 香蕉 | 3.50 | 200 |
| 5 | 矿泉水 | 2.00 | 300 |
NOT
—— 非
SELECT * FROM products WHERE NOT (price > 5);
--等价于 price <= 5
结果:
| id | name | price | stock |
|---|---|---|---|
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 3.50 | 200 |
| 5 | 矿泉水 | 2.00 | 300 |
扫码加好友,拉您进群



收藏
