SQL을 계속 하다보니 약간 패턴이 보인다.
물론, 원리를 이해하고 하는 것이 더 중요하긴 한데 조금이나마 익숙해지는 듯 하다.
그렇다 보니 왜 정답이 아닐까..? 라는 것을 계속 찾게된다.

이번문제는 SalesPerson, Company, Orders 세개의 테이블을 연결하여 원하는 값을 찾는 문제다.
SalesPerson의 Sales_id와 Orders의 Sales_id를 연결할 수 있고
Company의 com_id와 Orders의 com_id를 연결할 수 있다.
또한, Company에 있는 name이 RED 인 것을 제외한 후 SalesPerson에서 name (이름)을 찾으면 된다.
사실, 처음에는 세개의 테이블을 연결해야 한다고 해서
SalesPerson 테이블을 첫 행으로 두고 Company와 Orders를 join으로 묶고자 했다.
그러나, join, join으로는 테이블을 만들 수 없었다.
그래서 확인해보니 EXISTS와 NOT EXSITS를 활용해야 한다는 걸 알 수 있었다.
EXISTS는 생각도 못하고 있었다. EXISTS는 서브쿼리가 행을 반환하는지 여부에 따라 TRUE 또는 FALSE를 반환한다고 한다.
그래서 XISTS를 쓸 때 보통 서브쿼리에는 SELECT 1을 사용한다고 한다. 상수를 넣어 특정 행이 존재하는지만 확인하고 실제 반환되는 값이 무엇인지 중요하지 않을 때 사용된다고 한다. SQL에서 성능을 쵲거화하고 쿼리를 간결하게 유지하는 방법 중 하나라고 한다.
그래서, Orders와 Company를 JOIN하되 회사 이름은 RED이고 Orders 테이블과 Salesperson 테이블의 id가 같은 여러 행들이 있는지를 확인하는 쿼리를 짰다. 글을 쓰다보니 생각이 든건데, 확실히 질문이나 해석을 작성하는 것 보다 코드를 작성하는게 훨씬 쉽고 소통하기 편하다고 느낀다.
물론, 아직 잘 몰라서 느리지만 한가지 확실한 건 체화가 되었을 때 정말 빨리 쉽게 일할 수 있을 것 같다는 생각이다.
한... 2주 정도 공부 하면 기본편들은 쉽게 풀 수 있지 않을까??
'직무강화 > SQL' 카테고리의 다른 글
| SQL 학습 9일차. User Activity for the past 30days (DATE_SUB, DATE_ADD) (1) | 2024.08.26 |
|---|---|
| SQL 학습 8일차 LEETCODE, Biggest Single Number (0) | 2024.08.26 |
| SQL 학습 6일차, 183. Customers Who Never Order (NULL, LEFT JOIN) (0) | 2024.08.22 |
| SQL 학습일지 5일차, 리트코드 182. Duplicate Emails 중복값 찾기 (0) | 2024.08.21 |
| SQL 공부 4일차 LEETCODE, 181. Employees Earning More Than Their Managers (0) | 2024.08.20 |