JOIN / SUBQUERY 사용해보기
JOIN
- 조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말합니다.
- INNER JOIN(내부조인) : 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 합니다.
- OUTER JOIN(외부조인) : 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옵니다.
- CROSS JOIN(상호조인) : 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능입니다.
- SELF JOIN(자체 조인) : 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용합니다.
- INNER JOIN(내부조인) : 두 테이블을 연결할 때 가장 많이 사용하는 것이 내부조인입니다.
SELECT <열 목록> FROM <첫 번째 테이블> INNER JOIN <두 번째 테이블> ON <조인 조건> [WHERE 검색 조건] -- INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식합니다.
- OUTER JOIN(외부조인) : 내부 조인은 두 테이블에 모두 데이터가 있어야 하지만, 외부 조인은 한쪽에만 데이터가 있어도 결과가 나옵니다.
- LEFT OUTER JOIN : 왼쪽 테이블의 모든 값이 출력되는 조인
- RIGHT OUTER JOIN : 오른쪽 테이블의 모든 값이 출력되는 조인
- FULL OUTER JOIN : 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인
SELECT <열 목록> FROM <첫 번째 테이블(LEFT 테이블)> <LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)> ON <조인 조건> [WHERE 검색 조건]
- CROSS JOIN(상호조인) : 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능입니다.
- 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼 됩니다.
- 카티션 곱(Cartesian Product)라고도 합니다.
-
SELECT * FROM <첫 번째 테이블> CROSS JOIN <두 번째 테이블>
- SELF JOIN(자체조인) : 자체 조인은 자기 자신과 조인하므로 1개의 테이블을 사용합니다.
- 별도의 문법이 있는 것은 아니고 1개로 조인하면 자체 조인이 됩니다.
-
SELECT <열 목록> FROM <테이블> 별칭A INNER JOIN <테이블> 별칭B [WHERE 검색 조건]
- INNER JOIN(내부조인) : 두 테이블을 연결할 때 가장 많이 사용하는 것이 내부조인입니다.
SubQuery
- 서브쿼리란 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말합니다.
- 서브쿼리는 메인쿼리가 서브쿼리를 포함하는 종속적인 관계입니다.
-
-- SubQuery를 사용하는 겨우? -- 여러번의 연산을 수행해야 할 때 -- 조건문에 연산 결과를 사용해야 할 때 -- 조건에 Query 결과를 사용하고 싶을 때 -- SubQuery 기본 문법 -- select column1, special_column -- from -- ( /* subquery */ -- select column1, column2 special_column -- from table1 -- ) a -- a는 서브쿼리의 이름이라고 생각하면 됩니다.; -- select column1, column2 -- from table1 -- where column1 = (select col1 from table2); SELECT 컬럼명1 / 컬럼명2 FROM ( SELECT 컬럼명1, 컬럼명2 FROM 테이블명 ) 서브쿼리명; SELECT 컬럼명1, 컬럼명2, 컬럼명3 FROM ( SELECT 컬럼명1, 컬럼명2, 컬럼명3 FROM 테이블명) 서브쿼리명; SELECT 컬럼명1, 컬럼명2, if(조건, 조건 충족 시, 조건 충족 못할 시) FROM ( SELECT 컬럼명1, 컬럼명2, 컬럼명3-25(컬럼명으로 계산하기) FROM 테이블명) 서브쿼리명; SELECT 컬럼명1, 컬럼명2, 컬럼명3-25(컬럼명으로 계산하기) FROM 테이블명; select 컬럼명1, 지정이름*지정이름2 이름지정 from ( select 컬럼명1, case when 지정이름<5000 then 0.005 when 지정이름 between 5000 and 19999 then 0.01 when 지정이름 between 20000 and 29999 then 0.02 else 0.03 end 지정이름2, 지정이름 from ( select 컬럼명1, avg(컬럼명2/컬럼명3) 지정이름 from 테이블명 group by 1 ) 서브쿼리명1 ) 서브쿼리명2;
'Database > MySQL' 카테고리의 다른 글
[MySQL] - MySQL 날짜 계산 관련 함수 정리 (0) | 2024.02.01 |
---|---|
[MySQL] - DateType / window function (1) | 2024.01.06 |
[MySQL] - REPLACE / SUBSTR / CONCAT / IF문 / CASE문 / (0) | 2024.01.05 |
[MySQL] - 집계함수 / GROUP BY / ORDER BY (1) | 2024.01.04 |
[MySQL] - SELECT / WHERE (1) | 2024.01.03 |