全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SQL及关系型数据库数据分析
74 0
2025-11-21

一、基础查询操作

为了便于演示,首先创建一张商品信息表并插入测试数据。

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);

最终生成的完整数据表内容为:

idnamepricestock
1苹果5.00100
2香蕉3.50200
3牛奶8.0050
4面包6.5080
5矿泉水2.00300

1. 单字段数据提取

若仅需查看商品名称,可执行单列查询:

SELECT name FROM products;

执行后返回结果为:

name
苹果
香蕉
牛奶
面包
矿泉水

2. 多字段联合查询

当需要同时获取商品名称与单价时,使用多字段查询方式:

SELECT name, price FROM products;

输出结果如下:

nameprice
苹果5.00
香蕉3.50
牛奶8.00
面包6.50
矿泉水2.00

3. 查询全部字段信息

通过特定语法可以一次性获取所有列的数据:

*
SELECT * FROM products;

查询结果包含所有字段:

idnamepricestock
1苹果5.00100
2香蕉3.50200
3牛奶8.0050
4面包6.5080
5矿泉水2.00300

4. 对查询列进行计算处理

在查询过程中可对数值型字段进行运算,例如计算每种商品的总价值(单价 × 库存):

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 "总价"

执行后的结果为:

namepricestocktotal_value
苹果5.00100500.00
香蕉3.50200700.00
牛奶8.0050400.00
面包6.5080520.00
矿泉水2.00300600.00

二、带条件的筛选查询

以下是常用查询条件及其对应的功能说明和实际应用效果:

运算符 / 关键字语法示例核心含义对应结果说明(贴合演示)
=(等于)
price = 5.00
查找字段值等于指定值的记录 返回 price=5.00 的商品(如 id=1 苹果)
!=(不等于)
id != 3
查找字段值不等于指定值的记录 返回 id 不是 3 的所有商品(排除 id=3 牛奶)
<(小于)
price < 5.00
查找字段值小于指定值的记录 返回 price<5.00 的商品(id=2 香蕉、id=5 矿泉水)
<=(小于等于)
price <= 5.00
查找字段值小于或等于指定值的记录 返回 price≤5.00 的商品(id=1 苹果、id=2 香蕉、id=5 矿泉水)
>(大于)
stock > 100
查找字段值大于指定值的记录 返回 stock>100 的商品(id=2 香蕉、id=5 矿泉水)
>=(大于等于)
price >= 6.00
查找字段值大于或等于指定值的记录 返回 price≥6.00 的商品(id=3 牛奶、id=4 面包)
BETWEEN ... AND
price BETWEEN 2.00 AND 6.00
查找字段值在某一区间范围内(含边界)的记录 返回 price 在 [2.00,6.00] 区间内的商品(id=1 苹果、id=2 香蕉、id=5 矿泉水)
NOT BETWEEN ... AND
price NOT BETWEEN 2.00 AND 6.00
查找字段值不在指定区间内(含边界)的记录 返回 price 不在 [2.00,6.00] 范围的商品(id=3 牛奶、id=4 面包)
IN
id IN (1, 3, 5)
查找字段值属于给定集合中任意一个元素的记录 返回 id 为 1、3、5 的商品(id=1 苹果、id=3 牛奶、id=5 矿泉水)
NOT IN
id NOT IN (1, 3, 5)
查找字段值不属于集合中任何一个元素的记录 返回 id 非 1、3、5 的商品(id=2 香蕉、id=4 面包)
IS NULL
stock IS NULL
查找字段值为空(NULL)的记录 返回 stock 为 NULL 的商品(id=3 牛奶,假设已修改 stock 为 NULL)
IS NOT NULL
stock IS NOT NULL
查找字段值非空(非 NULL)的记录 返回 stock 不为 NULL 的所有商品(排除 id=3 牛奶)
IS TRUE
(price > 5) IS TRUE
判断某个布尔条件是否成立,并返回满足条件的记录 返回 price>5 的商品(id=3 牛奶、id=4 面包),相比直接写条件更规范严谨
LIKE
name LIKE '苹%'

username LIKE '%三'

username LIKE '%三%'

username LIKE '张__'

username LIKE '张三'
实现字符串模糊匹配,支持前缀、后缀、包含、固定长度及完全匹配等模式 配合通配符使用:
%
(代表任意数量字符)
_
(代表恰好一个字符)
例如:
'苹%'
可匹配“苹果”
'张__'
可匹配“张三丰”
无通配符时等效于
=
AND(且)
price > 5 AND stock > 50
多个条件必须同时满足才返回记录 返回 price>5 且 stock>50 的商品(id=1 苹果、id=3 牛奶、id=4 面包、id=5 矿泉水)
OR(或)
price > 6 OR stock > 150
只要满足任一条件即返回记录 返回 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. 开头匹配
username LIKE '张%'
以 “张” 开头,后面可接任意字符 张三、张三丰、张 123
2. 结尾匹配
username LIKE '%三'
以 “三” 结尾,前面可为任意字符 张三、李三四(注意:“王张”结尾是“张”,不匹配)
3. 包含匹配
username LIKE '%三%'
字符串中任意位置包含 “三” 张三、张三丰、李三四
4. 固定长度匹配
username LIKE '张__'
以 “张” 开头,后跟恰好两个字符 “张三” 符合(两字),而 “张三丰” 为三字,需用
张__
才能匹配;
张_
仅匹配如 “张三” 这类名称
5. 完全匹配(等同于
=
username LIKE '张三'
字符串完全等于 “张三”,无通配符 仅 “张三” 被匹配,效果与
username = '张三'
相同
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
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群