오랜만에 블로깅을 한다. 그동안 내가 게을러진 것은 아니다. 단순히 첫 직장에 대한 적응 및 그 적응을 위한(회사 업무에 대한) 공부를(독서, 강의 듣기) 하느라 블로깅을 할 시간이 없었다.(깃헙은 그래도 꾸준히 했다.) 그중 첫 번째로 난관에 부딪친 것이 SQL이다..
입사하고 여기서 이렇게 엄청난 길이의 SQL문은 처음 봤다.. 국비나 학교에서 사용하는 SQL문은
간단한 CRUD(select, create, insert, delete ..)밖에 없었는데 SQL문이 거의 자바 코드처럼 보였다.
그래서 찾아 본 결과 여기저기 블로그에서 'SQL첫걸음'을 읽는 거 같아 보였고 바로 구매했다.
하루 30분씩 36일이면 다읽는 양이지만 난 일주일 중 하루 이틀씩 보면서 36일 정도 걸린 거 같다.
앞부분은 거의 아는 내용이여서 사실상 엄청 오래 걸린 셈이다..ㅠㅠ
다 읽으니 SQL도 결국 큰 숲으로 보면 별거 아닌 거라 느꼈다. ((우리 회사 기준으로 느낀 것)) SQL문이 길어지는 것은 단지 select 문의 컬럼이 많은 것, 조인 (inner / outer), 서브 쿼리(인라인 뷰, 스칼라 서브 쿼리, 상관 서브 쿼리....), Union/ UnionAll 같은 것들이 결함 되는 것에 불과하다는 것이다. 2개 동안, 아주 짧은 시간이지만 유지보수라는 업무의 특성으로 SQL문을 큰 숲으로 먼저 보고 그 다음 나무로 보면서 파악하는 것이 중요하다고 많이 느꼈다. 특히 내가 그동안 받은 일들은 where문을 위주로 많이 보면 해결되는 것들이었다.
이 책을 읽고 SQL문에 대한 어느 정도의 자신감이 올라왔고 이와 유사한 책(데이터 베이스 첫걸음, 데이터베이스를 지탱하는 기술)도 읽어 볼 예정이다. 아래는 이 책을 통해 배운 것을 잊어버리지 않게 중요하게 표시 해 둔 것들이다.
1. desc는 sql 명령이 아니다.
2. char형은 언제나 고정길이로 최대 길이보다 작은 문자열을 저장할 경우 공백 문자로 채워진다.
3. AND는 OR에 비해 우선순위가 높다.
4. LIMIT은 Mysql과 PostgreSQL에서 사용할 수 있는 문법
5. case문으로 데이터 변환
6. 오라클 NVL ? value가 null인지 아닌지 비교할때 사용
7. 오라클 decode(A, B, C, D) : A가 B이면 C 출력, 아니면 D출력
8. Mysql에서와 Oracle에서의 update처리가 다르다.
- oracle에서는 set 구에 기술한 식의 순서가 처리에 영향을 주지 않는다
- mysql은 갱신식 안에서 열을 참조할 때는 처리 순서를 고려할 필요가 있다.
9. 내부 처리 순서 : from 구 -> where 구 -> group by 구 -> having 구 -> select 구 -> order by 구
10. group by에 지정한 열 이외의 열은 집계 함수를 사용하지 않은 채, select 구에 기술하면 안 된다.
10. '=' 연산자를 사용하여 비교할 경우에는 스칼라 값끼리 비교할 필요가 있다.
11. 오라클에서 limit사용 못하는 한계 대처 방법(rownum)
select * from (
select * from sample1 order by a desc
) b
where rownum <= 2;
12. 상관 서브 쿼리 : 부모 명령과 자식인 서브 쿼리가 특정 관계를 맺어야 상관 서브 쿼리라고 부를 수 있다
13. alter table로 할 수 있는 일은 크게 두 가지로 분류된다.
- 열 추가, 삭제, 변경
- 제약 추가, 삭제
14. 이진트리에서는 유일성을 가지는 경우에만 유용(같은 값을 가지는 노드를 여러 개 만들 수 없다는 특성)
15. 뷰는 가상의 테이블이다. / SELECT명령을 객체로서 이름 붙여 관리하는 것 / 저장공간을 가지지 않는다.
16. 제2 정규형은 기본키에 대한 테이블 분할이다.
17. 제3 정규형은 기본키 이외의 부분에서 중복이 없는지와 관련된 테이블 분할이다.
18. 정규화의 목적은 하나의 데이터가 한 곳에 저장되도록 하기 위함이다. (여러 곳에서 존재하지 않도록)
19. mysql에서 오토 커밋하지 않도록 하는 방법 : start transcation 명령을 통해 가능
'서평' 카테고리의 다른 글
[서평] 쏙쏙 들어오는 함수형 코딩 (1) | 2022.05.02 |
---|---|
[서평] 프로그래머의 뇌 (The Programmer's Brain) (0) | 2022.04.03 |
가상 면접 사례로 배우는 대규모 시스템 설계 기초 (0) | 2021.07.31 |
나는 LINE 개발자입니다. (0) | 2021.03.28 |
행복한 프로그래밍 (0) | 2020.04.19 |