专栏首页数据科学中文社区图解面试题:查找不在表里的数据

图解面试题:查找不在表里的数据

【题目】

下面是学生的名单,表名为“学生表”;近视学生的名单,表名为“近视学生表”。请问不是近视眼的学生都有谁?

(“学生表”表中的学号与“近视学生”表中的学生学号一一对应)

【解题思路】

1.我们先来拆解问题:不是近视眼的学生都有谁?

1)“不是近视眼”的学生,近视信息在“近视学生”表里

2) “学生都有谁?”,要求的是“学生姓名”,所以我们的输出答案应该是“学生姓名”,这在“学生”表里。

涉及2张以上表的查询时,我们需要用到多表联结。

2.使用哪种联结呢?

在《从零学会SQL:多表查下》这个课里我讲过各个联结的情况:

其中上图黑色框里的sql解决的问题是:不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。

对于这个题目“不是近视眼的学生都有谁?”,就是在“学生表”里的数据,但是不在“近视学生”表里的数据。我们选择下图黑色框里的左联结sql语句。

select ...
from 表1 as a
left join 表2 as b
on a.列名=b.列名
where b.列名 is null;

3.多表如何联结?

题目已给出,联结两表的关键依据分别为“学号”和“学生学号”。示意图如下:

【解题步骤】

使用分析思路里的sql语句联结两表

select a.姓名 as 不近视的学生名单
from 学生表 as a
left join 近视学生表 as b
on a.学号=b.学生学号
where b.序号 is null;

我们来理解下这个sql的运行过程,方便你更深入的理解。

1)在不加where字句的情况下,两表联结得到下图的表

2)假设where字句(where b.序号 is null;)就会把b.序号这一列里为空值(NULL)的行选出来,就是题目要求的不近视的学生。(下图绿色框里的行)

【本题考点】

本题主要考察多表联结。

遇到要查找“不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。”可以使用下图黑框里的sql语句。

【举一反三】

查找“不在表里的数据”应用案例:

某网站包含两个表,顾客姓名表(表名Customers)和 购买记录表(表名Orders)。找出所有从不订购任何东西的客户。

(“顾客姓名表”中的ID与“购买记录”表中的学生学号CustomerId一一对应)

参考答案:

select a.Name as Customers
from Customers as a
left join Orders as b
on a.Id=b.CustomerId
where b.CustomerId is null;

输出结果:

本文分享自微信公众号 - 有关SQL(SQLHub)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hive 编程专题 之 - 使用正则指定输出列

    1 - 使用 Oracle SQL Developer 执行上述 HQL 语句报错:

    Lenis
  • Linux 版本 SQL Server 的快速安装

    SQL Server 2017 版本已经支持 Linux 安装了,出来了很长时间,我还没有实现过在 Linux 上面的应用,包括安装和高可用配置。本文就先尝试完...

    Lenis
  • Hive 的正则应用,用会了没?

    案例 - 1 : regexp_replace(s,regex,replacement)

    Lenis
  • pinpoint插件开发之一:牛刀小试,调整gson插件

    从本章开始我们一起来实战pinpoint插件开发,做一些实用的pinpoint插件,本着先易后难的原则,我们从修改现有插件开始吧; 准备工作 本次实战的操作环境...

    程序员欣宸
  • 什么是回调函数(CallBack)

    在计算机程序设计中,回调函数,或简称回调(call),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

    我是攻城师
  • 【Kaggle入门级竞赛top5%排名经验分享】— 分析篇

    Kaggle作为公认的数据挖掘竞赛平台,有很多公开的优秀项目,而其中作为初学者入门的一个好的项目就是:泰坦尼克号生还者预测。

    用户2769421
  • Image Segmentation(图像分割)综述

    Petrichor_
  • 《笨办法学Python》 第37课手记

    《笨办法学Python》 第37课手记 本节课是复习课。关键字是指系统预先定义好的含有特定含义的字符串或者函数,注意你在自定义函数时不能与关键字重名。可是该课中...

    Steve Wang
  • SEOer必学网站分析神器(二)

    昨晚发布“SEOer必学网站分析神器(全新解析一)”后,突然发现,里面少讲了一点内容,在这里给大家补上。 移动适配:除了上次讲的一些内容外,还是可以加快移动端...

    黄伟SEO
  • ASP.NET中使用HttpWebRequest调用WCF

    最近项目需要和第三网站进行数据交换,第三方网站基本都是RESTfull形式的API,但是也有的是Web Service,或者.NET里面的WCF。微软鼓励大家使...

    八哥

扫码关注云+社区

领取腾讯云代金券