0
点赞
收藏
分享

微信扫一扫

重定向printf、或者USARTX_printf()(hal库)

微言记 2024-08-19 阅读 7
sql数据库

SQL195 查找最晚入职员工的所有信息

 从 "employees" 表中选择所有的数据,并按照"hire_date"列进行降序排序。然后,使用"limit 1"限制结果集只返回最顶部的一行数据。

select * from employees
order by hire_date desc
limit 1 

 SQL196 查找入职员工时间排名倒数第三的员工所有信息

从"employees"表中选择所有的数据,并使用子查询来查找第二个最近的"hire_date"。子查询"select distinct hire_date from employees order by hire_date desc limit 2,1"首先从"employees"表中选择所有不重复的"hire_date",然后按降序排序并使用"limit 2,1"来获取第二个结果。之后,外部查询使用"where hire_date ="将结果与"employees"表中的"hire_date"进行比较,从而获取与第二个最近的"hire_date"相等的员工记录。

select * from employees
where hire_date = (select distinct hire_date 
    from employees 
    order by hire_date desc 
    limit 2,1)

 SQL197 查找当前薪水详情以及部门编号dept no

查询从"dept_manager"表开始,使用"left join"将"dept_manager"表与"salaries"表进行连接。连接条件是"dept_manager"表中的"emp_no"与"salaries"表中的"emp_no"相等。

通过左连接,将会返回所有在"dept_manager"表中的记录,无论是否有与之匹配的薪水记录。如果在"salaries"表中没有对应的记录,那么相关列将会显示为NULL。

最终,查询选择了需要的列,包括"dept_manager"表中的"emp_no"和"dept_no"列,以及"salaries"表中的"salary,from_date,to_date"列。

select d.emp_no,s.salary,s.from_date,s.to_date,d.dept_no
from dept_manager d left join salaries s on d.emp_no = s.emp_no

 SQL198 查找所有已经分配部门的员工的lastname和firstname以及dept no

和上一题差不多

select e.last_name,e.first_name,d.dept_no
from dept_emp d left join 
employees e on d.emp_no = e.emp_no

 SQL199 查找所有员工的last name和first name以及对应部门编号dept no

select last_name,first_name,dept_no from 
employees e left join dept_emp d on 
e.emp_no = d.emp_no 

 SQL201 查找薪水记录超过15条的员工号emp no以及其对应的记录次数t

查询从"salaries"表开始,使用"group by"子句按照"emp_no"列分组。这意味着相同的"emp_no"值将会被聚合到一起。

然后使用"count(*)"函数统计每个"emp_no"分组中的记录数量,并且将结果命名为"t"。

最后,在"having"子句中,过滤掉只有15条或更少薪水记录的员工。只有满足"t>15"条件的分组(即记录数量大于15)才会被包含在查询结果中。

select emp_no,count(*) as t 
from salaries group by emp_no 
having t>15

SQL202 找出所有员工当前薪水salary情况 

查询从"salaries"表开始,使用"distinct"关键字来去除重复的薪水值,确保查询结果中只包含唯一的薪水值。

然后使用"order by"子句按照薪水值进行降序排序。"desc"关键字表示降序排序,从高到低排列。

select distinct salary 
from salaries 
order by salary desc

 SQL204 获取所有非manager的员工emp no

查询首先从"employees"表开始,使用"where"子句来筛选符合条件的员工。

然后使用子查询子句"select emp_no from dept_manager"来获取所有的部门经理的员工编号。

通过使用"not in"关键字,查询筛选出不在部门经理员工编号列表中的员工编号。

select emp_no 
from employees
where emp_no not in (
    select emp_no from dept_manager
)

 SQL205 获取所有员工当前的manager

查询使用左连接(left join)将"dept_emp"表和"dept_manager"表连接起来。

连接条件是"dept_no"字段相等。

然后使用"where"子句来筛选出在"dept_emp"表中的员工编号与"dept_manager"表中的员工编号不匹配的记录。

select de.emp_no,dm.emp_no
from dept_emp de 
left join dept_manager dm on
de.dept_no = dm.dept_no
where de.emp_no != dm.emp_no

 SQL206 获取每个部门中当前员工薪水最高的相关信息

