티스토리 뷰

DEVELOPE/MYSQL&MARIADB

SQL JOIN 조인 메뉴얼

소찾나 2017. 10. 18. 17:03
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SQL JOIN 조인 메뉴얼

SQL JOIN 조인 메뉴얼


SQL JOIN 조인 메뉴얼



조인(JOIN)


SELECT 명령문의 FROM 절에 적어도 두 개의 테이블 명세가 있고, WHERE 절에는 서로 다른 테이블의 열을 비교하는 조건이 적어도 하나가 있다면 조인(JOIN)이라한다.


  1. INNER JOIN

  2. OUTER JOIN

  3. SELF JOIN


SQL JOIN 조인 메뉴얼



SQL JOIN 조인 메뉴얼



SQL JOIN 조인 메뉴얼




1 INNER JOIN


결합된 테이블에 조건의 내용이 공통으로 들어가 있는 값을 결과 집합으로 만들어준다. ON 다음에 들어가는 조건에 맞는 내용들만 보여주게 된다.


기본형식


SELECT 열 목록
   FROM 첫번째 테이블 [AS 별칭] INNER JOIN 두번째 테이블 [AS별칭]
       ON(join_condition)

  
mysql> SELECT DISTINCT m.sno, m.name FROM student AS m INNER JOIN circle AS b ON m.sno = b.sno ORDER BY m.sno;
+------+-----------+
| sno  | name      |
+------+-----------+
|  100 | 홍길동    |
|  101 | 김철수    |
|  102 | 김순이    |
|  103 | 김말동    |
|  104 | 정민철    |
|  105 | 이만수    |
|  106 | 안철수    |
|  107 | 김재동    |
|  108 | 이미자    |
|  109 | 김기철    |
|  110 | 이기동    |
+------+-----------+
11 rows in set (0.00 sec)



2 OUTER JOIN

2.2 OUTER JOIN

INNER JOIN 문을 포함하고 한쪽에만 내용이 있더라도 지정한 기준 테이블에 있는 모든 데이터를 가져오는 조인방식



기본형식


 

SELECT 열목록

   FROM 첫번째 테이블

   <LEFT | RIGHT | FULL> OUTER JOIN 두번째 테이블

       ON(join_condition)

   [WHERE 검색조건]


 


(1) LEFT OUTER JOIN

왼쪽 테이블이 기준이 되어서 그 테이블에 있는 데이터를 모두 가져온다. 기준으로 지정되지 않은 오른쪽 테이블에서 가져올 수 없는 열은 NULL로 표현된다.


 

mysql> SELECT m.sno, b.name, b.cname FROM student AS m LEFT OUTER JOIN circle AS b ON m.sno = b.sno ORDER BY m.sno;

+------+-----------+--------------+

| sno  | name      | cname        |

+------+-----------+--------------+

|  100 | 홍길동    | 사물놀이     |

|  101 | 김철수    | 사물놀이     |

|  102 | 김순이    | 방송         |

|  103 | 김말동    | 방송         |

|  104 | 정민철    | 연극         |

|  105 | 이만수    | 운동         |

|  106 | 안철수    | 운동         |

|  107 | 김재동    | 방송         |

|  108 | 이미자    | 방송         |

|  109 | 김기철    | 연극         |

|  110 | 이기동    | 운동         |

+------+-----------+--------------+

11 rows in set (0.00 sec)




(2) RIGHT OUTER JOIN

오른쪽 테이블이 기준이 되어서 그 테이블에 있는 데이터를 모두 가져온다. 기준으로 지정되지 않은 왼쪽 테이블에서 가져올 수 없는 열은 NULL로 표현된다.


mysql> SELECT b.sno, b.name, b.cname FROM student AS m RIGHT OUTER JOIN circle AS b ON m.sno = b.sno ORDER BY b.sno;

+------+-----------+--------------+

| sno  | name      | cname        |

+------+-----------+--------------+

|  100 | 홍길동    | 사물놀이     |

|  101 | 김철수    | 사물놀이     |

|  102 | 김순이    | 방송         |

|  103 | 김말동    | 방송         |

|  104 | 정민철    | 연극         |

