employee
表包含所有員工資訊,每個員工有其對應的 id, salary 和 department id。
+----+-------+--------+--------------+| id | name | salary | departmentid |
+----+-------+--------+--------------+
| 1 | joe | 70000 | 1 |
| 2 | henry | 80000 | 2 |
| 3 | sam | 60000 | 2 |
| 4 | max | 90000 | 1 |
+----+-------+--------+--------------+
department
表包含公司所有部門的資訊。
+----+----------+編寫乙個 sql 查詢,找出每個部門工資最高的員工。例如,根據上述給定的**,max 在 it 部門有最高工資,henry 在 sales 部門有最高工資。| id | name |
+----+----------+
| 1 | it |
| 2 | sales |
+----+----------+
+------------+----------+--------+解:| department | employee | salary |
+------------+----------+--------+
| it | max | 90000 |
| sales | henry | 80000 |
+------------+----------+--------+
select d.name as department,e.name as employee, e.salary
from employee as e,department as d
where e.departmentid = d.id and
e.salary = (select max(salary) from employee as e2 where d.id = e2.departmentid)
記幾個問題:
1.表別名的用法,只要打上了表別名,就不再是這個表了。如果前後有兩個巢狀形式的select語句,因為是select肯定都要跟from某個表,前面一旦打上了別名,後面跟前面用的就真的不是乙個表了。
所以只要用了別名,都要看清作用範圍,沒有引入第二個select就一直有效,引入了另說。
2.select的巢狀用法:
sql中的兩個簡單巢狀:
(1)select *from table1 where name1>(select name2 from table2);
(2)select *,(select * from table2)as column_name from table1;
(3)select *form (select name1 from table1 where id>3) as t1;
首先是前兩個,最大的區別就在於要提取的那一部分,表裡有沒有現成的,有現成的就先抽出來,然後在後面用where去控制這個範圍,如果沒有現成的,那就在一開始的時候select (select)as a from table,在一開始的時候寫上有這麼個東西。
第三個就是在篩選過一遍的範圍裡面,再次進行篩選,記得中間那個select用括號套好,後面寫上as t
部門工資最高的員工
leecode的題目。關於in的應用。感覺很經典,這裡列出解題過程。employee 表包含所有員工資訊,每個員工有其對應的 id,salary 和 department id。sql如下 set names utf8mb4 set foreign key checks 0 table struct...
LeetCode SQL 部門工資最高的員工
employee 表包含所有員工資訊,每個員工有其對應的 id,salary 和 department id。id name salary departmentid 1 joe 70000 1 2 henry 80000 2 3 sam 60000 2 4 max 90000 1 departmen...
leetcode 求部門工資最高的員工
employee表包含所有員工資訊,每個員工有其對應的 id,salary 和 department id。id name salary departmentid 1 joe 70000 1 2 henry 80000 2 3 sam 60000 2 4 max 90000 1 department...