테이블 합치기
INNER JOIN
특징
- 두 테이블 모두에 있는 값만 합치기
!Pasted image 20241105110527.png
문법
SELECT [컬럼 이름]
FROM [테이블 A 이름]
INNER JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B이름].[컬럼 B이름]
WHERE 조건식;
예시
SELECT *
FROM mypokemon
INNER JOIN abiliy
ON mypokemon.number = ability.number;
결과
LEFT JOIN & RIGHT JOIN
LEFT JOIN 특징
- 왼쪽 테이블에 있는 값만 합치기
RIGHT JOIN 특징
- 오른쪽 테이블에 있는 값만 합치기
문법
SELECT [컬럼 이름]
FROM [테이블 A 이름]
LEFT JOIN (또는) RIGHT JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B이름].[컬럼 B이름]
WHERE 조건식;
LEFT JOIN 예시
SELECT *
FROM mypokemon
LEFT JOIN abiliy
ON mypokemon.number = ability.number;
LEFT JOIN 결과
RIGHT JOIN 예시
SELECT *
FROM mypokemon
RIGHT JOIN abiliy
ON mypokemon.number = ability.number;
RIGHT JOIN 결과
OUTER JOIN
MySQL은 OUTER JOIN 키워드가 존재하지 않습니다
문법
SELECT [컬럼이름]
FROM [테이블 A이름]
LEFT JOIN [테이블 B이름]
ON [테이블 A이름].[컬럼 A 이름] = [테이블 B 이름].[컬럼 B 이름]
UNION
SELECT [컬럼이름]
FROM [테이블 A이름]
LEFT JOIN [테이블 B이름]
ON [테이블 A이름].[컬럼 A 이름] = [테이블 B 이름].[컬럼 B 이름];
예시
SELECT *
FROM mypokemon
LEFT JOIN ability
ON mypokemon.number = ability.number
UNION
SELECT *
FROM mypokemon
RIGHT JOIN ability
ON mypokemon.number = ability.number;
결과
CROSS JOIN
- 두 테이블에 있는 모든 값을 각각 합치기
! 300
문법
SELECT [컬럼 이름]
FROM [테이블 A 이름]
CROSS JOIN [테이블 B 이름]
WHERE 조건식;
예시
SELECT *
FROM mypokemon
CROSS JOIN ability;
결과
! 300
SELF JOIN
- 같은 테이블에 있는 값 합치기
! 300
문법
SELECT [컬럼이름]
FROM [테이블 A이름] AS t1
INNER JOIN [테이블 A 이름] AS t2
ON t1.[컬럼 A 이름] = t2.[컬럼 B 이름]
WHERE 조건식;
예시
SELECT *
FROM mypokemon AS t1
INNER JOIN mypokemon AS t2
ON t1.number = t2.number;
결과
UNION, UNION ALL
! 300
특징
형식으로 사용합니다.
[쿼리 A]
와[쿼리 B]
의 결과 값을 합쳐서 보여줍니다.UNION
은 동일한 값을 제외하고 보여주며,UNION ALL
은 동일한 값도 포함하여 보여줍니다.
[쿼리 A]
와[쿼리 B]
의 결과 값의 개수가 같아야 합니다.- 만약 다를 경우 에러가 발생합니다.
ORDER BY
는 쿼리 가장 마지막에 작성 가능하고,[쿼리 A]
에서 가져온 컬럼으로만 가능합니다.
문법
UNION
SELECT [컬럼 이름]
FROM [테이블 A 이름]
UNION
SELECT [컬럼 이름]
FROM [테이블 이름];
UNION ALL
SELECT [컬럼 이름]
FROM [테이블 A 이름]
UNION ALL
SELECT [컬럼 이름]
FROM [테이블 B 이름];
예시
! 300
SELECT name
FROM mypokemon
UNION ALL
SELECT name
FROM friendpokemon;
결과 - ORDER BY
사용 예제
SELECT number, name, attack
FROM mypokemon
UNION
SELECT number, name, attack
FROM friendpokemon
ORDER BY number;
에서 가져온 컬럼으로 만 가능합니다.
! 300
!Pasted image 20241113102156.png
다른 SQL에서는
INTERSECT
와 MINUS
로 표현되는 문법이 MySQL은 해당 하지 않습니다.
- MySQ해당 문법을
JOIN
으로 해결합니다.
교집합
문법
SELECT [컬림 이름]
FROM [테이블 A 이름] AS A
INNER JOIN [테이블 B 이름] AS B
ON A.[컬럼1 이름] = B.[컬럼1 이름] AND ... AND A.[컬럼N 이름] = B.[컬럼N 이름]
교집합을 확인하고 싶은 컬럼은 모두 다 기준으로 두고 합쳐줘야합니다.
! 500
예시
SELECT A.name
FROM mypokemon AS B
결과
! 300
차집합
SELECT [컬럼 이름]
FROM [테이블 A 이름] AS A
LEFT JOIN [테이블 B 이름] AS B
ON A.[컬럼1 이름] = B.[컬럼1 이름] AND ... AND A[컬럼N 이름]
예제
SELECT A.name
FROM mypokemon as A
LEFT JOIN friendpokemon AS B
ON A.name = B.name
WHERE B.name IS NULL
! 300