ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL-sql99-exists后面的子查询+案例讲解

2022-05-23 13:31:27  阅读:297  来源: 互联网

标签:name exists 员工 sql99 MySQL department 查询 id select


四、exists后面(相关子查询)

其实就是一个bool类型

#四、exists后面(相关子查询)
# 其实就是一个bool类型
select exists(select `employee_id` from `employees`)

判断exist后面有没有值

image

没有值的情况如下:

select exists(select `employee_id` from `employees` where `salary`=30000)

image

image

案例:查询有员工的部门名

# 查询有员工的部门名
SELECT `department_name`
FROM `departments` d
WHERE EXISTS(
  SELECT  *
  FROM `employees` e
  WHERE e.`department_id`=d.`department_id`
);

image

也可以用in的方式

# 查询有员工的部门名
select `department_name`
from `departments` d
where d.`department_id` in(
	select `department_id`
	from `employees`
)

image

查询没有女朋友的男神信息

# 查询没有女朋友的男神信息
select bo.*
from `boys` bo
where bo.`id` not in(
	select b.`boyfriend_id`
	from `beauty` b
)

image

也可以用exists

查询没有女朋友的男神信息

# 查询没有女朋友的男神信息
select bo.*
from `boys` bo
where not exists(
	select b.`boyfriend_id`
	from `beauty` b
	where bo.`id`=b.`boyfriend_id`
)

image

案例讲解

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

#查询和zlotkey相同部门的员工姓名和工资
select `last_name`,`salary`
from `employees`
where `department_id`=(
	select `department_id`
	from `employees`
	where `last_name`='zlotkey'
);

image

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

#查询工资比公司平均工资高的员工的员工号,姓名和工资
SELECT `employee_id`,`last_name`,`salary`
FROM `employees`
WHERE `salary`>(
	SELECT AVG(`salary`)
	FROM `employees`
);

image

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

#查询各部门中工资比本部门平均工资高的员工的员工号,姓名和工资
select e.`employee_id`,e.`last_name`,e.`salary`,e.`department_id`
from `employees` e
inner join
(
	select avg(`salary`) ag,`department_id`
	from `employees`
	group by `department_id`
) ag_dep
on e.`department_id`=ag_dep.`department_id`
where e.`salary`>ag_dep.ag


。
查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
5.查询在部门的location_id为1700的部门工作的员工的员工号
6.查询管理者是King的员工姓名和工资
7.查询工资最高的员工的姓名,要求first_name和last_name显示为一列,列名为姓.名

image

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

#查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
select e.`employee_id`,e.`last_name`
from `employees` e
where e.`department_id` in
(
	select distinct `department_id`
	from `employees`
	where `last_name` like '%u%'
);

image

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

#查询在部门的location_id为1700的部门工作的员工的员工号
SELECT e.`employee_id`
FROM `employees` e
WHERE e.`department_id` IN
(
	SELECT `department_id`
	FROM `departments`
	WHERE `location_id` =1700
);

image

这一题 也可以用any来做

#查询在部门的location_id为1700的部门工作的员工的员工号
SELECT e.`employee_id`
FROM `employees` e
WHERE e.`department_id` =ANY
(
	SELECT `department_id`
	FROM `departments`
	WHERE `location_id` =1700
);

image

查询管理者是K_ing的员工姓名和工资

#查询管理者是K_ing的员工姓名和工资
select e.`last_name`,e.`salary`
from `employees` e
where e.`manager_id` =any
(
	select `employee_id`
	from `employees`
	where `last_name` ='K_ing'
);

image

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

#查询工资最高的员工的姓名,要求first_name和last_name显示为一列,列名为姓.名
select concat(e.`first_name`,e.`last_name`) '姓.名'
from `employees` e
where e.`salary` =
(
	select max(`salary`)
	from `employees`
);

image

标签:name,exists,员工,sql99,MySQL,department,查询,id,select
来源: https://www.cnblogs.com/jgg54335/p/14968372.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有