--> 내일
SET(집합)
1. UNION --> 합집합
2. UNION ALL
3.INTERSECT --> 교집합
4.MINUS --> 차집합
select * from table1 union
select * from table2 union
select * from table3;
select 되어져 나온 결과물에서 행 전체가 똑같은 것이 있따면. 중복되어져 보이지 않고 한개행으로 보이도록 하려면 select 다음에 distinct를 쓰면된다
select distinct * from (select * from table1 union all
select * from table2 union all
select * from table3) result;
Join -> ANSI
select
from TABLE1 {[INNER]JOIN TABLE2 ON (condition1 [AND condition2...] | [INNER] JOIN TABLE2 USING (column1 [,...]}NATURAL [INNER] JOIN TABLE2 | LEFT | RIGHT | FULL [OUTER] JOIN TABLE2 ON (condition1 [AND condition2...]) | LEFT | RIGHT | FULL [OUTER] JOIN TABLE2 USING (column1 [,...]) | CROSS JOIN TABLE2 }
WHERE
두 개의 테이블 간에 칼럼 값이 정확하게 일치하는 경우에 사용되는 방법.
join의 조건을 where 절에 기술하게 되는데 = 연사자를 이용하여 표현한다.
SELECT TABLE1.COL, TABLE2.COL, .....
FROM TABLE1, TABLE2
WHERE TABLE1.COL1 = TABLE2.COL1;
-- ANSI/ISO SQL 표준방식으로 바꾸면
select table1.col, table2.col, ....
from table1 inner join table2
on table1.col1 = table2.col1;
두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하지 않는 경우에 사용되는 방법이다.
between,>,>=,<,<=등등.. 연산자를 사용하여 표현한다
select table1.col, table2.col, ....
from table1, table2
where table1.col1 between table2.col1 and table2.col2;
내부 조인아라고도 하며 join조건에서 동일한 값이 있는 행만 반환한다.
inner join은 where절에서 사용하던 join 조건을 from 절에서 정의하겠다는 의미이므로 using이나 on절을 필수적으로 사용해야 한다.
-- non join
select table1.col1, table2.col1
from table1, table2
where table1.col1, table2.col1;
-- inner join
select table1.col1, table2.col1
from table1 inner join table2
on table1.col1, table2.col1;
-- inner를 스킵해도 된다
select table1.col1, table2.col1
from table1 join table2
on table1.col1, table2.col1;
두 테이블간의 동일한 이름을 갖는 모든 컬럼들에 대해 equi join을 수행합니다.
natural join이 명시되면, using, on, where절에서 조인조건을 정의할 수 없다.
select col1, col2
from table1 natural join table2;
/* 위와같이 작성하면 두개의 테이블에서 공통된 컬럼을 자동으로 인식하여 조인 처리한다.
조인에 사용되는 컬럼들은 같은 데이터 유형이여야 하며 별칭이나 접두사를 붙일수 없다.*/
natural join에서는 모든 일치되는 칼럼들에 대해 join이 이루어지지만,
from 절에서는 using 조건절을 이용하면 같은 이름을 가진 컬럼들 중 원하는 컬럼에 대해서만 선택적으로 equi join을 할 수 있습니다.
별칭을 부여할 수 없습니다.
select col1, col2
from table1 natural join tabl2
using (col1);
JOIN 서술부 (ON조건절)와 비 JOIN 서술부(WHERE 조건절)을 분리하여 이해가 쉬우며, 컬럼명이 다르더라도 JOIN 조건을 사용할 수 있다는 장점이 있습니다.
NATURAL JOIN에서는 모든 일치되는 컬럼들에 대한 동등 조건이지만,
임의의 JOIN조건을 지정하거나, 이름이 다른 컬럼명을 JOIN조건으로 사용하거나, JOIN컬럼을 명시하기 위해서 ON조건절을 사용한다.ON조건절을 사용한 JOIN의 경우는 별칭이나 테이블명과 같은 접두사를 사용하여 SELECT에 사용되는 컬럼을 명확하게 지정해 주어야한다.
--where절과의 혼용
select col1, col2
from table1 join table2
on (table1.col1 = table2.col1)
where table(n).col1 = 1;
일반 집합 연산자의 PRODUCT개념으로 table간 join조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다.
두 개의 테이블에 대한 CROSS JOIN 결과는, 양쪽 집합의 M * N 건의 데이터 조합이 발생한다. (M->주, N->종)
select col1,col2
from table1 cross join table2;
JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용한다.
LEFT OUTER JOIN
조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 우측 테이블에서 JOIN 대상 데이터를 읽어온다. 우측 테이블에서 만족하는 데이터가 없는 경우 NULL값으로 채운다.
select col1, col2 from table1 left outer join table2 on table1.col1 = table2.col1;
LEFT OUTER JOIN
조인 수행시 먼저 표기된 우측 테이블에 해당하는 데이터를 먼저 읽은 후, 좌측 테이블에서 JOIN 대상 데이터를 읽어온다. 좌측 테이블에서 만족하는 데이터가 없는 경우 NULL값으로 채운다.
select col1,col2 from table1 right outer join table2 on table1.col1 = table2.col1;
FULL OUTER JOIN
조인 수행시 좌측,우측 테이블의 모든 데이터를 읽어 조인하여 결과를 생성한다.
right outer join과 left outer join의 결과를 합집합으로 처리한 결과와 동일하다.
단, union all이 아닌 union기능과 같으므로 중복되는 데이터는 삭제된다.select col1, col2 from table1 full outer join table2 on table1.col1 = table2.col1;