解决Mysql多行子查询的使用及空值问题

目录
  • 1 定义
  • 2 多行比较操作符
  • 3 空值问题
    • 3.1 问题
    • 3.2 解决

1 定义

  • 也称为集合比较子查询
  • 内查询返回多行
  • 使用多行比较操作符

2 多行比较操作符

-- 多行子查询

-- IN
SELECT
	employee_id,
	manager_id,
	department_id
FROM
	employees
WHERE
	manager_id IN ( -- 在返回集合中查找有没有相同的manager_id在里面
	SELECT
		manager_id
	FROM
		employees
	WHERE
	employee_id IN ( 141, 147 ));

-- ANY
#题目:返回其它job_id中比job_id为'IT_PROG'部门任一工资低的员工的员工号、姓名、job_id 以及salary
	last_name,
	job_id,
	salary
	job_id != 'IT_PROG'
	AND salary < ANY ( -- 比任意一个小都可以
	SELECT salary FROM employees WHERE job_id = 'IT_PROG' );
-- ALL
#题目:返回其它job_id中比job_id为'IT_PROG'部门所有工资低的员工的员工号、姓名、job_id 以及salary
	AND salary < ALL ( -- 比所有的都小才可以

3 空值问题

3.1 问题

	-- 空值问题
SELECT
	last_name
FROM
	employees
WHERE
	employee_id NOT IN (
	SELECT -- 子查询中的结果有NULL
		manager_id
	employees)

子查询的结果:

查询结果:

3.2 解决

去掉子查询中的NULL即可

	-- 空值问题解决
SELECT
	last_name
FROM
	employees
WHERE
	employee_id NOT IN (
	SELECT
		manager_id
	FROM
		employees
	manager_id IS NOT NULL)

子查询去掉NULL:

查询结果:

到此这篇关于Mysql多行子查询的使用及空值问题的解决的文章就介绍到这了,更多相关Mysql多行子查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 你知道mysql中空值和null值的区别吗

    前言 最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值.以下带来示例给大家进行讲解. 建表 create table test (colA varchar(10) not null,colB varchar(10) null); 向test表中插入数据 插入colA为null的数据 insert into test values (null,1); 此时会报错,因为colA列不能为null. 插入colB为null的数据

  • MySQL中连接查询和子查询的问题

    目录 多表连接的基本语法 交叉连接和笛卡尔积现象 交叉连接 笛卡尔积现象 内连接 外连接 左外连接 右外连接 全外连接 子查询 多表连接的基本语法 多表连接,就是将几张表拼接为一张表,然后进行查询 select 字段1, 字段2, ... from 表1 {inner|lift|right} join 表2 on 连接条件; 有如下两张表:部门表和员工表 交叉连接和笛卡尔积现象 交叉连接 交叉连接,又名无条件内连接/笛卡尔连接 第一张表种的每一项会和另一张表的每一项依次组合 select * f

  • MySQL教程子查询示例详解

    目录 1.什么是子查询? 2.子查询可以出现的位置有哪些? 3.where子查询 4.from后面使用子查询.(太重要了) 1.什么是子查询? 当一个查询是另外一个查询的一部分时,我们将内层的查询叫做子查询,外层的查询叫做主查询. 2.子查询可以出现的位置有哪些? select ..(select). from ..(select). where ..(select). 从上面可以看出,子查询常常出现在三个地方,select后面可以跟子查询:from后面可以跟子查询:where后面可以跟子查询;

  • mysql 子查询与连接表详情

    目录 1.什么是子查询? 2.自联接 3.自然联接 4.外部联结 1.什么是子查询? 列出订购物品TNT2的所有客户: select cust_id from orders where order_num IN (SELECT order_num from orderitems where prod_id = 'TNT2' ) 格式化SQL 包含子查询的SELECT语句难以阅读和调试,特别是它们较为复杂时更是如此.如上所示把子查询分解为多行并且适当地进行缩进,能极大地简化子查询的使用. 对于能嵌

  • 解决Mysql多行子查询的使用及空值问题

    目录 1 定义 2 多行比较操作符 3 空值问题 3.1 问题 3.2 解决 1 定义 也称为集合比较子查询 内查询返回多行 使用多行比较操作符 2 多行比较操作符 -- 多行子查询 -- IN SELECT employee_id, manager_id, department_id FROM employees WHERE manager_id IN ( -- 在返回集合中查找有没有相同的manager_id在里面 SELECT manager_id FROM employees WHERE

  • 解决MySQL中IN子查询会导致无法使用索引问题

    今天看到一篇关于MySQL的IN子查询优化的案例, 一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.) 随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, p

  • MySQL中列子查询与行子查询操作的学习教程

    MySQL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用 MySQL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) 列子查询中使用 IN.ANY.SOME 和 ALL 操作符 由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > < >= &l

  • 在MySQL中使用子查询和标量子查询的基本操作教程

    MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性. 子查询没有固定的语法,一个子查询的例子如下: SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) 对应的两个数据表如下: article 文章表: user 用户表: 查询返回结果如下所示: 在该例子中,首先通过子查询

  • MySQL里面的子查询的基本使用

    目录 一.子查询定义 二.子查询分类 1. 标量子查询: 2. MySQL 列子查询: 3. MySQL 行子查询: 4. MySQL 表子查询: 三.字查询例举 1. ANY进行子查询 2. 使用IN进行子查询 3. 使用SOME进行子查询 4. 使用ALL进行子查询 5.标量子查询 6. 多值子查询 7. 独立子查询 8.相关子查询 9.EXISTS谓词 10. 派生表 四.子查询优化 一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,

  • MySQL实例讲解子查询的使用

    目录 子查询-嵌套查询 原始查询方法 自连接 子查询 子查询分类 单行子查询 子查询的编写思路 HAVING中的子查询 CASE中的子查询 子查询中的空值问题 多行子查询 多行比较操作符 相关子查询 EXISTS与NOT EXISTS 关键字 子查询-嵌套查询 子查询是指一个查询语句嵌套在另一个语句内部的查询 原始查询方法 SELECT last_name,salaryFROM employeesWHERE last_name='Abel';SELECT last_name,salaryFROM

  • 解决MySQL Sending data导致查询很慢问题的方法与思路

    最近帮忙定位一个mysql查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家. [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录数才几万条,但查询的速度非常慢,大概要4~5分钟左右 [处理过程] 1)explain 首先怀疑索引没有建好,于是使用explain查看查询计划,结果如下: 从explain的结果来看,整个语句的索引设计是没有问题的,除了第一个表因为业务需要进行整表扫描外,其它的表都是通过索引访问 2)show p

  • 详细讲述MySQL中的子查询操作

    继续做以下的前期准备工作: 新建一个测试数据库TestDB: create database TestDB; 创建测试表table1和table2: CREATE TABLE table1 ( customer_id VARCHAR(10) NOT NULL, city VARCHAR(10) NOT NULL, PRIMARY KEY(customer_id) )ENGINE=INNODB DEFAULT CHARSET=UTF8; CREATE TABLE table2 ( order_id

  • MySQL笔记之子查询使用介绍

    子查询是将一个查询语句嵌套在另一个查询语句中 内层查询语句的查询结果,可以为外层查询语句提供查询条件 因为在特定情况下,一个查询语句的条件需要另一个查询语句来获取 参考表:employee 参考表:department 带IN关键字的子查询 复制代码 代码如下: mysql> SELECT * FROM employee    -> WHERE d_id IN    -> (SELECT d_id FROM department);+------+------+--------+----

  • MySQL查询优化:用子查询代替非主键连接查询实例介绍

    一对多的两张表,一般是一张表的外键关联到另一个表的主键.但也有不一般的情况,也就是两个表并非通过其中一个表的主键关联. 例如: 复制代码 代码如下: create table t_team ( tid int primary key, tname varchar(100) ); create table t_people ( pid int primary key, pname varchar(100), team_name varchar(100) ); team表和people表是一对多的关

随机推荐