본문 바로가기
MySQL

[SQL] JOIN 정리

by 주연이가 주연이다. 2024. 1. 10.

[SQL] JOIN 정리

Untitled

  • JOIN 테이블명 (AS 약칭)

    ON 키1 = 키2

  • INNER JOIN( = JOIN)

    SQL INNER JOIN

    SQL의 INNER JOIN 명령은 공통 열을 기반으로 두 개의 테이블을 조인하고 해당 열에서 일치하는 값을 가진 행을 선택합니다.

    Example

      -- join Customers and Orders tables
      -- select customer_id and first_name columns from the Customers table
      -- select amount from the Orders table
    
      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      INNER JOIN Orders
      ON Customers.customer_id = Orders.customer;
    

    Run Code

    여기서는 Customers.customer_id = Orders.customer 조건에 따라 Customers와 Orders 테이블이 조인됩니다. 위의 코드는 이 조건을 충족하지 않는 모든 행을 제외합니다.


    SQL INNER JOIN Syntax

    SQL INNER JOIN 문의 구문은 다음과 같습니다:

      SELECT columns_from_both_tables
      FROM table1
      INNER JOIN table2
      ON table1.column1 = table2.column2

    여기에,

    • table1과 table2는 결합되어야 하는 두 개의 테이블입니다.

    • table1의 column1과 table2의 column2를 사용합니다.

    • 참고:* INNER JOIN 대신 JOIN을 사용할 수 있습니다. 기본적으로 이 두 절은 동일한 작업을 수행합니다.


    Example 1: SQL INNER JOIN

      -- join the Customers and Orders tables when
      -- the customer_id from Customers matches the customer column in Orders
    
      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      JOIN Orders
      ON Customers.customer_id = Orders.customer;

    Run Code

    위의 SQL 쿼리가 작동하는 방식은 다음과 같습니다:

    https://www.programiz.com/sites/tutorial2program/files/inner-join-in-sql.png

    Example: SQL INNER JOIN


    Example 2: SQL INNER JOIN

    다른 예시를 살펴보겠습니다.

      SELECT Categories.cat_name, Products.prod_title
      FROM Categories
      INNER JOIN Products
      ON Categories.cat_id = Products.cat_id;

    Run Code

    여기에서 SQL 명령은 cat_id 열이 두 테이블에 모두 존재하는 경우 Categories 및 Products 테이블 간의 공통 행을 선택합니다.


    INNER JOIN With WHERE Clause

    우리는 INNER JOIN과 함께 WHERE 절을 사용하여 출력에서 행을 추가로 필터링할 수 있습니다.

      -- join tables the Customers and Orders tables
      -- return rows if amount is 500 or higher
    
      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      INNER JOIN Orders
      ON Customers.customer_id = Orders.customer
      WHERE Orders.amount >= 500;
    

    Run Code


    SQL INNER JOIN With AS Alias

    데이터베이스의 조인 쿼리는 길 수 있으므로, 쿼리를 간결하고 이해하기 쉽도록 INNER JOIN 안에서 AS 별칭을 사용할 수 있습니다.

      -- use alias C for Categories table
      -- use alias P for Products table
      SELECT C.cat_name, P.prod_title
      FROM Categories AS C
      INNER JOIN Products AS P
      ON C.cat_id= P.cat_id;
    

    Run Code

    여기에서 SQL 명령은 카테고리 테이블과 제품 테이블을 내부 조인하면서 각각 CP 별칭을 할당합니다.


    SQL INNER JOIN With Three Tables

    우리는 INNER JOIN을 사용하여 두 개 이상의 테이블을 조인할 수도 있습니다. 예를 들어,

      -- join three tables: Customers, Orders, and Shippings
      SELECT C.customer_id, C.first_name, O.amount, S.status
      FROM Customers AS C
      INNER JOIN Orders AS O
      ON C.customer_id = O.customer
      INNER JOIN Shippings AS S
      ON C.customer_id = S.customer;
    

    Run Code

    여기에 SQL 명령문이 있습니다.

    • Customers 테이블의 customer_id (Customers 테이블)와 Orders 테이블의 customer를 기준으로 조인합니다.

    • 그리고 Customers 테이블의 customer_id (Customers 테이블)와 Shippings 테이블의 customer를 기준으로 조인합니다.

      이 명령은 조인 조건을 모두 만족하는 열 값이 있는 행을 반환합니다.

  • LEFT OUTER JOIN

    SQL LEFT JOIN

    SQL의 LEFT JOIN은 공통 열을 기반으로 두 개의 테이블을 결합합니다. 이 열에서 일치하는 값을 가진 레코드와 왼쪽 테이블의 나머지 행을 선택합니다.

    Example

      -- left join Customers and Orders tables based on their shared customer_id columns
      -- Customers is the left table
      -- Orders is the right table
    
      SELECT Customers.customer_id, Customers.first_name, Orders.item
      FROM Customers
      LEFT JOIN Orders
      ON Customers.customer_id = Orders.customer_id;

    Run Code

    여기에서 코드는 CustomersOrders 테이블을 customer_id를 기준으로 왼쪽 조인합니다. 결과 집합에는 다음이 포함됩니다:

    • customer_id 및 Customers 테이블에서의 first_name 열 (주문 테이블에 값이 없는 경우도 포함)
    • Orders 테이블의 item 열

    SQL LEFT JOIN Syntax

    SQL LEFT JOIN 문의 구문은 다음과 같습니다:

      SELECT columns_from_both_tables
      FROM table1
      LEFT JOIN table2
      ON table1.column1 = table2.column2

    여기서,

    • table1은 조인될 왼쪽 테이블입니다.
    • table2는 조인될 오른쪽 테이블입니다.
    • column1과 column2는 두 테이블 간의 관련된 열입니다.

    Example: SQL LEFT Join

      -- left join the Customers and Orders tables
    
      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      LEFT JOIN Orders
      ON Customers.customer_id = Orders.customer;

    Run Code

    여기에 이 코드가 작동하는 방법이 있습니다:

    https://www.programiz.com/sites/tutorial2program/files/left-join-in-sql.png

    Example: SQL LEFT JOIN

    여기에서 SQL 명령은 'Customers' 테이블의 'customer_id'와 'first_name' 열 및 'Orders' 테이블의 'amount' 열을 선택합니다.

    결과 집합에는 Customers 테이블의 customer_idOrders 테이블의 customer가 일치하는 행과 함께 Customers 테이블의 나머지 모든 행이 포함됩니다.


    LEFT JOIN With WHERE Clause

    SQL LEFT JOIN 문은 선택적으로 WHERE 절을 가질 수 있습니다. 예를 들어,

      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      LEFT JOIN Orders
      ON Customers.customer_id = Orders.customer
      WHERE Orders.amount >= 500;

    Run Code

    여기에서 SQL 명령문은 CustomersOrders 테이블을 조인하고, amount500 이상인 행을 선택합니다.


    SQL LEFT JOIN With AS Alias

    AS 별명LEFT JOIN 안에서 사용하여 쿼리를 간결하고 깔끔하게 만들 수 있습니다. 예를 들어,

      -- use alias C for Categories table
      -- use alias P for Products table
    
      SELECT C.cat_name, P.prod_title
      FROM Categories AS C
      LEFT JOIN Products AS P
      ON C.cat_id= P.cat_id;

    Run Code

    여기에서 SQL 명령문은 카테고리 테이블과 제품 테이블을 왼쪽 조인하면서 각각 C와 P의 별칭을 부여합니다.

  • RIGHT OUTER JOIN

    SQL RIGHT JOIN

    SQL RIGHT JOIN 문은 공통 열을 기준으로 두 개의 테이블을 조인합니다. 이 문은 이러한 열에서 일치하는 값을 가진 레코드와 오른쪽 테이블의 나머지 행을 선택합니다.

    Example

      -- join Customers and Orders tables
      -- based on their shared customer_id columns
      -- Customers is the left table
      -- Orders is the right table
    
      SELECT Customers.customer_id, Customers.first_name, Orders.item
      FROM Customers
      RIGHT JOIN Orders
      ON Customers.customer_id = Orders.customer_id;

    여기에서 코드는 Customers 테이블과 Orders 테이블을 customer_id를 기준으로 right join합니다. 결과 집합에는 다음이 포함됩니다.

    • Customers 테이블의 customer_id 및 first_name 열
    • Orders 테이블의 item 열 ( Customers 테이블에 값이 없는 것도 포함)

    RIGHT JOIN SYNTAX

    SQL RIGHT JOIN 문의 구문은 다음과 같습니다:

      SELECT columns_from_both_tables
      FROM table1
      RIGHT JOIN table2
      ON table1.column1 = table2.column2

    여기서,

    • table1은 왼쪽에 결합할 테이블입니다.
    • table2는 오른쪽에 결합할 테이블입니다.
    • column1과 column2는 두 테이블의 관련 컬럼입니다.

    Example: SQL RIGHT JOIN

      -- join Customers and Orders tables
      -- based on customer_id of Customers and customer of Orders
      -- Customers is the left table
      -- Orders is the right table
    
      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      RIGHT JOIN Orders
      ON Customers.customer_id = Orders.customer;

    이 코드는 다음과 같이 작동합니다:

    https://www.programiz.com/sites/tutorial2program/files/right-join-in-sql.png

    Example: SQL RIGHT JOIN

    여기에서 SQL 명령은 Customers 테이블의 customer_idfirst_name 열, 그리고 Orders 테이블의 amount 열을 선택합니다.

    그리고 결과 집합은 Customers 테이블의 customer_idOrders 테이블의 customer 간에 일치하는 행과 Orders 테이블의 나머지 모든 행을 포함합니다.

    참고: 우리의 온라인 SQL 컴파일러는 SQLite를 기반으로 하기 때문에 RIGHT JOIN을 지원하지 않습니다. 그러나 왼쪽 조인과 오른쪽 테이블을 교환하여 동일한 결과를 얻을 수 있습니다.

      -- left join Orders and Customers tables
      -- Orders is the left table
      -- Customers is the right table
      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Orders
      LEFT JOIN Customers
      ON Orders.customer = Customers.customer_id;

    Run Code


    RIGHT JOIN With WHERE Clause

    SQL RIGHT JOIN 문은 선택적으로 WHERE 절을 가질 수 있습니다. 예를 들어,

      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      RIGHT JOIN Orders
      ON Customers.customer_id = Orders.customer
      WHERE Orders.amount >= 500;

    여기에서 SQL 명령은 Customers 테이블과 Orders 테이블을 조인하고, 500 이상인 amount 을 가진 행을 선택합니다.


    SQL RIGHT JOIN With AS Alias

    우리는 SQL 코드를 간결하고 깔끔하게 만들기 위해 RIGHT JOIN 안에서 AS 별칭을 사용할 수 있습니다. 예를 들어,

      -- use alias C for Categories table
      -- use alias P for Products table
      SELECT C.category_name, P.product_title
      FROM Categories AS C
      RIGHT JOIN Products AS P
      ON C.cat_id = P.cat_id;

    여기에서 SQL 명령은 Categories 테이블과 Products 테이블에 대해 오른쪽 조인을 수행하면서 각각 CP 별칭을 할당합니다.

  • FULL OUTER JOIN

    SQL FULL OUTER JOIN

    SQL FULL OUTER JOIN 문은 공통 열을 기준으로 두 개의 테이블을 조인합니다. 이 문은 이러한 열에서 일치하는 값을 가진 레코드와 두 테이블의 나머지 행을 선택합니다.

    Example

      -- full join Customers and Orders tables
      -- based on their shared customer_id columns
      -- Customers is the left table
      -- Orders is the right table
    
      SELECT Customers.customer_id, Customers.first_name, Orders.item
      FROM Customers
      FULL OUTER JOIN Orders
      ON Customers.customer_id = Orders.customer_id;

    여기에서 SQL 쿼리는 Customers와 Orders 두 개의 테이블에 대해 FULL OUTER JOIN을 수행합니다. 이는 결과 집합에 공통 customer_id 값을 가지지 않는 행도 포함하여 두 테이블의 모든 행을 포함한다는 것을 의미합니다.


    FULL OUTER JOIN SYNTAX

    SQL FULL OUTER JOIN 문의 구문은 다음과 같습니다:

      SELECT columns
      FROM table1
      FULL OUTER JOIN table2
      ON table1.column1 = table2.column2;

    여기에,

    • table1과 table2는 조인될 테이블입니다.
    • column1과 column2는 두 테이블의 관련된 열입니다.

    Example: SQL OUTER Join

      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      FULL OUTER JOIN Orders
      ON Customers.customer_id = Orders.customer;

    여기에서 SQL 명령문은 Customers 테이블에서 customer_idfirst_name 열을 선택하고 Orders 테이블에서 amount 열을 선택합니다.

    결과 집합에는 Customers 테이블의 customer_idOrders 테이블의 customer 간에 일치 여부와 관계없이 두 테이블의 모든 행이 포함됩니다.

    https://www.programiz.com/sites/tutorial2program/files/full-outer-join-in-sql.png

    Example: SQL FULL OUTER JOIN


    FULL OUTER JOIN With WHERE Clause

    SQL의 FULL OUTER JOIN 문은 선택적으로 WHERE 절을 포함할 수 있습니다. 예를 들어,

      SELECT Customers.customer_id, Customers.first_name, Orders.amount
      FROM Customers
      FULL OUTER JOIN Orders
      ON Customers.customer_id = Orders.customer
      WHERE Orders.amount >= 500;

    여기서 SQL 명령은 두 테이블을 조인하고, 금액이 500 이상인 행을 선택합니다.


    SQL FULL OUTER JOIN With AS Alias

    우리는 FULL OUTER JOIN 안에서 AS 별칭을 사용하여 질의를 간결하고 깔끔하게 만들 수 있습니다. 예를 들어,

      -- use alias C for Categories table
      -- use alias P for Products table
      SELECT C.category_name, P.product_title
      FROM Categories AS C
      FULL OUTER JOIN Products AS P
      ON C.category_id = P.cat_id;

    여기서 SQL 명령은 CategoriesProducts 테이블에 대해 FULL OUTER JOIN을 수행하면서 각각에 별칭 CP를 할당합니다.

728x90
반응형

'MySQL' 카테고리의 다른 글

TIMESTAMPDIFF() 사용하기  (0) 2024.04.07
날짜 관련 함수 정리  (0) 2024.04.04
LIKE 연산자  (0) 2024.03.05
UNION / UNION ALL  (0) 2024.03.04
[MySQL] 문법 정리  (0) 2023.12.18