1. 제 1 정규화
한 칸엔 하나의 데이터만, JSON이나 array 데이터 타입 쓰면 한 칸에 여러 자료를 저장할 수 있다.
하지만 일부 수정은 어렵고 느릴 수 있다.
2.제 2정규화
partial dependency를 제거한 테이블
현재 컬럼과 관련 없는 컬럼을 다른 테이블로 빼는 작업
비관계형 db들은 정규화 안하는 경우 많다.
3.제 3정규화
-어떤 테이블의 primary key를 사용하는지 선택
-어떤 컬럼에 foreign key 등록할지 선택
-저장까지 하기
CREATE TABLE 테이블명 (
id INT PRIMARY KEY,
프로그램 VARCHAR(100),
강사id INT REFERENCES 다른테이블(다른테이블컬럼)
)
CREATE TABLE 테이블명 (
id INT,
프로그램 VARCHAR(100),
강사id INT,
CONSTRAINT 제약조건작명 PRIMARY KEY (id),
CONSTRAINT 제약조건작명2 FOREIGN KEY (강사id) REFERENCES 다른테이블(다른테이블컬럼),
)
ALTER TABLE 테이블명 ADD
CONSTRAINT 제약조건작명 FOREIGN KEY (강사id) REFERENCES teacher(id)
SELECT 프로그램, 가격, 강사, 출신대학
FROM program, teacher
WHERE program.강사id = teacher.id
SELECT * FROM program INNER JOIN teacher
ON 강사.id = teacher.id
2. CROSS JOIN
CROSS JOIN써도 모든 행의 경우가 나온다. (더미 데이터)
SELECT FROM program INNER JOIN teacher
SELECT FROM program CROSS JOIN teacher
SELECT *
FROM 테이블1
INNER JOIN 테이블2 ON 조건1
INNER JOIN 테이블3 ON 조건2
왼쪽 테이블 전체 + 공통된 행 출력하고 싶으면 LEFT JOIN
오른쪽 테이블 전체 + 공통된 행 출력하고 싶으면 RIGHT JOIN
SELECT *
FROM program
LEFT JOIN teacher
ON program.강사id = teacher.id
SELECT *
FROM program
LEFT JOIN teacher
ON program.강사id = teacher.id
WHERE 컬럼명 IS NULL
LEFT JOIN과 RIGHT JOIN 결과를 합해서 출력하고 싶으면 FULL JOIN 문법 사용
SELECT *
FROM program
FULL JOIN teacher
ON program.강사id = teacher.id
같은 뜻이라 대부분의 DBMS에선 혼용해서 사용가능