数据库-数据查询-BETWEEN AND

引言

BETWEEN AND 在生活应用场景

BETWEEN AND 是一种常见的范围查询操作,在现实生活中有着广泛的应用场景:

1. 购物场景

  • 价格区间筛选:在淘宝、京东等电商平台上,消费者经常使用"筛选价格在100元到500元之间"的功能,这实际就是BETWEEN 100 AND 500的查询
  • 折扣时段购买:超市促销活动常限定"下午3点到6点特价",消费者会在这个时间段内购物

2. 健康管理

  • 体温监测:医疗机构判断人体正常体温范围是"36.1°C到37.2°C之间(BETWEEN 36.1 AND 37.2)"
  • 血压标准:正常血压范围是"收缩压90到120mmHg,舒张压60到80mmHg之间"

3. 时间管理

  • 会议安排:公司会议可能安排在"上午10点到12点之间(BETWEEN 10:00 AND 12:00)"
  • 营业时间:餐厅营业时间显示"11:30-21:30",即BETWEEN 11:30 AND 21:30

4. 年龄相关

  • 儿童票标准:游乐园规定"身高1.2米到1.5米之间(BETWEEN 1.2 AND 1.5)可购买儿童票"
  • 适龄教育:幼儿园招生范围是"3到6周岁儿童"

5. 财务规划

  • 预算控制:家庭月支出计划控制在"5000到8000元之间(BETWEEN 5000 AND 8000)"
  • 投资收益:理财产品预期收益率在"4.5%到6.8%之间"

6. 运动健身

  • 心率区间:有氧运动建议保持心率在"最大心率的60%到80%之间"
  • 训练组数:健身计划可能包括"每组重复8到12次动作"

BETWEEN AND 在《原神》中的应用场景

在《原神》中,BETWEEN AND 通常指游戏内的时间或数值范围筛选,尤其在任务、活动或角色培养中需要满足特定条件时使用。以下是具体应用场景:

时间范围筛选

游戏中的部分任务或活动要求玩家在特定时间段内完成,例如每日委托或限时活动。使用 BETWEEN AND 可以快速筛选出符合时间条件的任务。

-- 示例:查询当前时间段内可接取的限时任务
SELECT * FROM events 
WHERE start_time BETWEEN '2023-10-01 00:00:00' AND '2023-10-07 23:59:59';
数值范围筛选

角色属性、武器伤害或材料数量等数值可能需要满足一定范围。例如,筛选攻击力在特定区间内的角色:

-- 示例:筛选攻击力在 1500 到 2000 之间的角色
SELECT character_name, attack_power FROM characters 
WHERE attack_power BETWEEN 1500 AND 2000;
地图坐标范围

在探索地图时,可能需要定位某个区域内的资源点或怪物。使用坐标范围筛选:

-- 示例:查询璃月地区特定坐标范围内的矿物资源
SELECT resource_name, x_coordinate, y_coordinate FROM map_resources 
WHERE x_coordinate BETWEEN 100 AND 200 
AND y_coordinate BETWEEN 300 AND 400;

实际游戏中的类似逻辑

虽然《原神》本身不直接使用 SQL 查询,但游戏内系统(如任务日志、成就追踪)会隐含类似逻辑。例如:

  • 每日委托刷新时间:系统自动在凌晨 4 点到次日凌晨 4 点间刷新任务。
  • 活动开放周期:限时活动仅在 BETWEEN 开始和结束日期之间开放。

玩家可通过游戏内的筛选功能(如角色属性面板、地图标记)间接实现类似效果。

数据查询-BETWEEN AND

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
你看见区别没!

 # 简单查询 在表中某个数据范围查询
# SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;

# 示例:原神武器突破材料使用多少
#SELECT * FROM 原神武器突破材料 WHERE 使用数量 BETWEEN 1 AND 5;
 use DataQueryStudy;

# 创建表 原神武器突破材料表
create table GenshinWeaponAscensionMaterials (
    id INT PRIMARY KEY COMMENT '武器突破材料ID',
    weapon_type varchar(100) COMMENT'武器类型',
    weapon_name VARCHAR(100) COMMENT '武器名称',
    material_name VARCHAR(100) COMMENT '材料名称',
    quantity_used INT COMMENT '使用数量',
    weapon_level INT COMMENT '突破的武器等级'
    );

