- JOIN
- Inner조인
- Outer조인
- Self조인
- Full outer조인
- Cross조인
- Natural조인
- 서브 쿼리
JOIN
- 두 테이블을 붙여서 정보를 추출하는 방법
- one to many 관계로 연결되어야 함.
- 연결되는 구조: 기본키 pk (Primary Key)- 외래키 FK(Foreign Key)
INNER JOIN
- JOIN중 가장 많이 사용한다. JOIN 의 default 값이 INNER JOIN
- 두 테이블에 모두 정보값이 있을경우 결합하는 방식 (공통분모)
- 만약 한쪽 테이블에 내용이 없는경우 조인하지 않고 결과가 보여지지 않음.
OUTER JOIN
- 필요한 내용이 한쪽에만 있어도 사용 가능
- Atable <LEFT | RIGHT | FULL> OUTER JOIN Btable 으로 사용된다. (LEFT OUTER JOIN = LEFT JOIN) - LEFT OUTER JOIN: 왼쪽 테이블의 내용은 모두 출력되어야 한다. - RIGHT OUTER JOIN: 오른쪽 테이블의 내용은 모두 출력되어야 한다. - 왼쪽 오른쪾의 기준은 보이는 그대로의 테이블 - FULL OUTER JOIN : 양쪽중 어느 한쪽이라도 들어있는 내용이면 출력
CROSS JOIN
- 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인.
- 전체 행 개수 = 두테이블의 각행의 개수를 곱한 개수. (카티션 곱 Cartesian product)
- ON 구문을 사용 하지 않는다.
SELF JOIN 자체 조인
- 아래 예시와 같이 하나의 테이블을 tree조직도 처럼 엮을 수 있는 방법
- 하나의 테이블에 서로 다른 별칭(alias)을 붙여서 조인하는 방식
select * FROM Atable a
INNER JOIN Atable b
ON a.column1 = b.column2
WHERE a.column2 = '조건';
SUBQUERY서브 쿼리
- SELECT 안에 또다른 SELECT가 들어가는것 (쿼리 안에 쿼리가 있는 상태)
- 2개의 sql문을 하나로 중첩쿼리는 괄호로 표기
- FROM, JOIN 에 서브쿼리를 사용하는 경우 마지막 alias를 정해주어서 테이블 명칭을 쿼리 내에서 사용할 수 있게 해야 한다.
SELECT CASE WHEN rental_amount >= 150 THEN 'A'
WHEN rental_amount <= 50 THEN 'D' END customer_classes, count(*) class_count
FROM (
SELECT r.customer_id , round(sum(p.amount) ,0) rental_amount FROM rental r
JOIN payment p ON r.rental_id = p.rental_id
group by r.customer_id
) r
group by case when rental_amount <= 50 then 'D'
when when rental_amount >= 151 then 'A' end
ORDER by customer_classes ASC;
'SQL' 카테고리의 다른 글
[SQL] 집합연산자와 서브쿼리 - UNION(합집합), UNION ALL(중복 포함 합집합) INTERSECT(교집합), EXCEPT(차집합) (0) | 2022.06.30 |
---|---|
[SQL] 그룹화, 그룹 조건, 정렬 및 출력갯수 - Group by, Having, Order by, Limit (0) | 2022.06.30 |
[SQL] 숫자 표시 형식 정하기 - Format, Round, Truncate (0) | 2022.06.30 |
[SQL] 기본 사용 - USE, SELECT, WHERE 및 기본 연산자 (0) | 2022.06.11 |
[SQL] SQL 기본 개념 (0) | 2022.06.11 |