先数匹配行对,再读报表。
复习内外联接、ON与WHERE、补NULL行、卡id计数及相关NOT EXISTS。
本节数六道给定SQLite 3.53.4任务的匹配结果,不是专业等级、百分位、雇主门槛或资格。任何正确数都能读全部解析与四份完整指南。
一个队伍可以匹配多张卡
输入有三队四卡:一队匹配两张、一队一张、最后无卡,另有队id为NULL的卡。这些明确倍数决定答案。内联接数匹配行对,左联接可为无匹配队补NULL行;先画实际行对,再加筛选或分组。
右侧IS NULL条件可以保留未匹配行
新不计分例左id为1、2,右表主键91行匹配左1;左联接后WHERE r.rid IS NULL,只留左2。它就是有意保留未匹配行的右侧WHERE条件,因此“任何此类条件都使左联接像内联接”的规则过宽。
区分队伍与联接行对
一队两卡合理地产生两条联接行,并不自动是该用DISTINCT修的错,正确粒度由问题决定。本题有的问联接行数,有的问每队一条分组数。左联接保留未匹配左行,不保留所有未匹配右行;给定等号下NULL队id卡不参与匹配。
比较两条完整条件
WHERE中的分数比较在补NULL行上不为真,因此排它;同一比较放ON则先改变卡匹配,再补无匹配队,数量随之不同。脱离报表需求,两位置谁都非永远正确;先说应保留哪些队、哪些卡合格,再决定位置。
数真实卡id或测试是否有匹配行
COUNT(c.cid)忽略补行NULL卡id,所以无卡队虽有一条联接行,分组卡数仍为零。NOT EXISTS问相关匹配查询是否有行,不数有卡队共有几卡。二者分开,核分组数时别把非NULL卡id换成无关可空列。
先添一个匹配,再改查询
在可丢弃内存例用虚构id,预测内、左联接后,只为一个左id添一条右匹配,先数新行对再聚合。然后比较排NULL的WHERE、ON与IS NULL,并在结果旁写目标粒度。网站只显示所给SQL文本,不需生产表或客户记录。
正确数不建立报表工作能力
六个匹配结果可提示复习主题,但不建立大型联接正确、报表对账或生产查询高效的结论。读解析后换新数据;题组固定,按声明SQLite环境核验,无校准开发者档、招聘线或资格,任何正确数都可看全文。