조인 join
A = {1,2,3,4} B = {3,4,5,6,7} => 결과 = { ? }
- JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 것.
- 가장 많이 사용하는 조인은 inner join(☆) > outer join(☆) > self join > cross join > natural join 이다.
[ JOIN 예제 테이블]
INNER JOIN : A 와 B의 교집합
- 조인하는 테이블의 ON 절의 조건이 일치하는 결과만 출력
- inner join은 EQUI join 이라고도 하고, 그냥 join 이라고도 하며, 등가 조인 이라고도 표현할 수 있습니다.
-JOIN 만 적었을 경우 기본값으로 INNER JOIN 이 됩니다.
A = {1,2,3,4} B = {3,4,5,6} --> 결과 : {3,4} 교집합 부분만 출력됨
SELECT TableA.ID, TableA.NAME, TableB.ID, TableB.NAME
FROM TableA (INNER) JOIN TableB
ON TableA.NAME = TableB.NAME
/* 또는 */
SELECT A.ID, A.NAME, B.ID, B.NAME
FROM TableA A (INNER) JOIN TableB B
ON A.NAME = B.NAME
/* INNER 은 생략가능 */
WHERE 절 추가 하기
select ta.id, ta.name, tb.id, tb.name
from ta inner join tb
on ta.name = tb.name
where ta.name = '서길동';
=> 이미 JOIN 된 이후의 데이터에서 WHERE조건을 적용한다.
LEFT JOIN (= LEFT OUTER JOIN)
- LEFT JOIN은 두 테이블이 있을 경우, 첫 번째 테이블을 기준으로 두 번째 테이블을 조합하는 JOIN이다.
A = {1,2,3,4} B = {3,4,5,6} --> 결과 : {1,2,3,4}
SELECT TableA.ID, TableA.NAME, TableB.ID, TableB.NAME
FROM TableA LEFT JOIN TableB
ON TableA.NAME = TableB.NAME;
/* 또는 */
SELECT A.ID, A.NAME, B.ID, B.NAME
FROM TableA A LEFT JOIN TableB B
ON A.NAME = B.NAME;
왼쪽의 테이블은 다 나오지만 두번째 테이블은 교집합이 아닌 부분은 NULL로 표시된다.
RIGHT JOIN ( = RIGHT OUTER JOIN)
- RIGHT JOIN은 두 테이블이 있을 경우, 두 번째 테이블을 기준으로 첫 번째 테이블을 조합하는 JOIN이다.
- RIGHT JOIN은 A와 B 테이블 중에 B 값 + A와 B의 NAME값이 같은 결과 를 리턴하는 것이다.
A = {1,2,3,4} B = {3,4,5,6} --> 결과 : {3,4,5,6}
SELECT TableA.ID, TableA.NAME, TableB.ID, TableB.NAME
FROM TableA RIGHT JOIN TableB
ON TableA.NAME = TableB.NAME;
/* 또는 */
SELECT TableA.ID, TableA.NAME, TableB.ID, TableB.NAME
FROM TableA RIGHT JOIN TableB
ON TableA.NAME = TableB.NAME;
FULL OUTER JOIN
A = {1,2,3,4} B = {3,4,5,6} --> 결과 : {1,2,3,4,3,4,5,6}
- 이름에서도 알수있는 FULL의 의미는 A와 B 전체를 구하는 것이다.
- MySQL은 FULL OUTER JOIN을 지원하지 않는다고 한다.
SELECT * FROM TableA A FULL OUTER JOIN TableB B ON A.NAME = B.NAME;
CROSS JOIN : 두 집합의 곱집합 출력
- 한 테이블의 모든 행과 다른 테이블의 모든 행이 연결되는 모든 경우를 반환
A 튜플의 수* B 튜플의 수 = CROSS JOIN 튜플 수
A = {1, 2, 3} B = {A ,B ,C} --> 결과 : {1A, 1B, 1C, 2A, 2B, 2C, 3A, 3B, 3C}
SELECT TableA.ID, TableA.NAME, TableB.ID, TableB.NAME
FROM TableA CROSS JOIN TableB
ORDER BY TableA.ID, TableB.ID;
/* 또는 */
SELECT A.ID, A.NAME, B.ID, B.NAME
FROM TableA A INNER JOIN TableB B
ORDER BY A.ID, B.ID;
SELF JOIN
-동일 집합끼리 특정 컬럼 기준으로 집합 출력
- 말 그대로 테이블 자기자신을 조인 한 것
SELECT A.ID, A.NAME, B.ID, B.NAME
FROM TableA A JOIN TableA B
ON A.NAME <> B.NAME order by A.ID;
UNION 과 UNION ALL
- UNION은 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용
- 이때 각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 같아야 하며, 필드의 순서 또한 같아야 한다.
- UNION은 여러 테이블의 쿼리의 결과를 합칠때 중복된 행은 제거한다.
- UNION ALL은 여러 테이블의 쿼리의 결과를 합칠때 중복된 행은 제거하지 않는다.
select * from ta
union
select * from tb;
select * from ta
union all
select * from tb;
지금은 겹치는 내용이 없기 때문에 UNION ALL과 UNION한 결과값이 동일함
'Database > mysql' 카테고리의 다른 글
[MYSQL /Database] 서브쿼리 (0) | 2023.04.18 |
---|---|
[MYSQL/Database] select 문,orderby 연산자- 비교,논리,범위 (0) | 2023.04.17 |
[MYSQL /Database] Mysql 잠금(lock)- Read lock, Write lock,dead lock (0) | 2023.04.17 |
댓글