3.Mysql子查询练习

news2024/10/1 12:14:57
1.子查询概述

子查询指一个查询语句嵌套在另一个查询语句内部的查询,内部的查询是外部查询的条件,这个特性从MySQL4.1开始引入

子查询(内查询)在主查询之前执行完成

子查询的结果被主查询(外查询)使用

注意事项:

  • 子查询要包含在括号内

  • 将子查询放在比较条件的右侧

  • 单行操作符对应单行子查询,多行操作符对应多行子查询

2.子查询的使用
2.1单行子查询

单行比较操作符

=等于,>大于,>=大于等于,<小于,<=小于等于,<>不等于

1.查找薪水大于所有员工平均薪水的员工

SELECT employee_id, first_name, last_name, salary FROM employees

              WHERE salary > ( SELECT AVG(salary) FROM employees)

2.查询工资大于149号员工工资的员工的信息 

select employee_id,last_name,salary  from employees
          where salary > ( select salary from employees where employee_id = 149 )

3.返回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)

4.返回公司工资最少的员工的last_name,job_id和salary

select last_name,job_id,salary from employees where salary = ( select min(salary) from employees )

5.查询与147号员工的manager_id和department_id相同的其他员工的employee_id,manager_id,department_id

select employee_id,manager_id,department_id  from employees
where manager_id = (
           select manager_id from employees where employee_id = 147)
 and department_id = (select department_id from employees where employee_id = 147)
 and employee_id <> 147

6.查询最低工资大于50号部门最低工资的部门id和其最低工资

select department_id,min(salary) min_salary  from employees
           where department_id is not null
group by department_id
having min_salary > (
    select min(salary) from employees where department_id = 50)

7.查询每一个部门的最低工资

select deptno, min(sal) min_sal from emp group by deptno

8.最低工资关联人员信息

select e.* from emp e, (select deptno, min(sal) min_sal from emp group by deptno) s

           where e.deptno = s.deptno   and e.sal = s.min_sal

9.先查询出部门的最低工资,然后匹配最低工资的雇员信息

select * from emp where sal in (select min(sal) from emp group by deptno)

2.2多列子查询

 1.查找属于位置ID为1700的所有员工

SELECT  employee_id, first_name, last_name  FROM  employees
WHERE
    department_id IN (SELECT department_id  FROM departments WHERE location_id = 1700)
ORDER BY first_name , last_name

2.返回其它job id中比job id为'IT_PROG’部门任一工资低的员工的员工号姓名、job id以及salary

select last_name,job_id,salary from employees
where salary < any (
    select salary from employees where job_id = 'IT_PROG'
)
and job_id <> 'IT_PROG'

3.返回其它job id中比job id为'IT_PROG’部门所有工资低的员工的员工号姓名、job id以及salary

select last_name,job_id,salary from employees
where salary < all (
    select salary from employees where job_id = 'IT_PROG')
and job_id <> 'IT_PROG'

4.查询平均工资最低的部门ID

select department_id,avg(salary) from employees group by department_id order by avg(salary) limit 1

5.询员工表中是领导的员工信息

select employee_id,last_name,manager_id from employees where employee_id in ( select manager_id from employees )

6.查询员工表中不是领导的员工信息

select employee_id,last_name,manager_id  from employees
where employee_id not in (
    select manager_id from employees where manager_id is not null)

7.EXISTS 与 NOT EXISTS关键字

查询公司管理者的employee_id,last_name,job_id,department_id信息

# 方式一 自连接

SELECT DISTINCT e1.employee_id,e1.last_name,e1.job_id,e1.department_id # 因为管理者可能管理多个员工,所以需要去重
FROM employees e1 JOIN employees e2 # 相当于求交集
WHERE e1.employee_id=e2.manager_id

# 方式二 子查询
SELECT employee_id,last_name,job_id,department_id
FROM employees
WHERE employee_id IN( SELECT DISTINCT manager_id FROM employees)

# 方式三:exists
SELECT e1.employee_id,e1.last_name,e1.job_id,e1.department_id
FROM employees e1
WHERE EXISTS(SELECT *  FROM employees e2  WHERE e1.employee_id=e2.manager_id)

8.HAVING 中的子查询

查询最低工资大于50号部门最低工资的部门id和其最低工资

SELECT department_id,MIN(salary)
FROM employees
GROUP BY department_id  # 只能想到使用group by...having,因为where中不能使用聚合函数
HAVING MIN(salary)>(
                    SELECT MIN(salary) FROM employees WHERE department_id=50)

9.CASE中的子查询

SELECT  STUDENT_NAME,
    (CASE WHEN score < 60 THEN '不及格'
        WHEN score >= 60 AND score < 80 THEN '及格'
        WHEN score >= 80 THEN '优秀'
        ELSE '异常' END) AS REMARK
