CodeGym /행동 /SQL SELF /students 테이블 만들기랑 courses 테이블이랑 연결하기

students 테이블 만들기랑 courses 테이블이랑 연결하기

SQL SELF
레벨 20, 레슨 0
사용 가능

우리 지금까지 배운 거 잠깐 정리하고 넘어가자. 진짜 하나씩 차근차근 다 짚어볼 거야. 앞으로 배울 내용도 다 이거 바탕이니까, 각 명령어가 뭘 하는지 완전하게 이해하고 있으면 좋아.

학생이랑 강의 예시로 다시 한 번 처음부터 끝까지 해볼게. 테이블 만드는 것부터 각 단계에서 무슨 일이 일어나는지까지 다 볼 거야. 준비됐지?

이제 students 테이블을 만들어서 학생 정보를 저장하고, courses 테이블이랑 외래 키로 연결해볼 거야. 이 과정에서 외래 키가 엔터티 사이 관계를 어떻게 모델링하는지 볼 수 있어.

students 테이블 만들기

students 테이블은 학생의 고유 아이디, 이름, 생년월일을 저장할 거야. CREATE TABLE 명령어로 만들어볼게.

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY, -- 각 레코드의 고유 키
    name TEXT NOT NULL,            -- 학생 이름 (필수)
    birth_date DATE                -- 학생 생년월일
);

여기서 무슨 일이 일어나냐면?

  1. student_id SERIAL PRIMARY KEY: 이건 각 학생의 고유 아이디야. SERIAL 타입은 자동 증가 필드고, PRIMARY KEY는 각 행마다 유일하게 만들어줘.
  2. name TEXT NOT NULL: 학생 이름 저장하는 필드야. NOT NULL로 해놔서 이름 없이 레코드 추가 못 해.
  3. birth_date DATE: 생년월일 저장하는 필드. DATE 타입이라 날짜 다루기 좋아.

만약 테이블이 사람이라면 student_id는 여권 번호, name은 이름, birth_date는 가끔 숨기고 싶은 생일 같은 거지. 근데 DB에선 다 중요해!

courses 테이블 만들기

이번엔 강의 정보를 저장할 테이블을 만들어볼게. 강의 아이디, 제목, 설명이 들어갈 거야.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- 강의 고유 아이디
    title TEXT NOT NULL,           -- 강의 제목 (필수)
    description TEXT               -- 강의 설명
);

여기서 무슨 일이 일어나냐면?

  1. course_id SERIAL PRIMARY KEY: 이것도 자동 증가 필드로, 각 강의마다 고유 아이디를 만들어줘.
  2. title TEXT NOT NULL: 강의 제목 저장하는 필드. NOT NULL로 해놔서 이름 없는 강의는 못 만들어.
  3. description TEXT: 강의 설명 저장하는 필드. 이건 옵션이라 비워도 돼 (NOT NULL 없음).

제목 없는 강의는 표지 없는 책이랑 똑같아. 근데 DB는 그걸 허락 안 해!

students 테이블이랑 courses 테이블 연결하기

이제 각 학생이 한 강의에만 등록된다고 해보자. 그러면 courses 테이블에 외래 키를 추가해서 students 테이블의 아이디를 참조하게 만들 거야.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- 강의 고유 아이디
    title TEXT NOT NULL,           -- 강의 제목 (필수)
    description TEXT,              -- 강의 설명
    student_id INT REFERENCES students(student_id) -- students 테이블과 연결하는 외래 키
);

student_id INT REFERENCES students(student_id)가 뭐 하는 거냐면?

  1. student_id 필드를 만들어서 students 테이블의 student_id를 참조하게 해.
  2. 테이블 간 연결은 REFERENCES 키워드로 해줘.
  3. 즉, courses에 데이터 넣을 때 student_id 값이 students에 실제로 있어야 해. 만약 없는 student_id로 강의 등록하려고 하면 에러 나와.

테이블에 데이터 넣기

테이블 다 만들었으니까 이제 학생이랑 강의 좀 넣어보자. 아무도 없는 강의실은 심심하잖아?

학생 추가하기

INSERT INTO students (name, birth_date) VALUES
('Alex Lin', '2000-05-10'),
('Maria Chi', '1998-02-15'),
('Otto Song', '2001-09-25');

강의 추가하기

INSERT INTO courses (title, description, student_id) VALUES
('SQL 기초', 'SQL 기본 문법 배우기', 1),
('관계형 데이터베이스', '관계형 모델 이해하기', 2),
('PostgreSQL 입문', 'PostgreSQL 설치 및 설정', 3);

각 강의에 student_id를 지정해서 students 테이블의 학생이랑 연결했어.

테이블 연결 확인하기

이제 진짜로 테이블이 연결됐는지 확인해보자. 강의 정보랑 학생 이름을 같이 보여주는 쿼리를 만들어볼게.

SELECT
    courses.title AS course_title,
    courses.description AS course_description,
    students.name AS student_name
FROM 
    courses
JOIN 
    students ON courses.student_id = students.student_id;

예시 결과: 쿼리 결과:

course_title course_description student_name
SQL 기초 SQL 기본 문법 배우기 Alex Lin
관계형 데이터베이스 관계형 모델 이해하기 Maria Chi
PostgreSQL 입문 PostgreSQL 설치 및 설정 Otto Song

외래 키로 강의랑 학생을 연결했으니까, 이제 한 번에 관련된 데이터 다 뽑아올 수 있어. 이게 바로 관계형 모델의 힘이지!

요약

지금까지 한 거 다 이해됐지? 앞으로 더 나아갈 거니까, 지금 배운 거 확실히 알고 있으면 좋아!

2
과제
SQL SELF, 레벨 20, 레슨 0
잠금
`students` 테이블 생성
`students` 테이블 생성
2
과제
SQL SELF, 레벨 20, 레슨 0
잠금
`courses` 테이블과 외래 키 생성하기
`courses` 테이블과 외래 키 생성하기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION