# INNER JOIN (INNER 키워드 생략 가능)
SELECT
*
FROM
HR.hr_cat C
INNER JOIN HR.hr_num N ON
C.EmployeeNumber = N.EmployeeNumber
# LEFT OUTER JOIN
SELECT
*
FROM
HR.hr_cat C
LEFT JOIN HR.hr_num N ON
C.EmployeeNumber = N.EmployeeNumber
# RIGHT OUTER JOIN
SELECT
*
FROM
HR.hr_cat C
RIGHT JOIN HR.hr_num N ON
C.EmployeeNumber = N.EmployeeNumber
# FULL OUTER JOIN
SELECT
*
FROM
HR.hr_cat C
FULL OUTER JOIN HR.hr_num N ON
C.EmployeeNumber = N.EmployeeNumber
# INNER JOIN w/ USING
SELECT *
FROM HR.hr_cat C
JOIN HR.hr_num N
USING (Employeenumber);
SELECT Department, EducationField, count(*) AS hc
FROM HR.hr_cat HC
LEFT JOIN HR.hr_num HN
ON HC.EmployeeNumber = HN.EmployeeNumber
GROUP BY 1, 2
ORDER BY 3 DESC
LIMIT 5;
SELECT Department, EducationField, count(*) AS hc
FROM HR.hr_cat HC
LEFT JOIN HR.hr_num HN
ON HC.EmployeeNumber = HN.EmployeeNumber
GROUP BY 1, 2
HAVING hc <= 30
ORDER BY 3 DESC;
SELECT
JobLevel,
PerformanceRating,
count(hn.EmployeeNumber) AS hc1,
SUM(count(hn.EmployeeNumber)) OVER (PARTITION BY JobLevel) AS hc2
FROM
hr.hr_num hn
LEFT JOIN hr.hr_cat hc ON
hn.EmployeeNumber = hc.EmployeeNumber
WHERE
Attrition = 'No'
GROUP BY 1, 2
ORDER BY 1, 2;

SELECT
JobLevel,
COUNT(hn.EmployeeNumber) AS emp_cnt,
LEAD(COUNT(hn.EmployeeNumber)) OVER (ORDER BY JobLevel) AS lead_cnt,
LAG(COUNT(hn.EmployeeNumber)) OVER (ORDER BY JobLevel) AS lag_cnt,
FROM
hr.hr_cat hc
LEFT JOIN hr.hr_num hn
ON
hc.EmployeeNumber = hn.EmployeeNumber
GROUP BY 1
ORDER BY 1;
*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.