관계와 조인의 이해
✅ 관계(Relation)란?
관계는 데이터베이스에서 테이블(table)을 의미합니다.
즉, 하나의 테이블이 하나의 관계입니다.
- 관계형 데이터베이스(Relational Database)는 데이터를 **행(Row)**과 열(Column) 형태로 저장합니다.
- 각 열은 속성(attribute), 각 행은 튜플(tuple)이라고 부릅니다.
- 예를 들어, 학생이라는 테이블이 있다면:
| 학번 | 이름 | 학년 |
| 1001 | 홍길동 | 2학년 |
| 1002 | 이순신 | 3학년 |
이 테이블(학생)이 하나의 관계입니다.
✅ 조인(Join)이란?
조인은 두 개 이상의 테이블(관계)을 연결하여 관련 데이터를 함께 조회하는 작업입니다.
조인이 필요한 이유는:
- 관계형 데이터베이스에서는 중복을 줄이기 위해 정보를 여러 테이블로 나누기 때문입니다.
- 예를 들어 학생 정보는 학생 테이블, 성적 정보는 성적 테이블에 나눠 저장할 수 있습니다.
- 이때, 학생과 성적 정보를 같이 보려면 두 테이블을 조인해야 합니다.
✅ 조인의 종류
- 내부 조인 (INNER JOIN)
- 두 테이블에서 조건이 일치하는 행만 출력합니다.
SELECT 학생.이름, 성적.과목, 성적.점수 FROM 학생 INNER JOIN 성적 ON 학생.학번 = 성적.학번; - 외부 조인 (OUTER JOIN)
- 조건이 일치하지 않아도 한쪽 테이블의 모든 행을보여줍니다.
- 종류: LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN
- 자체 조인 (SELF JOIN)
- 한 테이블을 자기 자신과 조인할 때 사용합니다.
- 교차 조인 (CROSS JOIN)
- 두 테이블의 모든 행을 곱해서 조합합니다. (모든 가능한 조합)
요약하자면,
- 관계 = 테이블
- 조인 = 테이블 간의 연결
모델이 표현하는 트랜잭션의 이해
✅ 트랜잭션(Transaction)이란?
트랜잭션은 데이터베이스에서 수행되는 작업의 논리적 단위입니다.
보통 하나의 트랜잭션은 여러 SQL 문장을 포함하며, 이 모든 작업이 성공하거나 실패하면 모두 되돌리는 것이 원칙입니다.
예: A 계좌에서 B 계좌로 송금
- A의 잔액에서 10,000원 차감
- B의 잔액에 10,000원 추가
- → 이 두 작업은 모두 성공하거나, 모두 취소되어야 합니다.
✅ 트랜잭션의 4가지 특성 (ACID)
- Atomicity (원자성)
- 트랜잭션은 모두 수행되거나 전혀 수행되지 않아야 합니다.
- Consistency (일관성)
- 트랜잭션 실행 전후에 데이터의 무결성이 유지되어야 합니다.
- Isolation (고립성)
- 동시에 여러 트랜잭션이 수행되더라도 서로 간섭하지 않아야 합니다.
- Durability (지속성)
- 트랜잭션이 완료되면, 그 결과는 영구적으로 반영되어야 합니다.
✅ 모델이 트랜잭션을 표현한다는 뜻은?
"모델이 트랜잭션을 표현한다"는 말은,
데이터베이스 시스템이 내부적으로 트랜잭션의 상태와 실행을 관리하고 추적할 수 있도록 모델링한다는 의미입니다.
예를 들어:
- 데이터베이스의 트랜잭션 모델은 다음과 같은 정보를 표현합니다.
- 트랜잭션의 시작과 종료 시점
- 어떤 데이터에 접근하고 수정했는지
- 충돌이나 롤백이 필요한지 여부
- 이를 통해 시스템은 동시성 제어, 복구, 무결성 유지를 구현할 수 있습니다.
✅ 간단한 비유
🧾 모델은 마치 "회계 장부"처럼
트랜잭션이 어떤 작업을 수행했는지 기록합니다.
이 기록이 있어야 문제가 생겼을 때 되돌릴 수 있고,
정합성을 보장할 수 있습니다.
Null 속성의 이해
✅ 1. 데이터 모델에서의 NULL 속성
데이터 모델에서 NULL은 값이 존재하지 않음을 의미합니다.
즉, "알 수 없음(unknown)", "적용 불가(not applicable)" 또는 "아직 입력되지 않음" 등의 의미로 해석됩니다.
예시:
| 학생ID | 이름 | 전화번호 |
| 1001 | 홍길동 | 010-1234-5678 |
| 1002 | 이순신 | NULL |
→ 이순신의 전화번호가 NULL인 이유는:
- 아직 입력하지 않았거나,
- 개인정보 보호로 비워두었거나,
- 해당 학생은 전화번호가 없을 수도 있습니다.
✅ 2. SQL에서의 NULL
SQL에서 NULL은 "값이 없음"을 나타내며, 숫자 0이나 빈 문자열 ''과는 다릅니다!
🎯 중요한 점:
- NULL = NULL → 거짓 (FALSE)→ 반드시 IS NULL 또는 IS NOT NULL을 사용해야 합니다.
- → NULL은 자신과도 같지 않다!
✅ 예제:
-- 잘못된 방식
SELECT * FROM 학생 WHERE 전화번호 = NULL;
-- 올바른 방식
SELECT * FROM 학생 WHERE 전화번호 IS NULL;
✅ 3. NULL과 관련된 연산 처리
- NULL이 포함된 산술 연산: 결과는 NULL
- SELECT 100 + NULL; -- 결과: NULL
- NULL이 포함된 비교 연산: 결과는 UNKNOWN
- SELECT * FROM 테이블 WHERE 컬럼 = NULL; -- X (항상 거짓)
- COALESCE() 또는 IFNULL() 사용으로 대체값 제공
- SELECT COALESCE(전화번호, '미입력') FROM 학생;
✅ 4. 왜 NULL을 주의해서 써야 할까?
- 집계 함수에 영향을 줍니다.
- SELECT AVG(점수) FROM 시험결과; -- NULL 값은 제외됨
- 논리 연산이 복잡해질 수 있음
- WHERE 조건1 OR 조건2 AND 조건3 → NULL 포함 시 예기치 않은 결과 가능
✅ 요약
| 항목 | 의미 |
| NULL | 값이 존재하지 않음, 알 수 없음 |
| 비교 방법 | =, != 사용 X → IS NULL 사용해야 함 |
| 연산 결과 | NULL과 연산하면 결과도 NULL |
| 집계 함수 | NULL은 자동 제외됨 |
이처럼 NULL은 단순히 "비어 있음"을 넘어 의미 있는 설계와 쿼리 작성에 큰 영향을 줍니다.
SQL에서 NULL을 올바르게 처리할 수 있으면 데이터 분석 정확도가 확 높아집니다.
'자격증 > SQL' 카테고리의 다른 글
| 오답노트 ( 관리구문 ) (0) | 2025.05.22 |
|---|---|
| 오답노트 ( SQL 활용_2 ) (1) | 2025.05.21 |
| 오답노트 ( SQL 활용_1 ) (1) | 2025.05.20 |
| 오답노트 ( SQL_2 ) (0) | 2025.05.19 |
| 오답노트 ( SQL 기본_1 ) (0) | 2025.05.19 |