07mysql查询语句之子查询

这篇具有很好参考价值的文章主要介绍了07mysql查询语句之子查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#1.查询和Zlotkey相同部门的员工姓名和工资
SELECT last_name,salary
FROM employees
WHERE department_id IN (
            SELECT department_id
            FROM employees
            WHERE last_name = 'Zlotkey'
);
#2.查询工资比公司平均工资高的员工的员工号,姓名和工资。
SELECT employee_id,last_name,salary
FROM employees
WHERE salary > (
        SELECT AVG(salary)
        FROM employees
);
#3.选择工资大于所有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'
        );
#4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
SELECT employee_id,last_name
FROM employees
WHERE department_id IN (
            SELECT DISTINCT department_id
            FROM employees
            WHERE last_name LIKE '%u%'
);
#5.查询在部门的location_id为1700的部门工作的员工的员工号
SELECT employee_id
FROM employees
WHERE department_id IN (
            SELECT department_id 
            FROM departments
            WHERE location_id = 1700
            );
#6.查询管理者是King的员工姓名和工资
SELECT last_name,salary,manager_id
FROM employees
WHERE manager_id IN (
            SELECT employee_id
            FROM employees
            WHERE last_name = 'King'
            );
#7.查询工资最低的员工信息: last_name, salary

SELECT last_name,salary
FROM employees
WHERE salary =(
        SELECT MIN(salary)
        FROM employees
        );
#8.查询平均工资最低的部门信息
#方式一:
SELECT * ,(SELECT AVG(salary) FROM employees WHERE department_id = d.`department_id`) avg_sal
FROM departments d
WHERE department_id = (
            SELECT department_id
            FROM employees
            GROUP BY department_id
            HAVING AVG(salary) = (
            SELECT MIN(avg_sal)
            FROM (
                SELECT AVG(salary) avg_sal
                FROM employees
                GROUP BY department_id
                ) t_dept_avg_sal
            )


                        );
#方式2:
SELECT d.*,(SELECT AVG(salary) FROM employees WHERE department_id = d.`department_id`) avg_sal
FROM departments d
WHERE department_id = (
            SELECT department_id
            FROM employees
            GROUP BY department_id
            HAVING AVG(salary) <= ALL(
                        SELECT AVG(salary) avg_sal
                        FROM employees
                        GROUP BY department_id
                        ) 

                        );
#方式3:LIMIT
SELECT d.*,(SELECT AVG(salary) FROM employees WHERE department_id = d.`department_id`) avg_sal
FROM departments d
WHERE department_id = (
            SELECT department_id
            FROM employees
            GROUP BY department_id
            HAVING AVG(salary) =(
                                    SELECT AVG(salary) avg_sal
                        FROM employees
                        GROUP BY department_id
                        ORDER BY avg_sal ASC
                        LIMIT 0,1
                        )
            );
#方式4:
SELECT d.*,(SELECT AVG(salary) FROM employees WHERE department_id = d.`department_id`) avg_sal
FROM departments d,(
SELECT department_id,AVG(salary) avg_sal
FROM employees
GROUP BY department_id
ORDER BY avg_sal ASC
LIMIT 0,1
) t_dept_avg_sal
WHERE d.`department_id`= t_dept_avg_sal.department_id
#9.查询平均工资最低的部门信息和该部门的平均工资(相关子查询)
#方式1:
SELECT d.*,(SELECT AVG(salary) FROM employees WHERE department_id = d.`department_id`) avg_sal
FROM departments d
WHERE department_id = (
            SELECT department_id
            FROM employees
            GROUP BY department_id
            HAVING AVG(salary) = (
            SELECT MIN(avg_sal)
            FROM (
                SELECT AVG(salary) avg_sal
                FROM employees
                GROUP BY department_id
                ) t_dept_avg_sal
            )


                        );
#10.查询平均工资最高的 job 信息
#方式1:
SELECT *
FROM jobs
WHERE job_id = (
SELECT job_id
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (
            SELECT MAX(avg_sal)
            FROM (
                SELECT AVG(salary) avg_sal
                FROM employees
                GROUP BY job_id
                ) t_job_avg_sal
                      )
);

#方式2:
SELECT *
FROM jobs
WHERE job_id = (
SELECT job_id
FROM employees
GROUP BY job_id
HAVING AVG(salary) >= ALL (
            SELECT AVG(salary) 
            FROM employees
            GROUP BY job_id
                      )
);
#方式3:
SELECT *
FROM jobs
WHERE job_id = (
SELECT job_id
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (
            SELECT MAX(avg_sal)
            FROM (
                SELECT AVG(salary) avg_sal
                FROM employees
                GROUP BY job_id
                ORDER BY avg_sal DESC
                LIMIT 0,1
                ) t_job_avg_sal
                      )
);