FROM  TABLE

小练习

1.查询工资大于149号员工工资的员工的信息

SELECT employee_id,last_name,salary
FROM employees
WHERE salary>(SELECT salary FROM employees WHERE employee_id=149)

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)

3.返回公司工资最少的员工的last_name,job_id和salary

SELECT last_name,job_id,salary FROM employees WHERE salary=( SELECT MIN(salary) FROM employees);

4.查询与141号员工的manager_id和department_id相同的其他员工

SELECT employee_id,manager_id,department_id
FROM employees
WHERE manager_id=(
                  SELECT manager_id FROM employees  WHERE employee_id=141)
AND department_id=(
                  SELECT department_id FROM employees  WHERE employee_id=141)
AND employee_id<>141;   # 注意去除141号员工本身

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

SELECT employee_id,last_name  FROM employees 
WHERE department_id IN (
            SELECT DISTINCT department_id FROM employees WHERE last_name LIKE '%u%'
            );

6.工资大于所有JOB_ID = 'SA_MAN'的员工的工资的员工的last_name, job_id, salary

SELECT last_name,job_id,salary FROM employees WHERE salary > ALL( SELECT salary FROM employees WHERE job_id = 'SA_MAN' )

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

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

8.查询每个部门下的部门人数大于 5 的部门名称(相关子查询)

SELECT department_name
FROM departments d
WHERE 5 < (
       SELECT COUNT(*)  FROM employees e WHERE d.department_id = e.`department_id` )

9.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资(相关子查询)

SELECT last_name,salary,department_id
FROM employees e1
WHERE salary > (
        SELECT AVG(salary)  FROM employees e2  WHERE e2.department_id = e1.`department_id`)

10.查询出公司中所有 manager 的详细信息

# 自连接

SELECT DISTINCT mgr.employee_id,mgr.last_name,mgr.job_id,mgr.department_id
FROM employees emp JOIN employees mgr  ON emp.manager_id = mgr.employee_id;

# 子查询

SELECT employee_id,last_name,job_id,department_id
FROM employees
WHERE employee_id IN (
            SELECT DISTINCT manager_id  FROM employees)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 时间格式转换

文章目录 将秒转换成简单时间格式方式一 表格渲染方式二 js转换 将时间转换为字符串方式一 年、月、日、时、分、秒、星期等信息方式二 返回多久之前的时间 将秒转换成简单时间格式 方式一 表格渲染 element-ui 表格为例&#xff0c;duration 单位为秒 <el-table-column …

逻辑回归精讲

一、从线性回归到逻辑回归 对于分类问题&#xff0c;我们该如何解决 可以通过线性回归阈值解决吗&#xff1f; 就上面的这张图而言&#xff0c;横轴蓝色的那条线是可以将正负样本区分开的。那我们再看一个例子 就上面的图而言&#xff0c;横轴蓝色的那条线无法将正负例正确划…

基于springboot的垃圾分类网站的设计与实现

系统设计 本垃圾分类网站主要包括三大功能模块&#xff0c;即用户功能模块和管理员功能模块、垃圾分类管理员功能模块。源码下载 &#xff08;1&#xff09;管理员模块&#xff1a;系统中的核心用户是管理员&#xff0c;管理员登录后&#xff0c;通过管理员功能来管理后台系统…

SpringMVC (四) 数据处理及跳转

学习回顾&#xff1a;SpringMVC &#xff08;三&#xff09; RestFul和控制器 现在我们来看看SpringMVC参数接收处理和结果跳转处理吧&#xff01; 结果跳转方式 一、ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前…

测试员该如何向七大姑八大姨解释你的工作?

过年回家&#xff0c;走亲访友带来了一年未见的七大姑八大姨们&#xff0c;必不可少会出现一系列“灵魂拷问”&#xff0c;比如“二狗&#xff0c;在做啥工作呢&#xff1f;” 相比“有对象了么&#xff1f;”、“啥时候生娃&#xff1f;”等硬核话题&#xff0c;合理地向七大姑…

如果只能推荐3本关于python的书,你会推荐哪3本?

如果只能推荐3本Python书的话&#xff0c;我推荐这3本。 第一本&#xff1a;Python编程快速上手 让繁琐工作自动化 第2版  豆瓣评分8.9 本书是一本面向初学者的Python编程实用指南。本书不仅介绍了Python语言的基础知识&#xff0c;而且通过案例实践教读者如何使用这些知识和…

css自学框架之栅格化12格布局、flex布局下两端对齐,不满左对齐

