그 밖의 방법들

SQL/MySQL의 기초 - WHERE, SubQuery

치킨먹고싶어요 2022. 5. 25. 22:59

https://leetcode.com/problems/second-highest-salary/

 

Second Highest Salary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제를 해석 하자면 두 번째로 높은 임금을 구하여라. 그러나 두 번째 높은 값이 없을 경우에는 null을 출력하라라는 뜻입니다.

 

그러나 문제를 풀 것은 아니고, 이 문제로 WHERE과 SubQuery를 배워봅시다.

 

일단 아래의 코드가 위에 링크 문제의 답입니다.

SELECT MAX(Salary) AS SecondHighestSalary
FROM Employee
WHERE Salary != (
    SELECT MAX(Salary)
    FROM Employee
)
cs

여기서 As는 쿼리 안의 테이블이나 서브쿼리에 이름을 지정해 줍니다.

 

 

Input: 
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
Output: 
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
cs

위의 문제의 Output을 보면 SecondHighestSalary로 이름이 주어졌으니 As를 사용하여 이름을 지정해 줍니다.

그리고 FROM 문은 SELECT문에서 참조할 테이블을 지정합니다.

Employee table을 사용해야 하니 FROM Employee 를 작성해 줍시다

 

 

WHERE는 다른 프로그래밍 언어의 If문과 닮아 있습니다. 조건을 명시하기 때문이죠

조건을 읽어보면 Saraly가 무언가와 다를 때 라고 합니다. WHERE Salary !=

 

 무언가가 무엇일까요?

서브트리는 하나의 SQL 쿼리 안에 있는 SQL 쿼리입니다. 메인트리에 종속되어 있는 트리입니다.

 

서브트리를 읽어보면 Employee 테이블에 있는 최대 Salary를 나타내는 군요.

WHERE Salary != (
    SELECT MAX(Salary)
    FROM Employee
)
cs

 

그러면 WHERE는 (메인트리의) Salary가 (서브트리의) 최대 Salary가 아닐 때라고 하네요.

 

 

그리고 맨 위의 코드를 읽어보면

SELECT MAX(Salary) AS SecondHighestSalary

최대 Salary를 구하라고 합니다. 그렇다면 전체에서 최대 Salary를 제외한 차대 Salary를 구하게 되겠죠