#方式4:
SELECT j.*
FROM jobs j,(
SELECT job_id,AVG(salary) avg_sal
FROM employees
GROUP BY job_id
ORDER BY avg_sal DESC
LIMIT 0,1
) t_job_avg_sal
WHERE j.job_id = t_job_avg_sal.job_id
#11.查询平均工资高于公司平均工资的部门有哪些?
SELECT department_id
FROM employees
WHERE department_id
GROUP BY department_id
HAVING AVG(salary) > (
            SELECT AVG(salary)
            FROM employees
            );
#12.查询出公司中所有 manager 的详细信息

#方式1:自连接
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
            );
#方式三:使用EXISTS
SELECT employee_id,last_name,job_id,department_id
FROM employees e1
WHERE EXISTS (
        SELECT *
        FROM employees e2
        WHERE e1.`employee_id` = e2.`employee_id`
        );

#13.各个部门中 最高工资中最低的那个部门的 最低工资是多少?
#方式一:
SELECT MIN(salary)
FROM employees
WHERE department_id = (
            SELECT department_id
            FROM employees
            GROUP BY department_id
            HAVING MAX(salary) = (
                        SELECT MIN(max_sal)
                        FROM (
                        SELECT MAX(salary) max_sal
                        FROM employees
                        GROUP BY department_id
                        ) t_dept_max_salary)
);
#方式2:
SELECT MIN(salary)
FROM employees
WHERE department_id = (
            SELECT department_id
            FROM employees
            GROUP BY department_id
            HAVING MAX(salary) <=ALL (
                        SELECT MAX(salary)
                        FROM employees
                        GROUP BY department_id
                        )
);
#方式3:
SELECT MIN(salary)
FROM employees
WHERE department_id = (
            SELECT department_id
            FROM employees
            GROUP BY department_id
            HAVING MAX(salary) = (
                        SELECT MAX(salary) max_sal
                        FROM employees
                        GROUP BY department_id
                        ORDER BY max_sal ASC
                        LIMIT 0,1
                        )
            );
#方式4:
SELECT MIN(salary)
FROM employees e,(
          SELECT department_id,MAX(salary) max_sal
          FROM employees
          GROUP BY department_id
          ORDER BY max_sal ASC
          LIMIT 0,1
          ) t_dept_max_sal
WHERE e.department_id = t_dept_max_sal.department_id
#14.查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary
#方式1:
SELECT last_name,department_id,email,salary
FROM employees
WHERE employee_id IN (
            SELECT DISTINCT manager_id
            FROM employees
            WHERE department_id = (SELECT department_id
                        FROM employees
                        GROUP BY department_id
            HAVING AVG(salary) = (
                        SELECT MAX(avg_sal)
                        FROM (
                        SELECT AVG(salary) avg_sal
                        FROM employees
                        GROUP BY department_id
                              )t_dept_avg_sal
                        ))
            

);
#方式2:
SELECT last_name,department_id,email,salary
FROM employees
WHERE employee_id IN (
            SELECT DISTINCT manager_id
            FROM employees
            WHERE department_id = (SELECT department_id
                        FROM employees
                        GROUP BY department_id
            HAVING AVG(salary) >=ALL (
                        SELECT AVG(salary) avg_sal
                        FROM employees
                        GROUP BY department_id
                              )
                        )
            

);

#方式3:
SELECT last_name,department_id,email,salary
FROM employees
WHERE employee_id  IN (
            SELECT DISTINCT manager_id
            FROM employees e,(
                      SELECT department_id,AVG(salary) avg_sal
                      FROM employees
                      GROUP BY department_id
                      ORDER BY avg_sal DESC
                      LIMIT 0,1
                     ) t_dept_avg_sal
WHERE e.`department_id` = t_dept_avg_sal.department_id
);
#15. 查询部门的部门号,其中不包括job_id是"ST_CLERK"的部门号
#方式1:
SELECT department_id
FROM departments
WHERE department_id NOT IN(
                SELECT DISTINCT department_id
                FROM employees
                WHERE job_id = 'ST_CLERK'
);
#方式2:
SELECT department_id
FROM departments d
WHERE NOT EXISTS (
        SELECT *
        FROM employees e
        WHERE d.`department_id` = e.`department_id`
        AND e.`job_id` = 'ST_CLERK'
        );
#16. 选择所有没有管理者的员工的last_name

SELECT last_name
FROM employees e1
WHERE NOT EXISTS (
        SELECT *
        FROM employees e2
        WHERE e1.`manager_id` = e2.`employee_id`
);
#17.查询员工号、姓名、雇用时间、工资,其中员工的管理者为 'De Haan'
#方式1:
SELECT employee_id,last_name,hire_date,salary
FROM employees
WHERE manager_id IN (
            SELECT employee_id
            FROM employees
            WHERE last_name = 'De Haan' 
);
#方式2:
SELECT employee_id,last_name,hire_date,salary
FROM employees e1
WHERE EXISTS (
        SELECT *
        FROM employees e2
        WHERE e1.manager_id = e2.employee_id
        AND e2.last_name = 'De Haan'
        );