# 添加 突破副本材料
insert into GenshinWeaponAscensionMaterials values(1,'弓箭','神射手之誓','凛风奔狼的始龀',3,20);
insert into GenshinWeaponAscensionMaterials values(2,'弓箭','神射手之誓','凛风奔狼的裂齿',2,40);
insert into GenshinWeaponAscensionMaterials values(3,'弓箭','神射手之誓','凛风奔狼的裂齿',4,50);
insert into GenshinWeaponAscensionMaterials values(4,'弓箭','神射手之誓','凛风奔狼的断牙',2,60);
insert into GenshinWeaponAscensionMaterials values(5,'弓箭','神射手之誓','凛风奔狼的断牙',4,70);
insert into GenshinWeaponAscensionMaterials values(6,'弓箭','神射手之誓','凛风奔狼的怀乡',3,80);
insert into GenshinWeaponAscensionMaterials values(7,'弓箭','祭礼弓','凛风奔狼的始龀',3,20);
insert into GenshinWeaponAscensionMaterials values(8,'弓箭','祭礼弓','凛风奔狼的裂齿',3,40);
insert into GenshinWeaponAscensionMaterials values(9,'弓箭','祭礼弓','凛风奔狼的裂齿',6,50);
insert into GenshinWeaponAscensionMaterials values(10,'弓箭','祭礼弓','凛风奔狼的断牙',3,60);
insert into GenshinWeaponAscensionMaterials values(11,'弓箭','祭礼弓','凛风奔狼的断牙',6,70);
insert into GenshinWeaponAscensionMaterials values(12,'弓箭','祭礼弓','凛风奔狼的怀乡',4,80);
insert into GenshinWeaponAscensionMaterials values(13,'弓箭','天空之翼','凛风奔狼的始龀',5,20);
insert into GenshinWeaponAscensionMaterials values(14,'弓箭','天空之翼','凛风奔狼的裂齿',5,40);
insert into GenshinWeaponAscensionMaterials values(15,'弓箭','天空之翼','凛风奔狼的裂齿',9,50);
insert into GenshinWeaponAscensionMaterials values(16,'弓箭','天空之翼','凛风奔狼的断牙',5,60);
insert into GenshinWeaponAscensionMaterials values(17,'弓箭','天空之翼','凛风奔狼的断牙',9,70);
insert into GenshinWeaponAscensionMaterials values(18,'弓箭','天空之翼','凛风奔狼的怀乡',6,80);

#查询20到50武器等级突破副本材料 BETWEEN and
select *from GenshinWeaponAscensionMaterials  where weapon_level between 20 and 50;

#错误的示范 为什么呢
select *from GenshinWeaponAscensionMaterials  where weapon_name between '祭礼弓' and '天空之翼';

从 GenshinWeaponAscensionMaterials 表中查询 weapon_name 字段值在 ‘祭礼弓’ 和 ‘天空之翼’ 之间的所有记录。这里使用了 BETWEEN … AND … 语法。

错误原因分析:

  1. BETWEEN 用于字符串时的行为 BETWEEN … AND … 在字符串类型字段上比较时,实际上是按照字符串的字典序(即字符编码顺序)进行比较的,而不是按照你期望的“武器顺序”或“逻辑顺序”。比如,‘祭礼弓’ 和 ‘天空之翼’ 在字典序上的排列可能与你想象的不同,导致查询结果不符合预期。
  2. *中文排序的特殊性 中文字符串的排序依赖于数据库的排序规则(collation)。不同的排序规则可能导致相同的 SQL 在不同数据库中返回不同的结果。如果排序规则不是你期望的中文拼音排序,结果可能更加不可控。
    #3. BETWEEN 包含边界值 BETWEEN 是闭区间,包含起始和结束值本身。如果你的 weapon_name 字段中正好有 ‘祭礼弓’ 或 ‘天空之翼’,它们也会被包含在结果中。

总结建议: 如果你想查询特定的武器名称,建议使用 IN 语句,例如:

select * from GenshinWeaponAscensionMaterials where weapon_name in ('祭礼弓', '天空之翼');

如果确实需要区间查询,建议先明确排序规则,并确保区间的起止值能准确表达你的需求。否则,BETWEEN 用于字符串时容易产生歧义和错误结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小森程序员

若能帮助到你,小费自愿付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值