子查询

  • 子查询或内查询
    • 分类
      • 按结果集的行列数不同
      • 按子查询出现的位置
      • where或having后
        • 标量子查询
        • 列子查询(多行子查询)
        • 行子查询
      • 放在select后:仅仅支持标量子查询
      • 放在from后
      • exists后:相关子查询
      • 例题:

子查询或内查询

含义:出现在其他语句中的select 语句

外部的查询语句:成为主查询或外查询

分类

按结果集的行列数不同

分类 含义
标量子查询 结果及只有一行一列
列子查询 结果及只有一列多行
行子查询 结果集有一行多列或多行多列
表子查询 结果集一般为多行多列

按子查询出现的位置

出现位置 支持类型
select后 仅支持标量子查询
from后 表子查询
where或having后 标量子查询(单行)、列子查询(多行)、行子查询
exists 表子查询

where或having后

特点:

  • 子查询放在小括号内
  • 子查询一般放在条件的右侧
  • 标量子查询:一般搭配着单行操作符使用
    < > >= <= = <>
  • 列子查询:一般搭配多行操作符使用
    in,any/some,all

标量子查询

例1:查询工资比Abel高的员工

SELECT last_name,salary
FROM employees
WHERE salary>(
SELECT salary
FROM employees
WHERE last_name=‘Abel’
);

例2:返回job_id与141号员工相比,salary比143号员工多的员工姓名,job_id和工资

SELECT last_name,job_id,salary
FROM employees
WHERE job_id=(
SELECT job_id
FROM employees
WHERE employee_id=141
)
AND salary>(
SELECT salary
FROM employees
WHERE employee_id=143

);

列子查询(多行子查询)

多行操作符 含义
in/not in 等于列表中的任意一个
any/some 和子查询返回的某一个值比较
all 和子查询返回的所有值比较

例如:#返回其他部门中比job_id为’it-prog‘部门任意工资低的员工的员工号、姓名、job_id以及salary

SELECT employee_id ,last_name,job_id,salary
FROM employees
WHERE salary<ANY(
SELECT salary
FROM employees
WHERE job_id=‘IT_PROG’
)
AND job_id <> ‘IT_PROG’;

行子查询

该方法有局限性,需要两种的运算法相同才能结合

SELECT *
FROM employees
WHERE (employee_id,salary)=(
SELECT MIN(employee_id),MAX(salary)
FROM employees
);

放在select后:仅仅支持标量子查询

放在from后

将子查询充当一张表,必须起别名

exists后:相关子查询

语法:
exists(完整的查询语句)
结果:1或0
例如:查询没有女朋友的男神信息
方法1:采用exists

SELECT boys.*
FROM boys
WHERE NOT EXISTS(
SELECT *
FROM boys,beauty
WHERE boys.id=beauty.boyfriend_id
);

方法2:采用in

SELECT boys.*
FROM boys
WHERE boys.id NOT IN(
SELECT beauty.boyfriend_id
FROM beauty
) ;

例题:

#1.查询和zlotkey相同部门的员工姓名和工资

SELECT last_name,salary
FROM employees
WHERE department_id =(
SELECTdepartment_id
FROM employees
WHERE last_name=‘Zlotkey’
);

#2.查询工资比公司平均工资高的员工的员工号,姓名和工资

SELECT employee_id,last_name,salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);

#3. 查询各部门中工资比本部门平均工资高的员工的员工号,姓名和工资

SELECT employee_id,last_name,salary,平均工资
FROM employees e
INNER JOIN(
SELECT AVG(salary) 平均工资,department_id
FROM employees
GROUP BY department_id
) avg_sal
ON e.department_id=avg_sal.department_id
WHERE salary> 平均工资
;

#4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名

SELECT employee_id,last_name
FROM employees
WHERE department_id IN(
SELECT department_id
FROM employees
WHERE last_name LIKE ‘%u%’
);

#5.查询在部门location_id为1700的部门工作的员工的员工号

SELECT employee_id,department_id
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location_id=1700
);