首先,我们使用dept_emp表和salaries表进行内连接(join),将两个表根据emp_no(员工编号)进行匹配。

然后,在内连接的结果集中,我们使用子查询来找到每个部门中的最高工资。子查询首先将dept_emp表和salaries表再次进行内连接,并根据emp_no匹配。然后使用GROUP BY语句按照dept_no进行分组,并使用MAX()函数找到每个部门的最高工资。

最后,我们将子查询的结果与外部查询的结果进行匹配,只选择工资等于最高工资的记录。并且选取dept_no、de.emp_no和salary作为结果。

select dept_no,de.emp_no,salary as maxSalary from 
dept_emp de join salaries s on de.emp_no = s.emp_no
where (dept_no,salary) in(
select dept_no,max(salary) as maxSalary
from dept_emp de join salaries s on de.emp_no = s.emp_no
group by dept_no)
order by dept_no

SQL209 查找employees表emp_no与last name的员工信息

首先,我们使用employees表进行查询。

然后,在查询结果中,使用WHERE子句来筛选last_name不等于'Mary'的记录和emp_no是奇数的记录。条件last_name != 'Mary'用于排除姓为'Mary'的记录,emp_no%2=1用于过滤奇数编号的员工。

接下来,我们使用ORDER BY子句按照hire_date降序对结果进行排序。这样可以将最新入职的员工排在前面。

最后,我们从employees表中选择满足条件的记录,并按照设置的排序规则进行排序。

select * from employees
where last_name != 'Mary' and emp_no%2=1
order by hire_date desc 

 SQL210 统计出当前各个title类型对应的员工当前薪水对应的平均工资

  1. SELECT title, avg(s.salary):选择title列和s.salary的平均值作为结果集的列。

  2. FROM titles t JOIN salaries s ON t.emp_no = s.emp_no:将titles表和salaries表通过emp_no列进行连接。这样可以将职位和工资信息关联起来。

  3. GROUP BY title:按照title列进行分组,这样可以计算每个职位的平均工资。

  4. ORDER BY avg(s.salary):按照平均工资的升序对结果进行排序,即按照工资从低到高的顺序排列

select title,avg(s.salary)
from titles t join salaries s on t.emp_no = s.emp_no
group by title
order by avg(s.salary) 

 SQL211 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

  1. 首先,执行子查询 SELECT salary FROM salaries ORDER BY salary DESC LIMIT 1,1,这个子查询会返回按照工资降序排序后的第二个工资金额。

  2. 然后,将返回的工资金额作为条件,执行主查询 SELECT emp_no, salary FROM salaries WHERE salary = (子查询)

  3. 主查询会根据子查询返回的工资金额筛选出与之匹配的员工信息,即工资为第二高的员工。

  4. 最后,返回结果集包含工资为第二高的员工的员工号(emp_no)和对应的工资金额(salary)

select emp_no,salary from salaries
where salary =
(select salary from salaries 
order by salary desc limit 1,1)

 SQL212 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

  1. 首先,执行子查询 (SELECT max(salary) as salary FROM salaries WHERE salary != (SELECT max(salary) as salary FROM salaries))

    • 内层子查询 (SELECT max(salary) as salary FROM salaries) 会返回工资表中的最高工资金额。

    • 外层子查询 (SELECT max(salary) as salary FROM salaries WHERE salary != (SELECT max(salary) as salary FROM salaries)) 会返回除了最高工资之外的最高工资金额。

  2. 接下来,执行主查询 SELECT salaries.emp_no, salary, last_name, first_name FROM employees JOIN salaries ON employees.emp_no = salaries.emp_no WHERE salary = (子查询)

    • 主查询会根据子查询返回的工资金额筛选出与之匹配的员工信息,即工资为除了最高工资之外的最高工资的员工信息。
  3. 最后,返回结果集包含员工号(emp_no)、工资金额(salary)、姓氏(last_name)和名字(first_name)的信息,这些信息都是工资为除了最高工资之外的最高工资的员工的信息。

select salaries.emp_no,salary,last_name,first_name
from employees join salaries on 
employees.emp_no = salaries.emp_no
where salary =
(select max(salary) as salary from salaries
where salary !=
(select max(salary) as salary from salaries) )

 

举报

相关推荐

0 条评论