기본키 (Primary Key, PK)
- 한 테이블에서 하나의 행을 유일하게 구분할 수 있는 컬럼
- 각 테이블에서 기본키는 하나밖에 설정할 수 없다.
- 기본키로 설정된 컬럼에는 중복된 값이 없어야 한다. (UNIQUE)
- 기본키로 설정된 컬럼에는 NULL 값이 없어야 한다. (NOT NULL)
후보키 (Candidate Key)
- 기본키가 될 자격을 갖추었지만 기본키로 선택되지 않은 컬럼
외래키 (Foreign Key, FK)
- 다른 테이블에서는 기본키(또는 후보키)이지만 해당 테이블에서는 중복되는 값을 지닌 일반 컬럼인 경우
ex: employees의 department_id는 외래키
departments의 department_id는 기본키
- 외래키 컬럼에는 다른 테이블의 기본키 컬럼에 없는 값을 넣으면 안된다. (참조 무결성)
- 어떤 테이블의 기본키(또는 후보키)가 해당 테이블의 외래키로 설정되었다면
두 테이블 간에는 1:N 관계(일대다 관계)가 형성되었다고 볼 수 있다.
ex: 부서 하나에 사원 여러명이 소속할 수 있다.
개체 간 관계의 종류
- 1:1 관계 : 같은 테이블 안에 컬럼으로 넣으면 된다.
- 1:N 관계 : 부서 - 사원, 글 - 댓글, 회원 - 글, 매니저 - 사원 ...
- N:N 관계 : 피자 - 토핑, 손님 - 메뉴, 라이더 - 음식점 ...
JOIN
- 기본키와 외래키로 관계가 형성되어있는 두 테이블의 정보를 종합하여 조회하는 것
- CROSS JOIN
- EQUI JOIN
- NON-EQUI JOIN
- SELF JOIN
- OUTER JOIN
- ...
CROSS JOIN
- 조인에 사용되는 테이블들의 모든 행을 조합하여 나올 수 있는 모든 경우를 출력하는 JOIN
- 모든 행을 조합했을 뿐인 쓸데없는 정보
SELECT * FROM employees; -- 107 rows
SELECT * FROM departments; -- 27 rows
SELECT * FROM employees, departments; -- 2889 rows (107 * 27)
-- 두 테이블에 존재하는 모든 컬럼을 조회할 수 있다.
-- 같은 이름의 컬럼이 존재하는 경우에는 반드시 어느 테이블 소속인지 명확하게 해야한다.
SELECT
employee_id,
last_name,
employees.department_id,
departments.department_id,
department_name
FROM
employees,
departments;
EQUI JOIN
- 두 테이블에서 서로 동일한 값을 지닌 컬럼들(주로 기본키와 외래키)을 이용하여 CROSS JOIN으로부터 의미있는 데이터를 걸러내는 JOIN
SELECT
employee_id,
last_name,
employees.department_id,
departments.department_id,
department_name
FROM
employees,
departments
WHERE
employees.department_id = departments.department_id
ORDER BY
employees.employee_id;
'DB > Oracle' 카테고리의 다른 글
[Oracle DB] SELF JOIN (0) | 2023.04.21 |
---|---|
[Oracle DB] OUTER JOIN (0) | 2023.04.21 |
[Oracle DB] 정렬, 소수점 다루기 (0) | 2023.04.21 |
[Oracle DB] 그룹 함수 (0) | 2023.04.21 |
[Oracle DB] CASE (0) | 2023.04.21 |