본문 바로가기

인프런/[백문이불여일타] 데이터 분석을 위한 중급 SQL

JOIN

JOIN

 

 

INNER JOIN

 

  • 두 테이블에서 공통된 값을 가진 행을 반환할 때 사용
    • 교집합 개념
SELECT *
FROM 테이블 1
     INNER JOIN 테이블 2 ON 테이블 1.컬럼 = 테이블 2.컬럼;

 

 

OUTER JOIN

 

  • 한쪽 테이블(기준 테이블)의 모든 행을 포함하고, 다른 테이블(조인 대상 테이블)에서 일치하는 행을 반환할 때 사용

 

LEFT JOIN

  • 왼쪽 테이블(기준 테이블)의 모든 행을 포함하고, 오른쪽 테이블(조인 대상 테이블)에서 일치하는 행을 반환할 때 사용
    • 오른쪽 테이블에서 일치하는 행이 없을 경우, NULL을 반환
SELECT *
FROM 기준 테이블
     INNER JOIN 조인 대상 테이블 ON 기준 테이블.컬럼 = 조인 대상 테이블.컬럼;

 

RIGHT JOIN

  • 오른쪽 테이블(기준 테이블)의 모든 행을 포함하고, 왼쪽 테이블(조인 대상 테이블)에서 일치하는 행을 반환할 때 사용
    • 왼쪽 테이블에서 일치하는 행이 없을 경우, NULL을 반환
  • 일반적으로 LEFT JOIN을 많이 사용
SELECT *
FROM 조인 대상 테이블
     RIGHT JOIN 기준 테이블 ON 조인 대상 테이블.컬럼 = 기준 테이블.컬럼;

 

 

SELF JOIN

 

  • 같은 테이블에서 다른 행끼리 비교하거나 연결할 때 사용
    • 일반적으로 계층 구조, 상하 관계, 자기 참조 데이터를 조회할 때 사용
  • 별칭(Alias)을 사용하여 테이블 구분

 

 

 

Function

 

 

날짜 처리

 

DATE(날짜/시간)

  • 날짜/시간 데이터에서 날짜 부분만 추출할 때 사용

 

DATE_ADD(기준 날짜/시간, INTERVAL)

  • 기준 날짜/시간에 기간을 더할 때 사용
    • INTERVAL 단위
      • SECOND : 초 단위
      • MINUTE : 분 단위
      • HOUR : 시간 단위
      • DAY : 일 단위
      • WEEK : 주 단위
      • MONTH : 달 단위
      • QUARTER : 분기 단위
      • YEAR : 연 단위

 

DATE_SUB(기준 날짜/시간, INTERVAL)

  • 기준 날짜/시간에 기간을 뺄 때 사용

 


HackerRank & LeetCode

 

 

African Cities

 

SELECT city.name
FROM city
     INNER JOIN country ON city.countrycode = country.code
WHERE country.continent = 'Africa'

 

 

Population Census

 

SELECT SUM(city.population)
FROM city
     INNER JOIN country ON city.countrycode = country.code
WHERE country.continent = 'Asia';

 

 

Average Population of Each Continent

 

SELECT country.continent
     , FLOOR(AVG(city.population))
FROM city
     INNER JOIN country ON city.countrycode = country.code
GROUP BY country.continent;

 

 

Customers Who Never Order

 

SELECT Customers.name AS Customers
FROM Customers
     LEFT JOIN Orders ON Customers.id = Orders.customerId
WHERE Orders.id IS NULL;

 

 

Employees Earning More Than Their Managers

 

SELECT A.name AS Employee
FROM Employee AS A
     INNER JOIN Employee AS B ON A.managerId = B.id
WHERE A.salary > B.salary;

 

 

Rising Temperature

 

SELECT A.id AS Id
FROM Weather AS A
     INNER JOIN Weather AS B ON DATE(A.recordDate) = DATE_ADD(B.recordDate, INTERVAL 1 DAY)
WHERE A.temperature > B.temperature;

 

 

'인프런 > [백문이불여일타] 데이터 분석을 위한 중급 SQL' 카테고리의 다른 글

UNION  (0) 2025.08.30
CASE  (0) 2025.08.28
COUNT / SUM / AVG / MIN / MAX / GROUP BY  (0) 2025.08.27