|  105 | 이만수    | 운동         |

|  106 | 안철수    | 운동         |

|  107 | 김재동    | 방송         |

|  108 | 이미자    | 방송         |

|  109 | 김기철    | 연극         |

|  110 | 이기동    | 운동         |

|  200 | 김만수    | 운동         |

|  201 | 김옥경    | 방송         |

|  202 | 김수경    | 방송         |

|  203 | 김말동    | 운동         |

|  204 | 민영탁    | 운동         |

|  205 | 이경철    | 방송         |

|  206 | 김영진    | 방송         |

|  207 | 탁재훈    | 방송         |

|  208 | 안병훈    | 사물놀이     |

|  209 | 진우형    | 사물놀이     |

|  210 | 노민환    | 사물놀이     |

+------+-----------+--------------+

22 rows in set (0.00 sec)



 

2 CROSS JOIN


결과값이 한쪽 테이블의 모든행들과 다른쪽 테이블의 모든 행을 조인시킨다.

결과 집합은 두 테이블의 개수를 곱한 값만큼 생성되며, 조인되는 테이블에 공통되는 행이 없어도 되며 조건절인 ON 키워드가 사용되지 않는다.



SELECT m.sno, b.name, b.cname 

  FROM student AS m

 CROSS JOIN circle AS b

 ORDER BY m.sno


         결과값이 너무 길어 일부분만 출력해본다

SELECT m.sno, b.name, b.cname FROM student AS m CROSS JOIN circle AS bORDER BY m.sno;

|  109 | 노민환    | 사물놀이     |
|  109 | 홍길동    | 사물놀이     |
|  109 | 김순이    | 방송         |
|  109 | 정민철    | 연극         |
|  109 | 안철수    | 운동         |
|  109 | 이미자    | 방송         |
|  109 | 이기동    | 운동         |
|  109 | 김옥경    | 방송         |
|  109 | 김말동    | 운동         |
|  109 | 이경철    | 방송         |
|  109 | 탁재훈    | 방송         |
|  109 | 진우형    | 사물놀이     |
|  110 | 홍길동    | 사물놀이     |
|  110 | 김순이    | 방송         |
|  110 | 정민철    | 연극         |
|  110 | 안철수    | 운동         |
|  110 | 이미자    | 방송         |
|  110 | 이기동    | 운동         |
|  110 | 김옥경    | 방송         |
|  110 | 김말동    | 운동         |
|  110 | 이경철    | 방송         |
|  110 | 탁재훈    | 방송         |
|  110 | 진우형    | 사물놀이     |
|  110 | 김철수    | 사물놀이     |
|  110 | 김말동    | 방송         |
|  110 | 이만수    | 운동         |
|  110 | 김재동    | 방송         |
|  110 | 김기철    | 연극         |
|  110 | 김만수    | 운동         |
|  110 | 김수경    | 방송         |
|  110 | 민영탁    | 운동         |
|  110 | 김영진    | 방송         |
|  110 | 안병훈    | 사물놀이     |
|  110 | 노민환    | 사물놀이     |
+------+-----------+--------------+
242 rows in set (0.00 sec)



2 SELF JOIN

하나의 테이블에 같은 데이터가 존재하는데 그 의미가 다르게 존재하는 경우. 즉, 같은 데이터이지만 다른 열에 있는 경우에는 두 테이블을 서로 SELF JOIN 문으로 확인가능



SELECT a.sno, a.name, a.cname

  FROM circle AS a

  INNER JOIN circle AS b

      ON a.name = b.cname

WHERE a.name = '홍길동'


이글이 도움이 되셨다면 아래에 로그인이 필요없는 공감 버튼을 클릭해주세요 ^^


'DEVELOPE > MYSQL&MARIADB' 카테고리의 다른 글

SQL VIEW 생성, 사용법  (0) 2017.10.19
SQL INDEX 설명, 사용법  (0) 2017.10.19
SQL SUBQUERY 부속질의어  (0) 2017.10.18
SQL UNION / UNION ALL  (0) 2017.10.18
SQL 명령어 ORDER BY 정렬  (0) 2017.10.17
댓글