JOIN
- 특정 조건으로 테이블을 합친다.
- INNER JOIN : 두 테이블에서 일치하는 값이 있는 행을 반환
SELECT table1.id, table2.id
FROM table1
[INNER] JOIN table2
ON table2.id=table1.id
- LEFT JOIN : 왼쪽 테이블을 기준으로 오른쪽 테이블에서 조인조건에 해당하는 값이 있다면 그 값을 가져오고 없다면 NULL 값을 가져온다.
SELECT table1.id, table2.id
FROM table1
LEFT [OUTER] JOIN table2
ON table2.id = table1.id
- FULL JOIN : 양쪽 테이블 모두가 기준이 되어 LEFT JOIN과 RIGHT JOIN을 합친 결과와 동일하다.
SELECT table1.id,table2.id
FROM table1
FULL [OUTER] JOIN table2
ON table2.id=table1.id
집합
- 둘 이상의 쿼리 결과를 단일 결과로 결합한다.
ALL : 모든 결과를 나타낸다 (INTERSECT는 불가)
DISTINCT : 중복된 결과를 제외한 결과를 나타낸다.
UNION : 합집합
SELECT ID, NAME FROM TABLE1 ;
UNION ALL
SELECT ID, NAME FROM TABLE2 ;
INTERSECT : 교집합
SELECT ID, NAME FROM TABLE1 ;
INTERSECT DISTINCT
SELECT ID, NAME FROM TABLE2 ;
EXCEPT : 차집합
SELECT ID, NAME FROM TABLE1 ;
EXCEPT DISTINCT
SELECT ID, NAME FROM TABLE2 ;
JOIN과의 차이점
: JOIN은 가로로 테이블을 합치지면, 집합은 세로로 테이블을 합친다 .
서브쿼리 / WITH
서브쿼리 : 하나의 SQL 문 안에 또 다른 SQL이 포함되어 있는 경우
- FROM 절에서의 사용
인라인 뷰라고도 하며, 동적으로 생성된 테이블인것 처럼 사용이 가능하다.
SELECT A.b1,B.b2
FROM A
,(SELECT b1, b2 FROM TEMP) B
WHERE A.b1 = B.b1;
- WHERE 절에서의 사용
<, <=, >, >=, <> 등의 단일행 연산자와 사용될 때는 반드시 서브쿼리의 결과가 1건이여야 한다
SELECT a, b, c
FROM A
WHERE c <= (SELECT AVG(c) FROM B WHERE c = '바보')
IN, ALL, ANY 등을 사용하여 서브쿼리의 결과가 2건이상일 경우 사용 가능하다.
SELECT a, b, c
FROM A
WHERE a IN (SELECT a FROM B WHERE c = '3')
WITH : 이름을 가진 서브쿼리를 정의한 후 사용하는 구문
서브쿼리가 여러개일때 가독성을 위해 주로 사용되는 편이다.
WITH '별명' AS (
'쿼리'
)
SELECT *
FROM '별명'
'SQL' 카테고리의 다른 글
[SQL] 숫자, 문자열 함수 (0) | 2023.01.25 |
---|