목차
SQLD 공부 및 데이터 분석을 하기 위해 DB에 있는 값들을 불러올 때, SQL을 많이 활용했습니다.
이전에 독학하면서 공부했던 내용을 기록으로 남겨둡니다.
[Select문 이해하기]
Select문의 기본 구조
SELECT 열1, 열2, 열3
FROM 테이블명
WHERE 조건;
이 예시에서 열1, 열2, 열3은 데이터를 가져올 열의 이름이고, 테이블명은 데이터가 저장된 테이블의 이름입니다. WHERE 절은 조건문으로 필요할 때만 사용합니다. WHERE 절이 없다면, 그냥 특정 테이블에서 열1, 열2, 열3을 모두 뽑아줘가 됩니다.
예를 들어, "학생" 테이블이 아래와 같다고 할 때, 전공이 '컴퓨터공학'인 학생들의 정보를 선택하려면 다음과 같이 작성할 수 있습니다.
이름 | 학번 | 전공 |
A | 11 | 컴퓨터공학 |
B | 12 | 경영학 |
C | 13 | 컴퓨터공학 |
SELECT 이름, 학번, 전공
FROM 학생
WHERE 전공 = '컴퓨터공학';
결과
이름 | 학번 | 전공 |
A | 11 | 컴퓨터공학 |
C | 13 | 컴퓨터공학 |
[Join 활용하기]
JOIN 문은 데이터베이스의 두 개 이상의 테이블을 결합할 때 사용됩니다. 여러 테이블에서 데이터를 검색하고 적절한 유형의 조인(예: INNER, LEFT, RIGHT, FULL OUTER)을 사용할 수 있어야 합니다.
학생 테이블과 성적 테이블을 예시로 사용해보겠습니다.
학번 | 이름 |
11 | A |
13 | B |
14 | C |
학번 | 과목명 | 점수 |
11 | 국어 | A |
11 | 영어 | B |
11 | 수학 | C |
12 | 국어 | C |
12 | 영어 | B |
12 | 수학 | A |
13 | 국어 | B |
13 | 영어 | C |
13 | 수학 | A |
INNER JOIN
INNER JOIN은 두 테이블 간 열 값이 일치할 때만 행을 반환합니다. 예시는 다음과 같습니다.
SELECT 학생.학번, 학생.이름, 성적.과목명, 성적.점수
FROM 학생
INNER JOIN 성적
ON 학생.학번 = 성적.학번;
위 예시에서 학생 테이블과 성적 테이블은 학번 열을 기준으로 결합됩니다. 결과 테이블에는 학번, 이름, 과목명, 점수 열이 포함되며, 두 테이블의 학번 열 값이 일치하는 경우에만 반환됩니다.
결과
학번 | 이름 | 과목명 | 점수 |
11 | A | 국어 | A |
11 | A | 영어 | B |
11 | A | 수학 | C |
13 | B | 국어 | B |
13 | B | 영어 | C |
13 | B | 수학 | A |
LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN은 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 오른쪽 테이블에 일치하는 값이 없으면 NULL 값이 반환됩니다. 예시는 다음과 같습니다.
SELECT 학생.학번, 학생.이름, 성적.과목명, 성적.점수
FROM 학생
LEFT JOIN 성적
ON 학생.학번 = 성적.학번;
위 예시에서 학생 테이블은 왼쪽 테이블이고 성적 테이블은 오른쪽 테이블입니다. 학번 열을 기준으로 테이블을 결합합니다. 결과 테이블에는 학생 테이블의 모든 행과 성적 테이블의 일치하는 행이 포함되며, 성적 테이블에서 일치하는 값이 없는 경우 과목명과 점수 열은 NULL 값이 됩니다.
결과
학번 | 이름 | 과목명 | 점수 |
11 | A | 국어 | A |
11 | A | 영어 | B |
11 | A | 수학 | C |
13 | B | 국어 | B |
13 | B | 영어 | C |
13 | B | 수학 | A |
14 | C | NULL | NULL |
RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN은 LEFT JOIN과 반대로 연결하는 걸로 보면 됩니다. RIGHT JOIN은 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 왼쪽 테이블에 일치하는 값이 없으면 NULL 값이 반환됩니다. 예시는 다음과 같습니다.
SELECT 학생.학번, 학생.이름, 성적.과목명, 성적.점수
FROM 학생
RIGHT JOIN 성적
ON 학생.학번 = 성적.학번;
위 예시에서 학생 테이블은 왼쪽 테이블이고 성적 테이블은 오른쪽 테이블입니다. 학번 열을 기준으로 테이블을 결합합니다. 결과 테이블에는 성적 테이블의 모든 행과 학생 테이블의 일치하는 행이 포함되며, 학생 테이블에서 일치하는 값이 없는 경우 이름 열은 NULL 값이 됩니다.
결과
학번 | 이름 | 과목명 | 점수 |
11 | A | 국어 | A |
11 | A | 영어 | B |
11 | A | 수학 | C |
NULL | NULL | 국어 | C |
NULL | NULL | 영어 | B |
NULL | NULL | 수학 | A |
13 | B | 국어 | B |
13 | B | 영어 | C |
13 | B | 수학 | A |
FULL OUTER JOIN
학생 테이블과 성적 테이블을 사용하여 FULL OUTER JOIN을 수행하면 두 테이블의 모든 행을 결합한 결과를 얻을 수 있습니다. 이 때, 한쪽 테이블에서 일치하는 값이 없는 경우 해당 열은 NULL 값이 됩니다.
하지만, 대부분의 데이터베이스에서는 FULL OUTER JOIN을 직접 지원하지 않기 때문에, 이 예제에서는 LEFT JOIN과 RIGHT JOIN을 UNION ALL로 결합하여 FULL OUTER JOIN과 같은 결과를 만들어 냅니다.
SELECT 학생.학번, 학생.이름, 성적.과목명, 성적.점수
FROM 학생
LEFT JOIN 성적
ON 학생.학번 = 성적.학번
UNION ALL
SELECT 학생.학번, 학생.이름, 성적.과목명, 성적.점수
FROM 학생
RIGHT JOIN 성적
ON 학생.학번 = 성적.학번
WHERE 학생.학번 IS NULL;
결과
학번 | 이름 | 과목명 | 점수 |
11 | A | 국어 | A |
11 | A | 영어 | B |
11 | A | 수학 | C |
13 | B | 국어 | B |
13 | B | 영어 | C |
13 | B | 수학 | A |
14 | C | NULL | NULL |
NULL | NULL | 국어 | C |
NULL | NULL | 영어 | B |
NULL | NULL | 수학 | A |
이렇게 FULL OUTER JOIN 결과에서 학번 14인 학생 C는 성적 테이블에 없으므로 과목명과 점수 열은 NULL 값이 되며, 학번이 12인 학생은 학생 테이블에 없으므로 학번과 이름 열은 NULL 값이 됩니다.
여기까지 기본적인 내용을 공유해봤습니다.
'SQL > SQL 스터디' 카테고리의 다른 글
SQL 독학: 10가지 주요 날짜 및 시간 함수 (0) | 2023.04.23 |
---|---|
SQL 독학: 9가지 자주 쓰는 문자열 함수 알아보기 (0) | 2023.04.23 |
SQL 독학: 집계 함수 활용하기(데이터 요약 및 분석의 기본) (0) | 2023.04.22 |
SQL 독학: 정렬 및 그룹화 (order by, group by) (0) | 2023.04.22 |
SQL 독학: 조건문과 필터링 (1) | 2023.04.22 |
댓글