PostgreSQL(6)

yoodeit·2023년 1월 27일
0

PostgreSQL Table Aliases

이걸 배우면 쿼리 실행 동안에 테이블을 별명으로 부를 수 있다.

table_name AS alias_name;

위와 같은 문법으로 하면 된다.
table_name이 alias_name이라는 별명으로 불리게 된다는 내용임.
Column aliases도 그랬겠지만, As 키워드는 선택적이다.
해도 되고, 안해도 됨.

table_name alias_name;

글면 이걸 어따 쓸까요?ㅋㅋ
가뜩이나 쿼리도 긴데 테이블명까지 길어봐요. 읽기 싫겠죠?

a_very_long_table_name.column_name

읽기 싫죠. 여기서 굉장히긴 테이블명을 짧게 줄일 수도 있다~

a_very_long_table_name AS alias

그러면 얼마나 간단해져요.

alias.column_name

join에도 유용합니다. 바로 self join에서ㅇㅇㅇ

만약에 스스로를 join할 때는 반드시 table aliases를 써야 한다.
안그러고 같은 테이블을 여러번 참조할 경우에 쿼리결과에서 에러난다.
예를 들면 이렇게 아래와 같이 쓸 수 있다.

SELECT
    e.first_name employee,
    m .first_name manager
FROM
    employee e
INNER JOIN employee m 
    ON m.employee_id = e.manager_id
ORDER BY manager;

PostgreSQL INNER JOIN

요런 상황이라 칩시다.

여기서 테이블 A와 테이블B에서 pka fka에서 교집합만 끌어오고 싶을 때.

SELECT
	pka,
	c1,
	pkb,
	c2
FROM
	A
INNER JOIN B ON pka = fka;

근데 교집합을 원하는 대부분의 경우에는 테이블이 다르더라도 칼럼명이 같을 것인데, 그렇다고 같은 칼럼명을 그대로 참조해버리면 에러가 난다.
그런 에러를 피하기 위해서는 특정 테이블의 칼럼이라는 걸 명시해주어야 함.

table_name.column_name

실제로는 alias를 활용해서 더 짧게 잘 쓸걸?

예시들

이렇게

SELECT
	customer.customer_id,
	first_name,
	last_name,
	amount,
	payment_date
FROM
	customer
INNER JOIN payment 
    ON payment.customer_id = customer.customer_id
ORDER BY payment_date;

음... 그리고 두 테이블 모두 customer_id 라는 칼럼을 가지고 있으므로, USING이라는 문법도 사용해볼 수 있다.

SELECT
	customer_id,
	first_name,
	last_name,
	amount,
	payment_date
FROM
	customer
INNER JOIN payment USING(customer_id)
ORDER BY payment_date;

만약에 세 개의 테이블을 INNER JOIN 해야 하면 어떡하지??
그러면 두 번째 INNER JOIN문을 첫 번째 INNER JOIN문 뒤에 붙이면 된다.

SELECT
	c.customer_id,
	c.first_name customer_first_name,
	c.last_name customer_last_name,
	s.first_name staff_first_name,
	s.last_name staff_last_name,
	amount,
	payment_date
FROM
	customer c
INNER JOIN payment p 
    ON p.customer_id = c.customer_id
INNER JOIN staff s 
    ON p.staff_id = s.staff_id
ORDER BY payment_date;

PostgreSQL LEFT JOIN

profile
Yoodeit

0개의 댓글