테이블 합치기

INNER JOIN

특징

Pasted image 20240229135224.png

문법

SELECT [컬럼 이름]
FROM [테이블 A 이름]
INNER JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B이름].[컬럼 B이름]
WHERE 조건식;

예시

Pasted image 20241105110930.png

SELECT *
FROM mypokemon
INNER JOIN abiliy
ON mypokemon.number = ability.number;

결과

Pasted image 20241105110946.png

LEFT JOIN & RIGHT JOIN

LEFT JOIN 특징

Pasted image 20240229135239.png

RIGHT JOIN 특징

Pasted image 20240229135315.png

문법

SELECT [컬럼 이름]
FROM [테이블 A 이름]
LEFT JOIN (또는) RIGHT JOIN [테이블 B 이름]
ON [테이블 A 이름].[컬럼 A 이름] = [테이블 B이름].[컬럼 B이름]
WHERE 조건식;

LEFT JOIN 예시

Pasted image 20241105111349.png

SELECT *
FROM mypokemon
LEFT JOIN abiliy
ON mypokemon.number = ability.number;

LEFT JOIN 결과

Pasted image 20241105111415.png

RIGHT JOIN 예시

Pasted image 20241105111455.png

SELECT *
FROM mypokemon
RIGHT JOIN abiliy
ON mypokemon.number = ability.number;

RIGHT JOIN 결과

Pasted image 20241105111521.png

OUTER JOIN

MySQL은 OUTER JOIN 키워드가 존재하지 않습니다

Pasted image 20241113085247.png

문법

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;

결과

Pasted image 20241113090606.png

CROSS JOIN

문법

SELECT [컬럼 이름]
FROM [테이블 A 이름]
CROSS JOIN [테이블 B 이름]
WHERE 조건식;

예시

Pasted image 20241113093527.png

SELECT *
FROM mypokemon
CROSS JOIN ability;

결과

! 300

SELF JOIN

문법

SELECT [컬럼이름]
FROM [테이블 A이름] AS t1
INNER JOIN [테이블 A 이름] AS t2
ON t1.[컬럼 A 이름] = t2.[컬럼 B 이름]
WHERE 조건식;

예시

Pasted image 20241113094538.png

SELECT *
FROM mypokemon AS t1
INNER JOIN mypokemon AS t2
ON t1.number = t2.number;

결과

Pasted image 20241113094552.png

UNION, UNION ALL

! 300

특징

형식으로 사용합니다.

  • [쿼리 A][쿼리 B]의 결과 값을 합쳐서 보여줍니다.
  • UNION 은 동일한 값을 제외하고 보여주며, UNION ALL 은 동일한 값도 포함하여 보여줍니다.

문법

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에서는 INTERSECTMINUS로 표현되는 문법이 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


#SQL