데이터/SQL
[SQL 기초] JOINS
성장하기
2023. 4. 7. 22:08
AS 문
- ‘alias’ : 열이나 결과에 별칭을 주는 구문
- 출력의 가독성을 위해 사용함
- AS 뒤의 이름으로 output에 출력됨
SELECT column AS new_name
FROM table
SELECT SUM(column) AS new_name
FROM table
- AS 뒤의 별칭은 가장 마지막에 할당되기 때문에 WHERE나 HAVING문에서 별칭을 사용할 경우 오류가 발생한다.
INNER JOIN
- JOIN 연산은 여러 테이블을 하나로 결합하는 함수
- 결합된 테이블의 중 하나에만 있는 정보를 처리하는 방법에 따라 여러 종류의 JOIN으로 구분됨
- 두 테이블을 모두 충족하는 레코드 세트를 결과로 반환
SELECT * FROM table_a
INNER JOIN table_b
On table_a.col_match = table_b.col_match
- INNER JOIN은 대칭으로, 테이블 이름의 앞 뒤를 바꿔도 동일하게 작동한다.
- 두 테이블 안에서 일치하는 것을 찾아냄
- 모든 열을 선택하기 때문에 on 뒤의 키 컬럼의 값이 중복되거나 두번 반복됨
- 반복을 없애기 위해서는 SELECT 절에서 지정해줘야함.
- JOIN의 기본값이 INNER JOIN이기에, JOIN만 써도 INNER JOIN으로 처리되나, 가독성을 위해 다 적어두는 것이 좋다.
- 한 테이블에서만 존재하는 컬럼명을 조회하는 경우에는 어느 테이블을 참조하는 지 작성하지 않아도 되지만, 두 테이블에 전부 존재하는 컬럼명을 조회하는 경우에는 어떤 테이블을 참조하는 지 작성해야함.
SELECT payment_id, payment.customer_id, first_name, email
FROM payment
INNER JOIN customer
ON payment.customer_id = customer.customer_id
OUTER JOIN
- 두 테이블 중 하나만 있는 값을 어떻게 처리할 지에 대해 달라짐
FULL OUTER JOIN
- 모든 것을 포함함
SELECT FROM table_a
FULL OUTER JOIN table_b
ON table_a.col_match = table_b.col_match
- 빈 자리에 자동으로 null을 입력하여 값이 없음을 나타냄
FULL OUTER JOIN with WHERE
- INNER JOIN과 완전히 대치되는 개념
SELECT * FROM table_a FULL OUTER JOIN table_b ON table_a.col_match = table_b.col_match WHERE table_a.id IS null OR table_b.id IS null
LEFT OUTER JOIN
- 왼쪽 테이블에 있는 레코드 셋을 출력, 오른쪽 테이블에 없다면 null로 채움
- 대칭이 아님, 순서가 중요하다.
- LEFT OUTER JOIN = LEFT JOIN
SELECT * FROM table_a
LEFT OUTER JOIN table_b
ON table_a.col_match = table_b.col_match
WHERE를 사용하여 table_a에만 있는 레코드를 가져올 수 있음
SELECT * FROM table_a
LEFT OUTER JOIN table_b
ON table_a.col = table_b.col
WHERE table_b.id IS null
RIGHT JOIN
- 기본적으로 LEFT JOIN과 동일하지만, 테이블이 서로 바뀐다는 점에서만 다름
- RIGHT OUTER JOIN = RIGHT JOIN
UNION
- 2개 이상의 SELECT문을 합칠 수 있음
- 여러번 사용하여 더 많은 테이블을 붙일 수 있음
- UNION은 두 결과를 직접 붙인다는 차이
- 열이 바로 위에 쌓일 수 있게끔 논리적인 구조가 같아야함
SELECT column_name FROM table1
UNION
SELECT columns_name FROM table2
참고자료
A Visual Explanation of SQL Joins
I thought Ligaya Turmelle's post on SQL joins [http://www.khankennels.com/blog/index.php/archives/2007/04/20/getting-joins] was a great primer for novice developers. Since SQL joins appear to be set-based, the use of Venn diagrams [http://en.wikipedia.org/
blog.codinghorror.com
Talend | A Complete, Scalable Data Management Solution
Talend Data Fabric offers a scalable, cloud-independent data fabric that supports the full data lifecycle, from integration and quality to observability and governance.
www.talend.com
https://www.udemy.com/course/best-sql-2022/