5. inner join(내부조인 = join) : 가장 일반적인 조인 양쪽 테이블에 모두 있는 것만 조인된다.
위는 select ~ from ~ join ~ where 순의 구조로 이루어진다.
Buytbl은 12개의 데이터 모두 아이디를 가지고 있다. Usertbl 10개의 데이터. 한번도 구매하지 않은 이승기, 김경호, 임재범, 윤종신, 조관우는 구매테이블에 없다.
* inner join : 양쪽 테이블에 모두 있는 데이터만 추출한다. 즉, 구매한 이력이 있는 아이디만 출력되므로 구매테이블에 있는 데이터들이 기준이된다.(즉, 교집합)
6. 테이블명.컬럼명 : 어떤 컬럼명인지 테이블을 명시해 주어야한다. 별칭으로도 가능하다.
* outer join(외부조인) : 조건에 만족하지 않는 행까지도 포함시키는 것.
9. left outer join : 왼쪽테이블(usertbl)의 것은 모두 출력한다. 즉, 구매기록이 없는 전체 회원 정보를 보고 싶을 때. 줄여서 left join 이라고만 써도 된다.
9. right outer join : 위의 left outer join과 동일한 결과를 얻으려면 조인이 걸리는 테이블 위치만 변경해주면 된다.
9. Full outer join : left, right outer join 을 합친 개념. 합집합 MySQL 5버전에서는 지원안함. 각 left, right join 한것을 union 시키는 대체방안이 있음.
위 2개의 조인한 쿼리는 같다. 11라인의 마지막 right outer join을 따라가 마지막 동아리(clubtbl)을 기준으로 조회한다.
* cross join : 한테이블의 모든 행들과 다른 쪽 테이블의 모든 행을 조인시키는 기능을 한다. 그래서 결과 개수는 두 테이블 개수를 곱한 개수가 된다. 카티션곱이라고 부른다.
따라서 회원테이블 10명과 구매테이블 개수인 12개가 곱해져 120개의 결과가 된다.
5번 라인처럼 cross join을 해도 되지만 권장하지 않는다.
* cross join
- on 구문을 사용할 수 없다.
- 테스트로 쓸 많은 용량의 데이터를 생성할 때 주로 사용한다. (큰 샘플 데이터를 실제로 생성하고자 한다면 create table … select 문과 함께 사용하면 된다.)
코드 관리의 대분류 코드와 소분류 코드를 보여줄 필요가 있을 때 self join이 활용된다.
* self join
- 자기 자신과 자기자신이 조인한다.
- 나사장은 대분류 코드가 되고, 대분류 코드를 바라보는 하위직원들은 소분류 코드로 나열할 수 있다.
나사장의 부하직원들 즉 대분류 코드의 소분류 코드정보를 저장하고 조회가 가능하다.
'SQL' 카테고리의 다른 글
[MySQL_MariaDB] 커서_loop_select 한줄한줄 읽으며 처리 (0) | 2021.03.16 |
---|---|
[MySql_mariaDB] 스토어드 함수 Function (0) | 2021.03.15 |
[mariadb_mysql] 대량의데이터(TEXT,CLOB) (0) | 2021.03.13 |
[mysql_mariadb] 내장함수_foreignkey수정 (0) | 2021.03.12 |
[MySql MariaDB] 변수_json데이터 (0) | 2021.03.11 |