数据库学习之MySQL (十八)—— 子查询 (一)WHERE 列子查询_where 查子表-程序员宅基地

技术标签: MySQL  数据库  

列子查询 概念

之前上一节我们分类后就知道 所谓列子查询 就是针对 子查询结果为 一列多行的情况
换言之 一个属性(栏目),比如阮菜鸡的奖金, 与多个实例的属性,(多个人的奖金),进行比较 ),就是列子查询 也称为多行子查询

那么对于一个值VS一个列表 的比较 我们之前是有涉及的——IN 操作符
就好像python的for in 一样,程序会将值与列表的每个值进行对比(遍历每一个值) 任意一个相等就ok
不记得IN真么使用的可以看之前的章节复习
传送:数据库学习之MySQL (七)——模糊查询 通配符 like ‘between and’ in ‘is null’ 安全等于

ANY ALL

提前说一下 除了IN 操作符 还有别的,分别是ANY 和 ALL
ANY 类似于数学的 存在
ALL 类似于数学的 任意
》如果说 salary > ANY(10,20,30) 意思是 列表(10,20,30)里面,是否存在一个数小于salary的
英语里面就好像一句话:“Is there ANY one smaller than me?” 有比我小的嘛
》如果说 salary > ALL(10,20,30) 意思是 列表(10,20,30)里面,是否任意一个数,会小于salary的
英语里面就好像一句话:“Is ALL of you smaller than me?” 都比我小嘛

列成表格:

代码 数学符号 中文 英文 含义
ANY 存在 Exist 有比我小(大)的嘛?
ALL 任意 Arbitrary 都比我小(大)嘛?

此时 聪明的你已经想到 可以不用ANY ALL的方法:
salary > ANY(10,20,30) 等价于 salary > MIN(10,20,30)
salary > ALL(10,20,30) 等价于 salary > MAX(10,20,30)
不过话说回来 这就是数学的逻辑套路嘛,
比任意一个大 就是比他们最菜的要强就行了
比所有的都大 就是比他们最强的还要强就行了

实例

我们来看实例:
阮菜鸡初来乍到 只认识同期一起面试 一起进公司的人
hire date = 阮菜鸡的hiredate)
他们去的部门都不太一样
阮菜鸡想拓展人脉 想认识公司里更多的人
可是 公司的人分布全国各地 location_id 都不一样
如果自己去一个个探索 太麻烦 不如
近水楼台先得月——通过同一批进来的人 认识各个地点的办事处
再去和办事处的公司人员沟通 就容易多了
所以:
—》资源:员工 (同期进来的)的数据库
—》目标:进来员工现在所在部门 以及 部门所在地
—》下一步:去各个所在地 找各个办事处

1️⃣找到同期人+所在部门 通过hiredate筛选
在这里插入图片描述

查询方式 子查询 标量:

USE data1;
SELECT 
  `department_id` AS 部门编号,
  CONCAT_WS('-', `last_name`, `first_name`) AS 名字,
  `hiredate` AS 入职时间 
FROM
  employees 
WHERE `hiredate` = 
  (SELECT 
    `hiredate` 
  FROM
    employees 
  WHERE `last_name` = '阮')

这些兄弟就是和我一起进公司dio哒:)
化为多行一列 就是:
在这里插入图片描述
2️⃣在department表中 根据下面这张对照表

SELECT 
    `department_name` 办事处名字,
    `department_id` 办事处编号,
    `location_id` 办事处地点编号 
  FROM
    `departments` 

在这里插入图片描述
我们可以查到我们已知的办事处 所在地编号 —— 多表查询

这里子列表查询知识的融会贯通:
在这里插入图片描述


SELECT 
    d.`department_name` 办事处名字,
    d.`department_id` 办事处编号,
    d.`location_id` 办事处地点编号 
FROM
    `departments` d
