SQL Select문 정리! - (Left Join, Inner Join, Union)

김지환·2023년 5월 6일
0

sql

목록 보기
3/5
post-thumbnail

안녕하세요! 오늘은 Join, Union을 다루어 보도록 하겠습니다!😃


Join 👫

JOIN은 SQL에서 두 개 이상의 테이블에서 데이터를 가져오기 위해 사용되는 연산자입니다. JOIN을 사용하면 각 테이블에서 원하는 데이터를 검색하고 필요한 조건에 따라 데이터를 결합할 수 있습니다.

JOIN은 보통 SELECT 문에서 사용되며, FROM 절에서 사용됩니다. JOIN을 사용하면 조인 대상이 되는 두 개 이상의 테이블을 결합하고, WHERE 절에서는 조인 조건을 지정합니다.

INNER JOIN: 두 개의 테이블에서 조인 조건에 일치하는 데이터만 가져옵니다.

LEFT JOIN: 왼쪽 테이블의 모든 데이터와 오른쪽 테이블에서 일치하는 데이터를 가져옵니다. 오른쪽 테이블에 일치하는 데이터가 없으면 NULL 값이 반환됩니다.

제가 JOIN을 사용해보면서 느낀점은 LEFT JOIN보다는 INNER JOIN이 더 활용성 있게 사용하게 되는 것 같습니다.

예를 들어 ORDERS라는 테이블과 USERS 라는 테이블에 같은 필드명인 user_id 필드가 존재한다고 할 때 Inner Join을 사용해서 두 테이블을 연결할 수 있습니다.

SELECT * FROM Orders o
INNER JOIN Users u
ON o.user_id = u.user_id;

orders o, users u로 표시한 것은 저번에 Alias를 활용하여 어떤 테이블의 user_id 인지 구분하고 쿼리를 작성하기 위함입니다.

이번에는 USERS와 ORDERS의 공통 필드인 user_id를 이용해서 두 테이블을 연결하고 결과값은 사용자 이름과 구글메일만 사용하는 데이터를 불러 보겠습니다.

SELECT u.name, count(u.name) AS Count_name FROM Orders o
INNER JOIN Users u
ON o.user_id = u.user_id 
WHERE u.email like '%gmail.com'
GROUP BY u.name

1. FROM Orders o: Orders 테이블의 데이터를 전부 가져오고 o라는 별칭(ALIAS)을 붙입니다.

2. INNER JOIN Users u ON o.user_id = u.user_id : Users 테이블을 Orders 테이블에 연결(Join)하는데, Orders 테이블의 user_id와 같은 데이터 값인 Users 테이블의 user_id를 연결합니다. Users 테이블에도 u라는 별칭(ALIAS)을 붙입니다.

3. WHERE u.email like '%gmail.com': Users 테이블 email 필드값이 gmail.com으로 끝나는 값을 불러옵니다.

4. GROUP BY u.name: Users 테이블의 name값이 같은 값들을 묶어줍니다.

5. SELECT u.name, count(u.name) AS Count_name : Users 테이블의 name필드와 name 필드를 기준으로 묶여진 갯수를 보여줍니다.

위 쿼리는 FROM → JOIN → WHERE → GROUP BY → SELECT 순서로 진행됩니다.

AS를 사용하면 최종 출력 필드명 count(u.name)을 원하는 필드명으로 변환하여 출력할 수 있습니다.


Union 🌉

UNION은 둘 이상의 SELECT 문의 결과를 결합하여 하나의 결과 집합을 반환하는데 사용됩니다. 각 SELECT 문은 같은 열 수를 가져와야 합니다. 이러한 열은 UNION 연산자에서 결합됩니다.

SELECT column1, column2, column3 FROM Table1
UNION ALL
SELECT column1, column2, column3 FROM Table2;

위 쿼리는 Union을 사용할 때에 기본적인 틀이며 Table1 과 Table2의 결과를 중복 허용하여 결합합니다.

이해하기 쉽게 가장 쉬운 예시를 만들어 보여드리겠습니다.

Fruit1

name price
apple 1.99
orange 2.49
banana 0.99
pear 1.79
kiwi 3.99

Fruit2

name price
orange 2.49
banana 0.99
grape 2.99
peach 1.99
mango 4.99

위에 'Fruit1' 과 'Fruit2' 라는 2개의 테이블이 있다고 가정했을 때 아래의 쿼리문을 사용한다면

SELECT name, price FROM fruit1
UNION
SELECT name, price FROM fruit2;

밑의 결과 테이블을 확인할 수 있습니다.

Result

name price
apple 1.99
banana 0.99
grape 2.99
kiwi 3.99
mango 4.99
orange 2.49
peach 1.99
pear 1.79

orange와 banana가 중복되어 나타나지 않으며, UNION 연산자를 사용하여 두 개 이상의 테이블을 결합할 수 있습니다.

Union을 사용시 Order by와 같은 내부 정렬이 적용되지 않습니다!😱


위 두 종류의 쿼리를 다루어보면서 Join은 다수의 테이블에서 데이터를 검색하거나 연결할 때 사용된다는 것을 알게 되었습니다. Join을 사용할 때에는 테이블 간의 관계를 미리 잘 파악해야하며 적절하게 사용해야 할 것입니다. 또한 Union을 사용하여 중복된 데이터 값을 제거할 수 있지만 이 또한 사용하는 목적이나 용도에 따라서 사용해야 한다는 것을 느꼈습니다. Join과 Union은 자주 사용되는 연산이므로 데이터를 검색하거나 연결할 때에 유용하게 써봐야겠습니다. 오늘도 방문해주셔서 감사합니다!😉

0개의 댓글

관련 채용 정보