-- Departments 테이블 생성
-- 대학의 각 학과 정보를 저장
-- Departments 테이블은 대학 내의 각 학과 또는 부서를 나타냅니다. 
-- 이 테이블에는 학과의 고유 식별자, 학과 이름, 학과가 위치한 건물, 
-- 그리고 학과의 예산과 같은 정보가 포함됩니다. 
-- 학과는 대학의 기본적인 구성 단위로, 다양한 전공 과정과 연구 활동을 관리합니다. 
-- 예를 들어, "컴퓨터 과학과"나 "생물학과" 등이 이에 해당됩니다.
CREATE TABLE Departments (
    -- 학과의 고유 ID, 자동 증가
    -- 학과 이름, 필수 입력
    -- 학과 건물 위치, 선택적 입력
    -- 학과 예산, 필수 입력, 소수 두 자리까지
);

-- Professors 테이블 생성
-- 대학의 교수 정보를 저장
-- Professors 테이블은 대학의 교수님들에 대한 정보를 저장합니다. 
-- 각 교수는 고유 ID, 이름, 직급(예: 조교수, 부교수, 정교수), 그리고 사무실 위치 정보를 가지고 있습니다. 
-- 또한, 교수가 소속된 학과 정보도 저장되어야 합니다.
CREATE TABLE Professors (
    -- 교수의 고유 ID, 자동 증가
    -- 교수 이름, 필수 입력
    -- 교수 직급, 선택적 입력
    -- 교수 사무실 번호, 선택적 입력
    -- 소속 학과 ID
);

-- Courses 테이블 생성
-- Courses 테이블은 대학에서 제공하는 각각의 강의 과목을 나타냅니다. 
-- 이 테이블은 강의의 고유한 특성을 저장하는 데 사용됩니다. 
-- 예를 들어, 강의의 제목, 강의가 부여하는 학점 수, 그리고 이 강의가 어떤 학과에 속해 있는지 등의 
-- 정보가 포함됩니다. 한 강의가 여러 학기에 걸쳐 반복적으로 개설될 수 있지만, 
-- 강의의 기본적인 내용과 구조는 일반적으로 같습니다. 예를 들면:
-- ex) "데이터베이스 시스템"
-- ex) "일반화학"
-- ex) "마이크로경제학"
-- 이 테이블은 강의의 정의와 관련된 기본적인 정보를 담고 있으며, 
-- 실제 강의가 언제 어디서 이루어지는지의 세부 사항은 포함하지 않습니다.
CREATE TABLE Courses (
    -- 강의 고유 ID, 자동 증가
    -- 강의 제목, 필수 입력
    -- 강의 학점, 필수 입력
    -- 개설 학과 ID
);

-- Sections 테이블 생성
-- 강의 섹션(분반) 정보를 저장
-- Sections 테이블은 특정 강의(Courses 테이블에 정의된)가 구체적으로 언제, 어느 장소에서, 
-- 누가 가르치는지에 대한 정보를 관리합니다. 이는 같은 강의도 다른 시간, 다른 교수, 
-- 다른 장소에서 여러 번 제공될 수 있다는 사실을 반영합니다. 
-- 각 '섹션'은 동일 강의의 구체적인 인스턴스를 의미하며, 학기별로 각기 다른 교수가 담당할 수 있고, 
-- 강의 시간이나 장소도 달라질 수 있습니다. 
-- 예를 들어, "데이터베이스 시스템" 강의는 봄 학기에는 A 교수가 월요일 오전에 가르치고, 
-- 가을 학기에는 B 교수가 금요일 오후에 가르칠 수 있습니다.
CREATE TABLE Sections (
    -- 섹션 고유 ID, 자동 증가
    -- 강의 ID
    -- 개설 학기, 필수 입력
    -- 개설 연도, 필수 입력
    -- 담당 교수 ID
);

-- Students 테이블 생성
-- 대학의 학생 정보를 저장
-- Students 테이블은 대학에 재학 중인 학생들의 정보를 관리합니다. 
-- 이 테이블은 학생의 고유 ID, 이름, 생년월일, 그리고 성별을 포함합니다. 
-- 학생 데이터는 학생 관리, 학적 관리, 강의 등록 및 성적 처리 등의 용도로 사용됩니다. 
-- 학생 정보는 대학 운영의 가장 기본이 되는 데이터 중 하나입니다.
CREATE TABLE Students (
    -- 학생 고유 ID, 자동 증가
    -- 학생 이름, 필수 입력
    -- 생년월일, 선택적 입력
    -- 성별, 선택적 입력
);

-- Enrollments 테이블 생성
-- 학생의 강의 등록 정보를 저장
-- Enrollments 테이블은 학생들이 각 학기에 등록하는 강의 섹션의 정보를 저장합니다. 
-- 이 테이블은 학생 ID와 섹션 ID를 외래 키로 사용하여, 
-- 어떤 학생이 어떤 강의에 등록했는지를 나타냅니다. 
-- 또한, 해당 강의에서 학생이 받은 성적도 저장할 수 있습니다. 
-- 이 테이블을 통해 학생들의 수강 신청 및 성적 관리가 이루어집니다.
CREATE TABLE Enrollments (
    -- 등록 고유 ID, 자동 증가
    -- 학생 ID
    -- 등록 섹션 ID
    -- 성적, 선택적 입력
);

초급

  1. 문제: 모든 학과의 이름을 조회하세요.
  2. 문제: 모든 교수의 이름과 직급을 조회하세요.
  3. 문제: 'Science Center' 건물에 소속된 학과의 이름을 조회하세요.
  4. 문제: 학생들의 이름과 생년월일을 조회하세요.

중급 (조인 포함)

  1. 문제: 각 학과에 소속된 교수의 이름을 조회하세요.
  2. 문제: 'Computer Science' 학과에서 개설된 강의의 제목을 조회하세요.
  3. 문제: 모든 강의의 제목과 해당 강의를 개설한 학과의 이름을 조회하세요.
  4. 문제: 2023년 봄학기에 개설된 모든 강의의 섹션 정보(강의 제목, 학기, 연도)를 조회하세요.
  5. 문제: 각 학과의 평균 예산을 조회하세요.
  6. 문제: 각 학생이 등록한 강의의 수를 조회하세요.

고급 (복잡한 조인 및 서브쿼리)

  1. 문제: 'John Doe' 교수가 가르치는 강의의 제목을 조회하세요.
  2. 문제: 성적이 'A'인 학생의 이름과 강의 제목을 조회하세요.
  3. 문제: 각 교수가 담당하는 강의의 수를 조회하세요.
  4. 문제: 각 학과별로 평균 학점이 가장 높은 강의를 조회하세요.