WHERE d.`department_id` IN (
 SELECT 
  e.`department_id`
FROM
  employees e 
WHERE e.`hiredate` = 
  (
  SELECT 
    `hiredate` 
  FROM
    employees 
  WHERE `last_name` = '阮')

看着好看点 就是:

SELECT 
  `department_name` 办事处名字,
  `department_id` 办事处编号,
  `location_id` 办事处地点编号 
FROM `departments`
WHERE `department_id` IN 
  (SELECT 
    `department_id` 
  FROM
    employees
  WHERE
    `hiredate` = 
    (SELECT 
      `hiredate` 
    FROM
      `employees` 
    WHERE `last_name` = '阮'
    )
  ) 
ORDER BY 办事处地点编号 ASC 

这里有两个问题:
1、 为啥employees.department_id 和department.department_id 不用进行区分
2、为啥直接往d.location_id 办事处地点编号 前面加DISTINCT 不行 有啥解决办法嘛?

第一个问题 你可能这么想:

employees 表和department 表都有属性department_id ,意味着多表查询,需要用表的名字进行区分
而且还有个隐藏的问题 就是之前多表查询中 哪个表为主的问题(可能漏数据
当然 因为我们是通过查询 和阮菜鸡同一批进来的同志的部门ID结果 再对照department表来解决的
如果department表有 employees里面没有的id, 我们知道了也没用,
如果employees表有 departments没有的id 我们一样没法获取(没地点信息啊)
所以 就是取交集就行了 也就是用内连接

那为啥我们没用多表查询呢?
因为子查询的结果 是没有表数据的属性的 简而言之 他就是一个普普通通的列表
所以直接用就行 这实在是方便 直观 不然得写哭了
我尝试用多表查询的知识解决这个问题 然并暖 还不如子查询来的直观

第二个问题 你有没有想过 1700地点对应三个部门 你要是DISTINCT 地点序号 那三个部门该放哪?
所以简单的解决方式就是 不显示三个部门的id 名字
如下:

SELECT 
  DISTINCT `location_id` 办事处地点编号 
FROM `departments`
WHERE `department_id` IN 
  (SELECT 
    `department_id` 
  FROM
    employees
  WHERE
    `hiredate` = 
    (SELECT 
      `hiredate` 
    FROM
      `employees` 
    WHERE `last_name` = '阮'
    )
  ) 
ORDER BY 办事处地点编号 ASC 

在这里插入图片描述
这样 我们就可以得到地点 然后去拜访各个地点的办事处了2333
值得注意的是 地点代号对应的具体地点呢?
已知还有locations表 如下:
在这里插入图片描述
我把这个问题交给你去完成:)
提示:还是子查询

##预告
下一节将讲述 WHERE后面的 行子查询
数据库学习之MySQL (十九)—— WHERE 行子查询

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43178828/article/details/104181227

智能推荐

QNX screen使用介绍 第四章_qnx screen_set_window_property_iv-程序员宅基地

文章浏览阅读3.9k次。十、screen 剪辑缓冲区当根据需求只需要显示一个指定的区域时,如图所示,可以在一个大的缓冲区中剪辑一个特定的区域用于显示。注意,只能剪辑一个矩形设置窗口缓冲区和源尺寸 int src_size[2] = {1920, 720}; screen_set_window_property_iv(screen_window, SCREEN_PROPERTY_BUFFER_SIZE, src_size); screen_set_window_property_iv(scr.._qnx screen_set_window_property_iv

2.4G WLAN芯片 AR9341 学习笔记_ar9341芯片参数-程序员宅基地

文章浏览阅读7.8k次。【芯片概述】 AR9341是一款用于 2.4GHz 网络的 WLAN 平台芯片,CPU核为 MIPS 74Kc。芯片内置 MAC/PHY 模块,支持 20MHz/144Mbps 传输模式和 40MHz/300Mbps 传输模式,支持从 NOR flash 上启动。除此之外,AR9341还有很多其它内置模块,其系统框图如下:图1 AR9341系统框图 【Datashe_ar9341芯片参数

Waymo无人出租车加州上线一个月,日均156单,还有真·自动驾驶服务-程序员宅基地

文章浏览阅读380次。鱼羊 发自 凹非寺量子位 报道 | 公众号 QbitAIWaymo的RoboTaxi——无人驾驶出租进展怎么样,今天官方给出成绩单。Waymo向加州公共事业委员会(CPU...

三分-程序员宅基地

文章浏览阅读777次。知识点系列之---三分

【冰极峰教程系列之四】:九宫格应用案例--极酷网页播放器-程序员宅基地

文章浏览阅读83次。原创:冰极峰 转载请注明出处 时间:2009年6月29日 8:42:38冰极峰教程系列之一:九宫格基本布局冰极峰教程系列之二:牢不可破的九宫格布局冰极峰教程系列之三:三层分离的完美九宫格冰极峰教程系列之四:九宫格应用案例--极酷网页播放器冰极峰教程系列之五:无hack并支持透明圆角框的全兼容九宫格布局在前面的三篇系列文章中,我对九宫格布局作了详细的介绍。先..._html 9宫格播放器

php实现导出csv文件_php导出csv文件原理-程序员宅基地

文章浏览阅读246次。为何要用csv导出文件呢,因为它小巧,导出数据效率高,万行数据秒级导出。。。不香吗?定义csv文件<?php/** * User : 青草根 * Email : [email protected] * Blog : http://52qcg.cn * QQ : 876146977 * 微 信 : caimh0223 * Date : 2020-05-30 * Time : 14:._php导出csv文件原理

随便推点

四年级计算机教案模板,小学四年级下册信息技术教学设计 全册.doc-程序员宅基地

文章浏览阅读185次。小学四年级下册信息技术教学设计 全册PAGEPAGE 23小学信息技术教学设计(第一册)四 年级 信息技术 学科 设计者: 第 16 课时课题第16课 学习小助手——基本键的指法教学目标1、认识键盘结构、键盘的分区。2、掌握字母、符号的输入。3、让学生掌握记事本的使用。4、培养学生小组合作学习、协作学习的精神。5、结合本校实际,做好学生的环保教育。教材分析重..._小学教科版信息技术四年级下册 教学设计

动态规划-673. 最长递增子序列的个数-程序员宅基地

文章浏览阅读460次。题目描述:给定一个未排序的整数数组,找到最长递增子序列的个数。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数。题目来源:673. 最长递增子序列的个数1.定义状态:记录最长长度dp[i]:到nu_递增子序列的个数

9.19-9.21-程序员宅基地

文章浏览阅读82次。6.SELECT *,base_salary+title_salary AS 应发工资,base_salary+title_salary-deduction AS 实发工资 FROM (department AS d INNER JOIN employee AS e ON d.`depid`=e.`depid`) INNER JOIN salary AS s ON e.`empid`=s.`empid`;7.SELECT * FROM employee WHERE employee.`NAME` LIK

RPA学习天地:来也 RPA高阶培训(一)产品基础架构_rpa培训材料-程序员宅基地

文章浏览阅读6.4k次。1.产品概述产品组成分为:Creator(设计器)、Worker(机器人)、Commander(控制平台)和Mage(AI平台)四个主要功能组件。分别为RPA机器人生产、执行、分配、智能化提供相应的工具和平台。Creator(设计器):采用中文可视化界面,同时支持拖拽式低代码或无代码的流程开发以及专业开发模式,支持一键录制流程并自动生成机器人。Worker(机器人):具备人机交互和无人值守两种模式,在人机交互模式下,通过人机协同的方式,完成桌面任务。在无人值守模式下,能够根据 UiBot Com_rpa培训材料

深度学习数据集整理百度云,持续更新!!!!_soda-d数据集下载-程序员宅基地

CASIA-WebFace 是一个脸部数据集,可用于深度学习。该数据集的下载链接为:https://pan.baidu.com/s/1O5QlCTkvkq3mR0lyfNOHuA 提取码:kko7。

腾讯云Elasticsearch集群多可用区容灾实现原理及最佳实践-程序员宅基地

文章浏览阅读895次。导语 | 为了进一步满足腾讯云 Elasticsearch 客户对服务稳定性、集群高可用性等容灾能力的要求。腾讯云 ES 产品提供了跨可用区部署的解决方案,本文将为大家介绍实现原理与实践..._elasticsearch集群如何做到灾备

推荐文章

热门文章

相关标签