#6.查询管理者是King的员工姓名和工资

SELECT last_name,salary
FROM employees
WHERE manager_id IN (
SELECT employee_id
FROM employees
WHERE last_name=‘K_ing’
);

7.查询工资最高的员工姓名,按要求first_name和last_name显示为一列,列名为姓名

SELECT CONCAT(last_name,first_name) 姓名,employee_id
FROM employees
WHERE salary= (
SELECT MAX(salary)
FROM employees
);

“一个能够升起月亮的身体,必然驮住了无数次的日落”
小徐加油!
昨天失眠了无误
-----2021.2.2

mysql子查询:标量子查询,行子查询,列子查询相关推荐

  1. Oracle 多行、多列子查询

    本文使用到的是oracle数据库scott方案所带的表,scott是oracle数据库自带的方案,使用前请确保其解锁 一.多行子查询 多行子查询子查询是嵌入在其他Sql语句中的select语句,Ora ...

  2. 查询客户时,提示“查询已超出200行,请限制查询“

    查询客户时,提示"查询已超出200行,请限制查询" 在EBS中,我们查询客户时如果输入的参数较少,系统会提示"查询已超出200行,请限制查询".如下图: 更新配 ...

  3. 单行子查询返回多个行_sql多表查询练习,习题总结

    组函数(聚合函数):组函数操作行集,给出每组的结果.组函数不象单行函数,组函数对行的集合进行操作,对每组给出一个结果.这些集合可能是整个表或者是表分成的组. 组函数和单行函数的区别: 单行函数对查询到 ...

  4. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  5. mysql子查询教行子查询_MySQL中列子查询与行子查询操作的学习教程

    MysqL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用MysqL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如 ...

  6. 嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏

    文章目录 1.需求分析与问题解决 2.单行子查询 3.多行子查询 4.相关子查询 5.抛一个思考题 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入.SQL 中 ...

  7. 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)

    子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...

  8. mysql select 子查询_SELECT中常用的子查询操作

    MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...

  9. 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询

    文章目录 主查询 子查询 纲举目张--子查询的分类 WHERE语句后的 子查询 主查询 子查询 概念集中于SELECT语句 之前我们所学习的所有,都是SELECT作为独立的一句 是主干,是爸爸 后面跟 ...

最新文章

  1. GPIO代码使用流程(伪代码部分示例)
  2. python程序官方网站-IO编程
  3. Redis集群的搭建(具体步骤)
  4. 大数据项目中的QA需要迎接新的挑战
  5. 全球100款大数据工具汇总(前50款)
  6. 基于epoll+threadpool的webServer分析与实现
  7. xml层级工具_.NET的类型层次查看工具,ClassHierarchyViewer,0.3.0.1
  8. spring cloud 实战项目搭建
  9. Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf 、 Mongodb 实践(六)
  10. 【转】Retrofit
  11. Sql Server 指定列的乘积
  12. git+coding.net记录篇
  13. 少儿编程孩子的学习路线
  14. excel绘制直方图
  15. java数据库同步_Java数据同步
  16. python软件长什么样子图片_使用Python把多个图片拼接成为长图
  17. 自然语言处理(NLP):08 TextCNN在短文本分类应用介绍
  18. 装逼软件推荐(持续)
  19. 8个经典智能电子锁方案精选合辑
  20. win10系统如何把U盘刷成FAT格式?

热门文章

  1. Java开发岗位面试题归类---怎么好好的准备面试,也算是发展学习方向
  2. 尚硅谷设计模式学习(1)---[设计模式七大原则]
  3. python要英语基础吗_python学习需要英语基础吗?你真的想多了
  4. Au 效果器详解:单频段压缩器
  5. 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计
  6. 计算机总评等级怎么弄,excel总评等级怎么做?
  7. Apache Flink之架构概述和环境(章节一)
  8. matlab计算macd_[转载]4.K线图以及常用技术指标的Matlab实现-基于Matlab的量化投资...
  9. react 前端实现打印发票/图片
  10. bootstrap(手风琴、图片轮换和固定定位)