从不充值的玩家 SQL查询
程序员文章站
2022-07-07 10:34:28
...
从不充值的玩家
从不充值的玩家 是 LintCode(见 LintCode介绍) 提供的一道入门级数据库面试题,接下来对其进行简单分析。
描述
某游戏数据库包含两个表,用户 (users) 表和充值 (recharges) 表,编写一个 SQL 查询,找出所有从未充值的玩家。
1: users (用户表)
列名 | 类型 | 注释 |
---|---|---|
id | int unsigned | 主键 |
name | varchar | 用户姓名 |
2: recharges (充值表)
列名 | 类型 | 注释 |
---|---|---|
id | int unsigned | 主键 |
user_id | int | 用户id |
样例
最快的代码
按照SQL5.7的写法,LintCode用户所给出最快的代码示例如下:
SELECT a.player_name AS player
FROM player AS a
LEFT JOIN vip8 AS b
ON a.id = b.vip8_id
WHERE b.vip8_id is NULL;
接下来简单分析一下:
首先是SQL的SELECT语句。
SELECT 语句用于从表中选取数据。选择结果被存储在一个结果表中(称为结果集)。最后的WHERE 则规定了SELECT选取对象的标准。
第二行的FROM声明了选取数据的来源是player表。
代码中出现的3个AS就是重命名,也就是别名,比如在第二行声明把player重命名为a,那么在第四、五行中就使用 a 来代替 player 从而简化了人为输入。
之后的LEFT JOIN 关键字会从左表 (player) 那里返回所有的行,即使在右表 (vip8) 中没有匹配的行。ON表示操作针对目标(个人理解)。
那么综上所述,该程序的大致逻辑就是在player表中根据用户id选择出在vip8表中没有记录的玩家(即没有充值的玩家)。整个程序也是简单易懂,易于操作执行。