面试题答案
一键面试SQL查询语句
SELECT *
FROM products
WHERE JSON_EXTRACT(features, '$.waterproof') = 'yes';
查询逻辑解释
SELECT *
:表示选择products
表中的所有列,即除了获取waterproof
特性及值为yes
外,同时获取这些产品的其他所有特性列。FROM products
:指定要查询的表为products
表。WHERE JSON_EXTRACT(features, '$.waterproof') = 'yes'
:使用JSON_EXTRACT
函数从features
这个动态列(假设动态列名为features
,存储格式为JSON)中提取waterproof
特性的值,并判断其是否等于yes
,以此筛选出符合条件的产品记录。
动态列的作用
在这个场景中,动态列(如以JSON格式存储的列)允许在数据库表的单个列中存储多个不同的特性信息。相比传统的设计方式(为每个特性创建一个单独的列),动态列存储方式更加灵活,尤其适用于产品特性数量不固定或者特性结构较为复杂的情况。它可以减少数据库表结构的变更频率,当有新的产品特性出现时,无需修改表结构,直接在动态列中添加新的特性 - 值对即可。