[MYSQL] 테이블 결합 - (1)

Cein1·2022년 10월 23일
  1. 테이블 결합

    실제 서비스에서 DB는 데이터를 정규화하여 여러 개의 테이블로 나누어 저장합니다.

    웹서비스에서 필요로 하는 다양하고 복잡한 데이터를 보여주기 위해서는 복수의 테이블을 결합한 데이터 검색이 필요합니다.

    1. 곱집합

      집합의 연산방법 중 하나로, 두 개의 집합을 곱하는 연산입니다.
      곱집합은 교차결합(Cross Join)을 사용하여 곱집합을 계산할 수 있습니다.

    2. 교차집합(Cross Join)

      SELECT 문의 FROM절에 복수의 테이블을 콤마로 구분지어 지정하면 테이블간 교차결합된 결과를 얻을 수 있습니다

      `mysql > SELECT posts.id, posts.title, posts.user_id, posts.content, users.id, users.name FROM posts, users;`

      교차결합은 필요한 경우가 거의 없고 비용이 매우 많이 드는 연산이기 때문에 실무에서는 거의 사용하지 않습니다. 그러나 교차결합은 내부 결합(Inner Join)과 외부 결합(Outer Join)의 근간이 됩니다.

    3. 내부 결합(Inner Join)
      기준이 되는 테이블(left table)과 join이 걸리는 테이블(right table) 양쪽 모두에 결합조건이 매칭되는 row(데이터)만 검색하는 방법

      • 예를 들어, users_posts면 user_id를 결합조건으로 사용하여 목표한 테이블을 얻어낼 수 있습니다
        mysql> SELECT
        	posts.id,
        	posts.title,
        	posts.content,
        	users.id,
        	users.name
        FROM posts, users
        WHERE posts.user_id=users_id;
        // SELECT STATEMENT
        mysql> SELECT *
        FROM table_1
        INNER JOIN table_2 ON 결합조건
        WHERE where_condition
        mysql> SELECT
        	posts.id,
        	posts.title,
        	posts.user_id,
        	posts.content,
        	users.id,
        	users.name
        FROM posts
        INNER JOIN users ON posts.user_id=user.id
        // SELECT STATEMENT
        SELECT
        	[FROM table_references]
        	[WHERE where_condition]
        	[GROUP BY {col_name | expr | postion}, ... [WITH ROLLUP]]
        	[HAVING where_condition]
        	[ORDER BY {col_name | expr | position}
        		[ASC | DESC], ... [WITH ROLLUP]]
        	[LIMIT {[offset, ] row_count | row_count OFFSET offset}]
        
        // JOIN Clause
        table_references:
        	escaped_table_references [, escaped_table_reference] ...
        
        escaped_table_reference: {
        		table_reference
        	| { OJ table_reference }
        }
        
        table_reference: {
        		table_factor
        	| joined_table
        }
        
        joined_table: {
        		table_reference {[INNER | CROSS] JOIN table_reference join_specification
        	| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification
        	| table_reference NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_factor
        }
        
        join_specification: {
        		ON search_condition
        	| USING (join_column_list)
        }

    d. 외부 결합(Outer Join)
    여러 개의 테이블에서 한 쪽에는 데이터가 있고, 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 테이블을 기준으로 모두 출력하는 결합 방법입니다.

    LEFT / RIGHT / FULL OUTER JOIN 이 있습니다.

0개의 댓글