#18.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资(相关子查询)
#方式1:使用相关子查询
SELECT last_name,salary,department_id
FROM employees e1
WHERE salary > (
        SELECT AVG(salary)
        FROM employees e2
        WHERE department_id = e1.`department_id`

);

#方式2:在from中声明子查询
SELECT e.last_name,e.salary,e.department_id
FROM employees e,(
SELECT department_id,AVG(salary) avg_sal
FROM employees
GROUP BY department_id) t_dept_avg_sal
WHERE e.department_id = t_dept_avg_sal.department_id
AND e.salary > t_dept_avg_sal.avg_sal
#19.查询每个部门下的部门人数大于 5 的部门名称(相关子查询)
SELECT department_name
FROM departments d
WHERE 5 < (
       SELECT COUNT(*)
       FROM employees e
       WHERE d.department_id = e.`department_id`
       );
#20.查询每个国家下的部门个数大于 2 的国家编号(相关子查询)

SELECT * FROM locations;

SELECT country_id
FROM locations l
WHERE 2 < (
       SELECT COUNT(*)
       FROM departments d
       WHERE l.`location_id` = d.`location_id`
       );
       
/*
子查询的编写技巧(或步骤):①从里往外写 ②从外往里写

如何选择?
①如果子查询相对简单,建议从外往里写。一单子查询结构较复杂,则建议从里往外写
②如果是相关子查询的话,通畅都是从外往里写
*/文章来源地址https://www.toymoban.com/news/detail-619044.html

到了这里,关于07mysql查询语句之子查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库查询语句之组函数,子查询语句

    以组为操作单位,一组数据得到一个结果。 在没有手动分组的前提下,整张表默认为一组数据 max(列名):获取最大值 min(列名):获取最小值 sum(列名):获取总和 avg(列名):获取平均值 count(列名):统计值的个数 所有组函数都会自动忽略null值 在某些情况下,我们需要根据需要

    2024年01月23日
    浏览(59)
  • Mysql查询语句大全

    2024年02月11日
    浏览(44)
  • MySQL 查询语句大全

    目录 基础查询 直接查询 AS起别名 去重(复)查询 条件查询 算术运算符查询 逻辑运算符查询 正则表达式查询⭐ 模糊查询 范围查询 是否非空判断查询 排序查询  限制查询(分页查询) 随机查询 分组查询 HAVING 高级查询 子查询(嵌套查询) 排号  排名  聚合函数 连接查询

    2024年02月13日
    浏览(33)
  • MySQL中基础查询语句

    用户表user数据如下: id device_id gender age university province 1 2138 male 21 北京大学 Beijing 2 3214 male 复旦大学 Shanghai 3 6543 famale 20 北京大学 Deijing 4 2315 female  23   浙江大学 ZheJiang 5 5432 male 25 山东大学 Shandong 1,写出ddl语句创建如上表,插入数据,查询所有数据   执行结果如下: ​

    2024年02月13日
    浏览(32)
  • 看一眼Mysql查询语句

    目录 🛻 查询数据 🛻基本查询语句 🛻单表查询 🚕查询所有字段 🚕查询指定字段 🚕查询指定记录 🚕带in的查询 🚕带between and的范围查询 🚕带like的字符匹配查询 🚕查询空值 🚕带and的多条件查询 🚕带or的多条件查询 🚕查询结果不重复 🚕对查询结果排序 🛻单

    2024年02月12日
    浏览(70)
  • 【MySQL】——Select查询语句(其二)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年02月08日
    浏览(51)
  • 【SQL】MySQL的查询语句

    MySQL是一种广泛使用的关系型数据库管理系统,它被广泛地应用于各种应用程序和网站。学会使用MySQL的查询语句可以帮助我们更好地管理和分析数据,从而更好地利用数据库中的信息。在本篇博客中,我们将深入学习MySQL的查询语句,包括 SELECT 语句、 WHERE 子句、 JOIN 语句等

    2024年02月06日
    浏览(47)
  • MySQL多表查询 子查询效率(DQL语句)

    项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一) 多对多 一对一 一对多 部门与员工的关系:一个部门对应多个员工,一

    2023年04月08日
    浏览(47)
  • [MySQL]不允许你不会SQL语句之查询语句

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(88)
  • MySQL 语句查询的方法案例分享,和一些常用查询语句 2023.7.08

    1. 查询出部门编号为30的所有员工  2. 所有销售员的姓名、编号和部门编号 3. 找出奖金高于工资的员工 4. 找出奖金高于工资60%的员工 5. 找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料 6. 找出部门编号为10中所有经理,部门编号为20中所有销售员,还有

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包