(TIL) 2020-11-29 기록
업데이트:
오늘 한 일
- 거의 어제 오늘 해서 하루 내내 SELECT문에 대해서 배웠다. 좀 더 멋지게 말하자면 데이터 질의어에 대해서 배웠다.
- 칼럼 이름을 바꿔서 출력하는 법에 대해 배웠다.
column AS 'name'
이렇게 하면 된다.
- 그리고
CONCAT()
함수에 대해 배웠다. 이 함수는 여러 개의 칼럼을 하나의 칼럼으로 합쳐 준다. 띄어쓰기 같은 건 없기 때문에 예쁘게 보이고 싶으면 중간에 ‘ ‘를 하나씩 넣어줘야 한다. - Aggregate Functions에 대해 배웠다. 이 함수들은 여러 개의 데이터를 받아 하나의 값을 뱉어내는 함수들이다. 기본적인 예로
SUM()
,AVG()
,MIN()
,MAX()
등이 있다. - '’와 ““가 다르다. ‘‘는 말 그대로 문자열을 나타내는 것이고 ““는 칼럼 이름을 나타내는 것이다. 둘을 혼동하면 큰일난다.
AND
와OR
가 특이하게 작동한다.OR
이 있으면 무조건OR
양 옆부터 따진 다음OR
연산이 적용 된다. 그냥 마음 편하게 괄호를 쳐주면 연산 우선순위를 씹을 수 있다.COALESCE()
함수에 대해서도 배웠다.COALESCE(column, value)
이런 식으로 해주면 해당 칼럼 내에 있는 NULL값을 가진 행들을 모두 정해준 value로 치환해준다. NULL이 있으면 안 되는 table을 다룰 때 쓰면 좋다.- NULL은 다른 어떠한 것과 비교 연산을 해도 반환값이 NULL이다. 즉
NULL=NULL
도true
가 아니라NULL
이라는 것이다. 그래서 어떤 값이 null인지 아닌지 알아보려면IS
연산자를 사용해야 한다. - ~이하 ~이상 같은 범위 조건을 걸 때에 부등호와
AND
연산자의 향연을 보기 싫다면BETWEEN ~ AND ~
구문을 쓰면 좋다. IN
연산자는A IN (A,B,C,...)
와 같은 식으로 쓰며 A가 뒤의 괄호 안의 목록에 있는지 없는지 불리언 값을 반환한다.LIKE
연산자는 문자열을 찾아야 하는데 내가 정확히 무엇을 찾고 있는지 모를 때 쓴다. 연산자 뒤에 패턴을 입력하는데 ‘s%’이런 식으로 쓴다. 저 패턴은 s로 시작하는 모든 문자열이다. %는 갯수, 어떤 문자이든지 상관없는 와일드카드이고 _는 한 글자만을 말한다.- 그 다음에 날짜를 다루는 법에 대해서도 배웠는데 이 부분이 살짝 복잡했다.
- 일단 Date와 Timestamp로 나뉘는데 Date는 연월일로 구성된 자료형이고 Timestamp는 1800-01-01년부터 시간이 얼마나 흘렀는지를 밀리초 단위로 보여주는 자료형이다.
- date형을 내가 원하는 방식으로 포매팅하려면
TO_CHAR(date, 'yyyy/mm/dd')
이런 식으로 문자열로 포맷팅 할 수 있다. 사용할 수 있는 패턴은 postgresql 홈페이지에 가보면 찾을 수 있다. - 그리고 시간은 차이를 계산할 수 있는데 - 연산자를 쓰면 그 시간 차이를 일 단위로 보여준다.
AGE()
함수도 있다. 매개변수를 하나를 받으면 이것을 생년월일로 받아 오늘 날짜 기준으로 몇 살인지 보여주고 매개변수 두 개를 입력하면 두 번째 매개변수가 생년월일이 되고 첫 번째 매개변수가 기준일이 되어 나이를 계산해준다. 이때 나이는 일 수까지 다 나온다.EXTRACT()
함수를 쓰면 연월일로 나타나있는 정보에서 원하는 것만 추출할 수 있다. 예를 들어 연도를 추출하고 싶다면EXTRACT(YEAR FROM '1992-09-27')
이렇게 쓰면 된다.- 그리고
DATE_TRUNC()
함수를 쓰면 시간을 내림할 수 있다. 무슨 말이냐 하면DATE_TRUNC('year', date '1992/11/31')
이렇게 하면 1992년의 첫 번째 날, 즉 1월 1일을 반환한다. 두 날짜를 비교하는데 연, 월, 일을 동일하게 맞추고 비교하고 싶을 때 쓰면 좋다. DISTINCT
에 대해서도 배웠다. 이 키워드를 칼럼 이름 앞에 쓰면 중복되는 데이터는 보여주지 않는다.- 그리고 또 JOIN, USING 키워드에 대해서도 배웠고 GROUP BY와 GROUP에 대해 필터링을 할 수 있는 HAVING 키워드에 대해서도 배웠다.
- 그리고 OVER 키워드와 PARTITION, RANGE를 이용한 windows function에 대해서도 배웠다.
- 또 View를 생성하는 법에 대해서도 배우고 Index의 종류, 알고리즘 종류, 언제 어떻게 쓰면 좋은지에 대해 배웠다.
- 그리고 Subquery에 대해 배우고 Subquery에 대해 JOIN을 하는 것과 WHERE을 해서 필터링 하는 것의 퍼포먼스 차이에 대해 배웠다.
- 데이터 질의어 강의를 마치고 데이터 정의어를 배우기 시작했다. DB 생성하는 법, 스키마 생성하는 법 그리고 Role과 User를 생성하고 권한을 부여하고 박탈하는 법에 대해 배웠다.
내일 할 일
- 계속 데이터 정의어를 배우면서 DB 관리에 대해 배우고 아마 곧 DB 설계를 배울 것 같다. 짧은 시간에 기술 하나를 습득하려고 하니 아주 힘들다.
댓글남기기