JOIN

2023. 8. 2. 12:24SQL

JOIN은 두 테이블을 합칠 때 사용한다.

네 가지 유형이며 아래와 같이 형식을 나타낼 수 있다.

 

INNER JOIN 형식
SELECT <열 목록>
FROM <첫 번째 테이블>
    INNER JOIN <두 번째 테이블>
    ON <조인 조건>
[WHERE 검색 조건]

두 테이블을 조인할 때, 두 테이블에 공통의 열이 있어야 한다.

 

 

OUTER JOIN
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
    <LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
     ON <조인 조건>
[WHERE 검색 조건]

두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다. 집합으로 볼 때 차집합과 같은 결과가 나오는데이때 left 조인은 왼쪽 테이블의 데이터를 기준으로 하고, right 조인은 오른쪽 테이블의 데이터를 기준으로 한다. full은 대칭 차집합과 같이 데이터를 추출된다. 참고로 데이터 값이 없을 때는 null로 표기된다.

 

 

CROSS JOIN
SELECT *
FROM <첫 번째 테이블>
    CROSS JOIN <두 번째 테이블>

한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 하나씩 모두 조합하여 출력한다.

 

 

SELF JOIN
SELECT <열 목록>
FROM <테이블> 별칭A
    INNER JOIN <테이블> 별칭B
[WHERE 검색 조건]

자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.

 

 

 

아래와 같이 연습을 해보았다.

연습은 아래 링크에 들어가 저장되 있는 DB를 사용하였다.

 
 
연습
Customers테이블과 Orders테이블을 Inner join해서 추출하고, 이 중에 국적이 Mexico인 고객 정보만 출력하시오


SELECT *
FROM Customers c
INNER JOIN Orders o ON c.CustomerID=o.CustomerID
WHERE c.Country='Mexico';
orders 테이블과 orderDetails 테이블을 inner join하고 Quantitiy50개 이상인 row만 오름차순으로 추출하시오


SELECT * FROM Orders o inner join orderDetails d on o.orderid=d.orderid where d.Quantity>=50 order by d.Quantity;

order 테이블과 orderDetails 테이블을 inner join하고 customerid별로 구매수량(Quantity)의 합계를 구하시오
출력 컬럼명은 QuantitySum이고, 오름차순으로 정렬해서 출력시키기.


select customerid,sum(quantity) as QuantitySum from orders o inner join orderdetails od on o.orderid=od.orderid group by customerid order by QuantitySum;
customers 테이블과 orders 테이블을 left join 하고 customerid, orderdate, orderid, customername 정보를 추출하세요. 1996년도 7월에 주문된 건만 추출하세요. 날짜는 내림차순으로


select c.customerid, orderdate, orderid, customername from customers c left join orders o on c.customerid = o.customerid where o.orderdate between '1996-07-01' and '1996-07-31' order by orderdate desc;

 

'SQL' 카테고리의 다른 글

MySQL Workbench 8.0 CE  (0) 2023.08.04
SQL 총연습  (0) 2023.08.03
SQL 기타  (0) 2023.08.02
SQL 연습  (0) 2023.08.02
SQL 기본  (0) 2023.08.01