Skip to content

Section 2 #2

@echo-youn

Description

@echo-youn

Section 2-1

관계형 데이터베이스 다루기

  • DBeaver 설치 (Database Client)
  • 데이터베이스와 연결하기
  • server host: tmdwo07278.cafe24.com
  • Database: tmdwo07278
  • Username: tmdwo07278
  • Password: q1w2e3r4

Mysql 데이터 타입

  • varchar
  • int
  • bigint
  • char
  • tinyint
  • datetime

DDL

CREATE TABLE <tbl_name>
(
  <col_name> <column_definition>,
  ...
);

-- 학생 테이블
CREATE TABLE tmdwo07278.edu_{이름}_student (
	id BIGINT auto_increment NOT NULL,
	name varchar(100) NOT NULL,
	gender varchar(20) NOT NULL,
	age INT NOT NULL,
	isGraduated TINYINT DEFAULT 0 NOT NULL,
	createtime datetime DEFAULT now() NOT NULL,
	lastModifiedTime datetime NULL,
	CONSTRAINT edu_echo_student_pk PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;
ALTER TABLE <테이블명>
ADD COLUMN <col_name> <column_definition>;

ALTER TABLE tmdwo07278.edu_{이름}_student ADD mobile varchar(20) NULL;

DML

SELECT [col_name]
FROM [tbl_name]
WHERE [col_name] = '데이터' AND [col_name] > '데이터';
INSERT [tbl_name] ( [col_name], [col_name]...)
VALUES('1', '2', '3'....);
INSERT INTO edu_{이름}_student(id, name, gender, age, isGraduated, createtime, lastModifiedTime) 
SELECT id, name, gender, age, isGraduated, createtime, lastModifiedTime
FROM edu_echo_student;
UPDATE [tbl_name]
SET [col_name] = '수정할 값'
WHERE [col_name] = '수정할 데이터 조회'
DELETE FROM [tbl_name]
WHERE [col_name] = '';

조회 연습하기

1. id가 3인 학생의 이름, 성별, 나이를 찾으세요.
2. id가 30이상 50미만의 학생을 찾으시오. (전체)
3. 이름이 "Nelle Harrington"인 학생을 찾으시오.
4. 여성 중 나이가 23살이며 졸업한 학생을 찾으세요.

데이터 집계하기

GroupBy

예시)

-- 학생 몇명인지 전체 조회
SELECT COUNT(1) as cnt
FROM edu_{이름}_student;

-- 재학중인 학생 몇명인지 조회
SELECT COUNT(1) as cnt
FROM edu_{이름}_student
WHERE isGraduated = 0;

-- 여학생 수
SELECT COUNT(1) as cnt
FROM edu_{이름}_student
WHERE gender = 'FEMALE';

-- 나이별 학생수
SELECT age, COUNT(1) as cnt
FROM edu_{이름}_student
GROUP BY age;

-- 나이별 성별별 학생수
SELECT age, gender, COUNT(1) as cnt
FROM edu_{이름}_student
GROUP BY age, gender;

-- 문제1 나이가 24살 이상인 남학생 중 졸업하지 않은 학생수를 구하세요

-- 문제2 나이가 24살 이상인 학생 중 졸업하지 않은 학생 수, 나이의 합, 나이의 평균을 구하세요. (COUNT 함수, SUM 함수, AVG함수 사용)

Section 2-2

관계형 데이터베이스

키에 대한 설명

기본키 (Primary Key)

테이블에서 행(row)의 식별자로 이용되는 키를 기본키라 합니다.

외래키 (Foreign key)

테이블에서 다른 테이블의 식별자로 이용되는 키를 외래키라 합니다.

예시)

erDiagram
    STUDENT ||--|| MAJOR : ""
    STUDENT {
        studentId bigint PK "고유 번호(학번)"
        name varchar "이름"
        gender varchar "성별"
        majorId bigint FK "주 전공"
        majorName varchar "전공 이름"
    }

    MAJOR {
        majorId bigint PK "전공"
        majorName varchar "전공 이름"
    }
Loading

조인이란?

데이터를 조회 시 외래 키 등을 활용해 다른 테이블을 조회하는 것.

사전 데이터 준비

-- majorId 컬럼 추가
ALTER TABLE edu_{이름}_student ADD majorId BIGINT NULL;

-- edu_{이름}_major 테이블 생성
CREATE TABLE edu_{이름}_major(
    majorId BIGINT auto_increment primary key,
    majorName VARCHAR(50) NOT NULL,
    professor VARCHAR(50) NOT NULL
);

-- 데이터 생성
-- 1. 물리학과, 아인슈타인
-- 2. 화학공학과, 프리츠 하버
-- 3. 컴퓨터공학과, 앨런 튜링
-- 4. 체육학과, 김연아
-- 5. 수학과, 피타고라스
-- 6. 물리학과, 오펜하이머
-- 7. 화학공학과, 오펜하이머
-- 8. 수학과, 레온하르트 오일러
-- 9. 컴퓨터공학과, 빌 조이
-- 10. 체육학과, 박지성

-- 막간에 코딩테스트(?) 골고루 학생한테 입력해주기 (id가 10, 20, 30... 인 학생에게 체육학과, 박지성의 전공 id를 입력하시오)

```sql
UPDATE edu_{이름}_student
SET majorId = ?
WHERE <where clause>;

조인 해보기

-- 전공 테이블 기준으로 조회

SELECT (4)
FROM (1)
WHERE (2)
GROUP BY (3);

SELECT *
FROM <테이블 A> <별칭 A> JOIN <테이블 B> <별칭 B> ON <A 테이블의 fk> = <B 테이블의 PK>;

-- 화학공학과 학생들의 학번들 조회
SELECT s.id
FROM edu_{이름}_major m INNER JOIN edu_{이름}_student s ON m.id = s.majorId
WHERE m.name = '화학공학과';

-- 문제 오펜하이머의 수업을 듣는 재학생들 이름, 성별, 나이, 전화번호

-- 문제 앨런 튜링의 컴퓨터공학수업을 들은 졸업생의 전공id, 학번, 전공명, 이름, 성별, 나이, 전화번호

LEFT, RIGHT, INNER, OUTER

-- 신입생 입학
INSERT INTO edu_{이름}_student(name, gender, age, isGraduated)
SELECT name, gender, age, 0
FROM edu_echo2_student;

-- 학번 짝수인 신입생들은 피타고라스의 수학 강의가 필수라 할당해주어함 (createtime 활용)

나머지 학생들 조회 해보자-

일대일, 일대다, 다대다

일상생활 속 예시

1 대 1 : `계정: 비밀번호`, `사람 : 주민등록번호` 등...
1 대 다: `부모님(아버지, 어머니) : 자식(1~n명)`, `학생 : 성적`
다 대 다: `학생 : 강의`, `학생 : 동아리`

ERD

잼보드?!

-- 동아리 테이블

-- 학점 테이블

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions