<14:30 5교시> 점심 전까지의 복습
복습 1. GROUP BY의 내용
특정 row를 그룹으로 묶어야 하는 경우 = ~~별, ~~인 특징에 대해 등등
공통된 특징으로 묶일 수 있는 row들은 GROUP BY를 활용해서 묶어준다.
-- 부서별 급여의 총합을 출력해보세요
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno;
복습 2. HAVING 절의 사용 복습
위에서 만들어진 그룹의 리스트 중에서 그룹을 배제하는 방법은 HAVING 절을 사용하기
-- 부서별 급여의 총합을 출력하되, 급여의 총합이 7000이상 부서만 출력
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal) >=7000;
복습 3. SELECT문의 실행 순서 복습
별칭이 들어가는 순서를 아는게 중요하다!
예를들어
①SELECT deptno, SUM(sal) sum_sal
②FROM emp
③GROUP BY deptno
④HAVING sum_sal>=7000;
이문장은 에러가 난다!
왜냐하면, 실행 순서가 ② ③ ④ ①이어서 HAVING 절에서 SUM_SAL을 모르는 상태에서 값을 비교를 할 수가 없어서 에러가 나기 때문이다.
복습 4. TABLE JOIN 복습
서로 다른 테이블에서 같은 이름의 칼럼이 존재할 때, 두 개의 테이블의 칼럼을
테이블이름.칼럼명으로 명확하게
각 테이블의 deptno를 정의해줘서 칼럼이 애매모호하게 구분된 상태를 해결한다.
SELECT 되는 값은 서로 다른 테이블의 같은 칼럼명을 가진 녀석 중 하나면 된다.
ex) emp.deptno = dept.deptno 인 상황에서 deptno를 select 하려면
select emp.deptno 도 되고, select dept.deptno도 된다.
예제)
■ JOIN 조건의 복잡도를 해결하는 방법
ㅇANSI(미국국가표준기구) JOIN : JOIN 조건을 (INNER) JOIN ___ ON 문구를 써서 빼준다.(INNER는 생략 가능)
ㅇ테이블 명에 별칭 붙이기
실무에서 테이블명은 좀 긴 편이다. 그때마다 JOIN 문구 안에서 테이블 이름을 다 반복해버리면 복잡도가 높아지기 때문에 이를 해결하기 위해 테이블 이름에 별칭을 붙인다.
테이블 이름에 별칭을 붙이는 방법은 from 에서 테이블 이름을 참조할 때 테이블 이름 바로 뒤에 붙이고자 하는 별칭을 띄어쓰기 한 칸하고 붙여주면 된다. (emp e, dept d 처럼)
<15:30 6교시> SELF JOIN, OUTER JOIN 학습
■ SELF JOIN
이번에는 하나의 테이블을 자기 자신과 JOIN 시켜서 데이터를 조회하는 방법을 시도해 보았다.
일단 혼자 시도하느라 삽질이 꽤 이어졌다.
힌트는 emp 테이블을 자기 자신과 JOIN 시키라는 거라고 말씀해주셨다.
SQL> --각 사원의 이름과 메니저의 이름을 출력하세요.
SQL> select ename "사원", ename "메니저"
2 from emp e, emp m
3 where e.empno=m.empno=e.mgr;
where e.empno=m.empno=e.mgr
*
ERROR at line 3:
ORA-00933: SQL command not properly ended
SQL> select ename "사원", ename "메니저"
2 from emp e, emp m
3 where e.mgr=e.empno;
select ename "사원", ename "메니저"
*
ERROR at line 1:
ORA-00918: column ambiguously defined
SQL> select e.ename "사원", m.ename "메니저"
2 from emp e, emp m
3 where e.mgr=e.empno;
no rows selected
SQL> select e.ename "사원", m.ename "메니저"
2 from emp e, emp m
3 where m.mgr=e.empno;
사원 메니저
-------------------- --------------------
FORD SMITH
BLAKE ALLEN
BLAKE WARD
KING JONES
BLAKE MARTIN
KING BLAKE
KING CLARK
BLAKE TURNER
BLAKE JAMES
JONES FORD
CLARK MILLER
11 rows selected.
SQL> select e.ename "사원", m.ename "메니저"
2 from emp e, emp m
3 where e.mgr=m.empno;
사원 메니저
-------------------- --------------------
FORD JONES
JAMES BLAKE
TURNER BLAKE
MARTIN BLAKE
WARD BLAKE
ALLEN BLAKE
MILLER CLARK
CLARK KING
BLAKE KING
JONES KING
SMITH FORD
11 rows selected.
힌트와 위에서 배운 테이블의 별칭 넣기를 적용하려고 시도했는데,
처음에는 뭘 대입해야하는건지 헷갈려서 틀리고, 그러다가 대입하는 것의 좌우를 헷갈려서 헤매고, 반대로 입력한것을 알고 난 후에야 좌우를 이해해서 제대로 구할 수 있었다.
■ OUTER JOIN : 조회한 결과에 NULL 인 데이터를 표시하고 싶을 때 사용
LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 방식이 있다.
RIGHT OUTER JOIN
<17:30 7교시>
emp 테이블과 salgrade 테이블의 JOIN
테이블 3개를 조인시키기!!!!! 야호!!! 혼자 힘으로 해냈다!!!!!(맞으려나 모르겟찌만!!!! 캬캬)
e. 랑 s.을 생략해도 되던데 왜 되는지 아직 모르겠따!
→ 이건 sal, losal, hisal 얘네는 ambiguous하지 않으니까 e. s.을 쓰지 않아도 되고, 개발자로서 습관 들일려면 이렇게 생략하고 쓰는게 좋다고 하셨다!
<17:30 8교시>
오늘 한 거 Velog 보면서 따라서 복습해보기 + 나는 노트 정리도 하는 중
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 11/26 오후 기록 004-2 (0) | 2024.11.26 |
---|---|
자바 풀 스택 11/26 오전 기록 004-1 (0) | 2024.11.26 |
자바 풀 스택 11/25 오전 기록 003-1 (0) | 2024.11.25 |
자바 풀 스택 11/22 오후 기록 002-2 (0) | 2024.11.22 |
자바 풀 스택 11/22 오전 기록 002-1 (0) | 2024.11.22 |