문제 링크
개념
DISTINCT
조회할 때 중복을 제거 하고 싶을 때 사용하면 된다.
SELECT DISTINCT col1, col2, ...
FROM table;JOIN 종류
JOIN의 종류는 여러가지가 있는데 상황에 따라 적합한 JOIN의 종류가 다르기 때문에 다 알아두는 것이 좋다.
(INNER) JOIN
두 테이블의 교집합, ON절의 조건이 일치하는 결과를 출력한다.
# 아래의 두 쿼리문은 같은 결과값을 출력한다.
# 1
SELECT *
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id;
# 2
SELECT *
FROM table1 t1, table2 t2;LEFT/RIGHT OUTER JOIN
특정 테이블을 기준으로 조합하는 JOIN이다.
예시를 하나 들자면 게시물에 달린 댓글을 조회할 때도 이를 사용한다. 댓글이 달린 게시물도 있고 댓글이 하나도 안 달린 게시물도 있기 때문에 기준을 게시물 테이블로 하여 댓글 테이블을 LEFT/RIGHT OUTER JOIN 해야 한다.
# LEFT, RIGHT 어떤걸 사용하던 기준만 똑같다면 같은 결과 집합이 나온다.
# 컬럼 순서는 달라지지만 내용은 같다.
# 1
SELECT *
FROM board b
LEFT JOIN reply r
ON b.id = r.boardId;
# 2
SELECT *
FROM reply r
RIGHT JOIN board b
ON b.id = r.boardId;UNION
두 테이블의 합집합, 여러 SELECT문의 결과를 하나의 결과 집합으로 표현할 때 사용한다.
각각의 SELECT문으로 선택된 필드의 개수와 타입, 순서가 모두 같아야 한다.
→ 컬럼 위치를 기준으로 하여 합쳐지기 때문이다.
SELECT id, name
FROM students
UNION
SELECT id, name
FROM teachers;기본으로 DISTINCT가 적용되어 있다.
UNION ALL
UNION에서 중복되는 행까지 모두 출력하고 싶다면(=UNION에서 DISTINCT를 제거하고 싶다면) ALL을 붙이면 된다.
UNION / UNION ALL 실행순서
- SELECT 1 실행
- SELECT 2 실행
- 결과 합치기
- UNION일 경우 DISTINCT 수행
SELF JOIN
같은 테이블을 두 번 사용할 때 사용한다.
# EX1
SELECT *
FROM employees e
JOIN employees m
# EX2
SELECT *
FROM employees e
LEFT JOIN employees m제출 답안
SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D
JOIN SKILLCODES S
ON (D.SKILL_CODE & S.CODE) = S.CODE
WHERE S.NAME IN ('Python', 'C#')
ORDER BY D.ID;참고 자료
Share article