flex基础知识 1.flex-direction 容器内元素的排列方向(默认横向排列) flex-direction:row; 沿水平主轴让元素从左向右排列flex-direction:column; 让元素沿垂直主轴从上到下垂直排列flex-direction:row-reverse;沿水平主轴让元素从右向左排列 2.flex-wrap 容器内元素的换行(…

java feign的使用详细步骤及okhttp的使用

1、首先创建一个feign的模块并配置依赖&#xff0c;如图&#xff1a; 1、引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency&g…

kali换源

sudo vim /etc/apt/sources.list&#xff08;打开sources.list 文件&#xff09; 官方源 deb http://http.kali.org/kali kali-rolling main non-free contrib deb-src http://http.kali.org/kali kali-rolling main non-free contrib 中科大源 deb http://mirrors.ustc.edu.cn…

小主机折腾记15

海鲜市场买到个华硕的h61主板&#xff0c;支持笔记本内存又带独显插槽&#xff0c;40大洋包邮…… 到货后把老笔记本上拆下来的两根威刚2g 1066的内存条安上&#xff0c;上集提到的i5 2390t安上&#xff0c;之前买的gt440安上&#xff0c;最后安上了之前买的惠普侧吹风散热器&…

北大2019计算机学科夏令营上机考试

目录 A:数与字符串【找规律】 B:打印月历【暴力水题】 C:Hopscotch【BFS】 D:上楼梯【动态规划】 E:Life Line 【图】 F:跳蛙【DSP】 G:Falling Leaves【二叉搜索树】 H&#xff1a;昂贵的聘礼【图】 I:Connect【放弃】 A:数与字符串【找规律】 #include<iostream&…

idea项目提交到git 这一篇就够了

1. 下载git 到本地文件夹 2. 在windows端打开命令行 winR 然后cmd 首先查看git是否安装成功 从这里就可以看出git已经安装成功 然后使用 git config --list 查看git的基本配置 如果是第一次使用&#xff0c;需要创建用户名和邮箱 配置成功后再次使用 git config --list …

生成式AI, 新兴职业?

动动发财的小手&#xff0c;点个赞吧&#xff01; 生成式AI是一种基于人工智能技术的创新领域&#xff0c;它的目标是通过机器学习和自然语言处理等技术来模拟人类的创造力和智慧&#xff0c;从而生成全新的内容&#xff0c;如文本、图像、音频等。生成式AI在近年来取得了巨大的…

php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)

获取指定资源学习记录信息 前言一、获取指定资源学习记录信息请求方式及url二、获取指定资源学习记录信息请求参数请求参数请求格式 三、单人单学习记录API封装函数四、单人多学习记录API封装函数总结 前言 开发使用小鹅通API的时候&#xff0c;以下是一些需要注意的事项&…

实战:RocketMQ高级功能代码实现

1&#xff0c;事务消息代码实现 之前我们已经在讨论订单业务消息丢失问题中引出了事务消息&#xff0c;本内容我们就实际用代码来实现一下事务消息吧。 首先我们用原生代码来实现一下事务消息&#xff0c;下面是事务消息生产者TransactionProducer类的代码&#xff0c;具体代码…

Reveser(小学期)

开门见山 看一下多少位的 Flag就在上面 给电灯通电 打开看一下主函数 看到这个判断同时&#xff0c;进去看到最后一个函数 看到最后一个判断&#xff0c;数组判断的个数是56个 在IDA里面v5这个参数确实是56&#xff0c;但是v2不是 我们放进去看一下发现 有了前面的一些&a…

20种常用的软件测试方法,建议先收藏再观看

软件测试在完整的项目当中算是最后一个环节&#xff0c;也是非常重要的一个环节。通过软件测试&#xff0c;我们才能得知一个程序是否符合标准。 小编整理出20种常见的软件测试方法&#xff0c;建议伙伴们先收藏再看。不敢说史上最全&#xff0c;但我办公室里十年软件测试经验…

创建Java文件时路径字符串的名字分割符

java.io.File的构造函数&#xff1a; 如果用File(String pathname)这个形式的构造函数&#xff0c;路径字符串pathname涉及名字分割符。 下面代码的几段各创建了一个文件&#xff0c;但有的写法就不正确&#xff0c;见代码中的注释&#xff1a; package com.thb;import java…

零信任:接入Authing进行身份认证

在之前的的文章中我们提到我们自己开发了一个Apisix的认证插件来实现认证&#xff0c;但是实际过程当中&#xff0c;我们同样也希望支持使用Keycloak&#xff0c;Authing&#xff0c;okta这类统一身份认证。本文主要是说明我们如何使用Authing这个身份认证供应商来实现登录认证…

Docker安装达梦M8数据库,Jdbc客户端乱码解决方案

Docker安装达梦M8 下载镜像tar包&#xff1a;https://eco.dameng.com/download/ #导入镜像 docker load -i dm8_20220822_rev166351_x86_rh6_64_ctm.tar # 启动容器 docker run -d -p 5236:5236 --restartalways --name dm8 --privilegedtrue -e PAGE_SIZE16 -e LD_LIBRARY_…