본문 바로가기
AI/데이터베이스\SQL

[SQL / postgreSQL] 고급 SQL명령 ( TimeStamp, TO_CHAR, 서브쿼리(Sub-query), Self-Join)

by 까다로운오리 2022. 3. 8.

Timestamp

TIME - time

DATE - date

TIMESTAMP - date, time

TIMESTAMPTZ- date, time, timezone

 

 

TIMEZONE -표준시간지역

https://www.postgresql.org/docs/12/sql-show.html

 

 

NOW - 현재

TIMEOFDAY - 시계시각

CURRENT_TIME - 현재 시간

CURRENT_DATE - 현재 날짜

 

 

EXTRACT() - 추출함수

: 값의 서브 컴포넌트를 추출하되 년,월,일,분기별로 추출 가능하다.

 

EXTRACT(YEAR FROM date_col)

 

 

 

AGE() - 타임스탬프 내에서 현재까지의 시기를 계산해서 알려준다.

AGE(date_col)

 

TO_CHAR() - 원하는 형태의 날짜, 시간 출력 가능 (첫 매개변수로 날짜 열을 입력하고, 쉼표를 입력한 뒤 문자열 매개변수로 원하는 문자열을 입력한다.)

TO_CHAR(date_col, 'mm-dd-yyyy')

https://www.postgresql.org/docs/12/functions-formatting.html

 

 

 

Math Fucntion

https://www.postgresql.org/docs/12/functions-math.html

 

9.3. Mathematical Functions and Operators

9.3. Mathematical Functions and Operators Mathematical operators are provided for many PostgreSQL types. For types without standard mathematical conventions (e.g., date/time …

www.postgresql.org

 

 

 

 

String Functions

https://www.postgresql.org/docs/12/functions-string.html

 

9.4. String Functions and Operators

9.4. String Functions and Operators 9.4.1. format This section describes functions and operators for examining and manipulating string values. Strings in …

www.postgresql.org

 

 

Sub-query

다른 쿼리의 결과에 대한 쿼리를 실행하거나 다른쿼리의 결과를 사용할 수 있다.

 

1.단독 쿼리를 얻고자 서브쿼리를 사용할 수 있다.

(서브쿼리의 내용을 먼저 실행한다. 서브쿼리의 결과를 이용해 WHERE절에서 조건을 추가할 수 있다.)

 

2. EXISTS를 사용하여 서브쿼리를 작성한다.

SELECT first_name, last_name
FROM customer as c
WHERE EXISTS
(SELECT * 
 FROM payment as p
 WHERE p.customer_id = c.customer_id
 AND amount > 11)

EXISTS는 서브쿼리에 적용하는 함수로, 두 서브쿼리를 비교하여 해당 조건에 맞는 값을 반환하는 함수이다.

NOT EXISTS는 두 서브쿼리를 비교하여 해당 조건에 부합하지 않는 값을 반환하는 함수이다.

 

EXISTS는 교집합, NOT EXISTS는 차집합 이라고 보면 된다.

 

IN과 JOIN과 쓰임이 비슷한데,

IN보다는 EXISTS가 더 빠르고 (중복이 적을 경우) JOIN이 EXITS보다 빠르다고 한다.

 

참고 : https://yahwang.github.io/posts/35

 

 

Self-Join

 

SELECT tableA.col, tableB.col
FROM table AS tableA
JOIN table AS tableB ON
tableA.some_col = tableB.other_col

같은 표 내 여러 열 속여러 값을 비교할 때 유용하다. 

같은 표 이름을 두 이름으로 지정하여 셀프 조인이라고 할 수 있는데 table, tableA, tableB는 모두 다 같은 테이블을 의미한다.

 

예시를 들어 self join을 설명하면

만약 다음과 같은 마니또 테이블이 있다고 가정하자.

마니또
id 이름 마니또_id
1 신짱구 2
2 김철수 3
3 이훈이 1

 

만약 마니또 테이블을 이름과 마니또이름으로 변경하 싶다면

SELECT 마니또A.이름, 마니또B.이름 AS 마니또이름
FROM 마니또 AS 마니또A
JOIN 마니또 AS 마니또B ON
tableA.id = tableB.마니또id

으로 바꿀 수 있다.