从不充值的玩家 SQL查询

从不充值的玩家

从不充值的玩家 是 LintCode(见 LintCode介绍) 提供的一道入门级数据库面试题,接下来对其进行简单分析。

描述

某游戏数据库包含两个表,用户 (users) 表和充值 (recharges) 表,编写一个 SQL 查询,找出所有从未充值的玩家。

1: users (用户表)

列名 类型 注释
id int unsigned 主键
name varchar 用户姓名

2: recharges (充值表)

列名 类型 注释
id int unsigned 主键
user_id int 用户id

样例

从不充值的玩家 SQL查询_第1张图片

最快的代码

按照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表中没有记录的玩家(即没有充值的玩家)。整个程序也是简单易懂,易于操作执行。

点关注 ~ 不迷路 ~ 持续更新 ~

你可能感兴趣的:(sql,数据库)