발자취

#12 역정규화, DML 실습 4 본문

3-1/데이터베이스

#12 역정규화, DML 실습 4

해린 2023. 8. 12. 04:15

#01 역정규화

 - 정규화를 포기하고 중복을 허용하는 경우
 - 속도 향상을 위해 사용
 - 예
    - 샤딩, VLDB
    - 기사의 대댓글을 관리하기 위해 기사테이블 - 댓글테이블 - 대댓글테이블의 형태로 테이블을 둠. 이러면 대댓글 관리 속도가 빨라짐!
 
 

#02 DML etc. 실습

1. Like 검색

last_name이 ‘sample’인 레코드를 찾아 조회했습니다.
 

like 검색과 ‘%’ 기호를 사용하여 last_name이 ‘sam’으로 시작하는 레코드를 찾아 조회했습니다.
 

last_name이 ‘sam’으로 끝나는 레코드를 찾아 조회했습니다.
 

last_name의 처음, 끝, 중간에 ‘sam’이 들어가는 레코드를 찾아 조회했습니다.
 

last_name이 ‘sam’으로 시작하고 6글자인 레코드를 찾아 조회했습니다.
 

last_name이 ‘sam’으로 끝나고 6글자인 레코드를 찾아 조회했습니다.
 

last_name이 ‘sam’이 들어가고, ‘sam’의 앞에 2자, 뒤에 2자가 들어가는 글자인 레코드를 찾아 조회했습니다. 결과는 없었습니다.
 
2. insert into select

employees 테이블 생성 쿼리를 조회했습니다.
 

위에서 확인한 쿼리를 그대로 사용하여 ‘employees_new’라는 이름의 테이블을 새로 생성합니다.
 

employees_new 테이블에 employees 테이블의 레코드를 그대로 삽입해줍니다.
 

‘employees’ 테이블과 ‘employees_new’ 테이블의 레코드 개수를 조회해보면 동일한 것을 확인할 수 있습니다. 제대로 삽입된 것입니다.
 

‘employees_new’ 테이블의 레코드를 출력해보아도 내용이 동일하게 들어간 것을 확인할 수 있습니다.
 
3. create table as select

MySQL에서 ‘create table as select’를 사용하면 존재하지 않는 테이블에 다른 테이블의 레코드를 검색해서 넣는 것도 가능합니다.
‘employees_sample’이라는 존재하지 않는 테이블에 다른 테이블의 레코드를 넣어줬습니다.
 

정상적으로 삽입된 것을 확인할 수 있습니다.
 
4. View

‘sample’이라는 이름을 가진 임시테이블 view에 다른 테이블의 레코드를 검색해서 넣어줬습니다.
 

‘show tables;’ 쿼리를 입력해보면 ‘sample’이 존재하는 것을 확인할 수 있습니다.
 

‘drop view’ 한 뒤, 다시 테이블을 조회해보면 사라진 것을 확인할 수 있습니다.
 
5. NULL 함수

‘salaries’ 테이블의 컬럼 설정을 확인합니다.
 

salary 컬럼이 null을 허용하도록 변경합니다.
 

‘salaries’ 테이블에 salary 컬럼의 값이 null인 레코드를 새롭게 추가합니다.
 

emp_no가 2인 salary 컬럼의 값을 조회했습니다.
 

ifnull()을 사용하여 salary 컬럼값이 null이면 0으로 대체하도록 만들어 조회했습니다.
 

salary 컬럼의 평균을 구해봤습니다.
위의 경우는 null값을 null로 인식한 결과이고, 아래의 경우는 null값을 0으로 인식한 결과입니다. 평균값에 약간의 차이가 있는 것을 확인할 수 있습니다.