union은 거의 한 달만에 작성하는 문법이었다. 그렇다보니 꽤나 버벅이긴 했지만, 금방 감을 되찾을 수 있었다.
sub query와 with 구문은 SQL 코드카타를 진행하면서 자주 사용했던 문법이다. 그래서 이번에 진행된 복습에서는 큰 어려움이 없었다. 다만 sub query 중 중첩 서브쿼리는 조금 헤맸다.서브쿼리 내부의 where절에 메인쿼리와 연결을 시켜주는 과정을 몰랐기 때문이다.
이번 복습으로 이 과정 또한 확실히 익힐 수 있었다.
SELECT empno, ename_ko, deptno
FROM emp
WHERE deptno = 11
UNION ALL
SELECT empno, ename_ko, deptno
FROM emp
WHERE deptno = 12
;
SELECT empno AS '사번',
ename_ko AS '이름',
if(employed=1, '재직 중', '퇴사') AS '재직여부'
FROM emp
WHERE employed=1
UNION ALL
SELECT empno AS '사번',
ename_ko AS '이름',
if(employed=1, '재직 중', '퇴사') AS '재직여부'
FROM emp
WHERE employed=0
;
1) 중첩 서브쿼리 - 비상관 서브쿼리
SELECT ename_ko AS '이름',
joblv AS '직급',
sal AS '급여'
FROM emp
WHERE sal > (
SELECT avg(sal)
FROM emp
)
;
2) 중첩 서브쿼리 - 상관 서브쿼리
SELECT ename_ko AS '이름',
joblv AS '직급',
sal AS '급여'
FROM emp AS a
WHERE a.sal > (
SELECT avg(b.sal)
FROM emp AS b
WHERE a.deptno = b.deptno
)
;
3) 스칼라 서브쿼리
SELECT empno AS '사번',
ename_ko AS '이름',
deptno AS '부서번호',
(SELECT dname FROM dept b WHERE a.deptno = b.deptno) AS '부서명'
FROM emp a
;
SELECT empno AS '사번',
ename_ko AS '이름',
deptno AS '부서번호',
(SELECT dname FROM dept b WHERE a.deptno = b.deptno) AS '부서명',
(SELECT avg(c.sal) FROM emp AS c WHERE a.deptno = c.deptno) AS '부서평균급여'
FROM emp a
;
4) 인라인 뷰 서브쿼리
SELECT e1.empno AS '사번', e1.ename_ko AS '이름', d.dname AS '부서명'
FROM (
SELECT empno, ename_ko, deptno
FROM emp
WHERE employed=1) AS e1
LEFT JOIN dept AS d
ON e1.deptno = d.deptno
;
SELECT empno AS '사번',
ename_ko AS '이름',
sal AS '급여',
dept_rank AS '부서별 급여 순위'
FROM (
SELECT empno,
ename_ko,
sal,
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS dept_rank
FROM emp
) AS ranked_emp
WHERE dept_rank = 1
;
WITH total_sal AS (
SELECT empno, ename_ko, deptno, (sal + comm) AS total_sc
FROM emp
)
SELECT a.empno AS '사원번호',
a.ename_ko AS '이름',
a.total_sc AS '총급여',
b.dname AS '부서명'
FROM total_sal AS a
JOIN dept AS b
ON a.deptno = b.deptno
;
WITH sal_rank AS (
SELECT empno,
ename_ko,
sal,
deptno,
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS dept_rank
FROM emp
)
SELECT empno AS '사원번호',
ename_ko AS '이름',
deptno AS '부서번호',
sal AS '급여'
FROM sal_rank
WHERE dept_rank=1
;
SQL 외에도 파이썬 기초 알고리즘, PANDAS 기초에 대해서 복습하는 시간을 가졌다. 일단 오늘은 SQL에 집중하고, 내일 마침 라이브세션도 하나 뿐이기에 파이썬과 PANDAS 복습을 집중해서 진행하려고 한다.
마치며 : 연말이 되어가면서 마음이 왠지 모르게 들뜨는 듯하다. 이따금씩 공부를 하다가도 집중력이 흐트러지거나 하는데, 정신 차리고 공부에 집중할 수 있도록 해야 한다.
집중력을 높이는 데에 찬물로 세수하는 것이 도움이 된다고 한다. 앞으로 공부를 하다가 집중이 안 된다면 빠르게 화장실로 가서 냉수 마찰을 해줘야겠다.
공부를 한 후 짧은 휴식을 취하는 것도 좋다고 한다. 사람이 무언가에 집중할 수 있는 시간은 그리 길지 않다. 성인의 경우, 일반적으로 20분 정도라고 한다. 일정 시간 집중해서 공부를 했다면 잠시 쉬었다가 다시 공부하는 것이 가장 효율적이다.
오래 공부하려면 전략을 잘 짜야 한다. 우선 가능한 오래 집중해서 공부하다가 잠시 휴식을 취할 것! 다가오는 프로젝트까지 잘 공부해서 좋은 결과를 낼 수 있도록 노력하자!