sql 형식의 데이터베이스에 표를 와 값을 만들어 넣고, 값을 찾아오고, 값을 바꾸고, 값을 삭제하는 법을 배웠다.
그리고 예제를 풀어보았다.
예제는 다음과 같다.
1. 수강생을 관리하는 MANAGER 테이블을 만들어보세요.
- 컬럼은 총 id, name, student_code 입니다.
- id는 bigint 타입이며 PK입니다.
- name은 최소 2자 이상, varchar 타입, not null 입니다.
- student_code는 STUDENT 테이블을 참조하는 FK이며 not null 입니다.
- FK는 CONSTRAINT 이름을 ‘manager_fk_student_code’ 로 지정해야합니다.
- comment를 사용해서 컬럼과 테이블에 설명을 추가합니다.
CREATE TABLE IF NOT EXISTS MANAGER
(
id bigint primary key comment 'PK',
name varchar(100) not null comment '매니저명',
student_code varchar(100) not null comment '수강생코드',
CONSTRAINT manager_fk_student_code foreign key(student_code) references student(student_code)
);
COMMENT ON TABLE MANAGER IS '매니저';
2. ALTER, MODIFY를 이용하여 MANAGER 테이블의 id 컬럼에 AUTO_INCREMENT 기능을 부여하세요.
ALTER TABLE MANAGER ALTER COLUMN id bigint auto_increment;
ALTER COLUMN을 이용해 primary key 인 id에 1씩 자동으로 증가하여 고유번호를 부여해주는 AUTO_INCREMENT기능을 부여해 주었다.
3.INSERT를 이용하여 수강생 s1, s2, s3, s4, s5를 관리하는 managerA와 s6, s7, s8, s9를 관리하는 managerB를 추가하세요.
INSERT INTO MANAGER(name, student_code) VALUES('managerA', 's1');
INSERT INTO MANAGER(name, student_code) VALUES('managerA', 's2');
INSERT INTO MANAGER(name, student_code) VALUES('managerA', 's3');
INSERT INTO MANAGER(name, student_code) VALUES('managerA', 's4');
INSERT INTO MANAGER(name, student_code) VALUES('managerA', 's5');
INSERT INTO MANAGER(name, student_code) VALUES('managerB', 's6');
INSERT INTO MANAGER(name, student_code) VALUES('managerB', 's7');
INSERT INTO MANAGER(name, student_code) VALUES('managerB', 's8');
INSERT INTO MANAGER(name, student_code) VALUES('managerB', 's9');
앞서 추가한 AUTO_INCREMENT기능으로 id는 자동으로 부여되니 넣어야하는 값의 항목만 지정해 주고 넣어주었다.
4. JOIN을 사용하여 managerA가 관리하는 수강생들의 이름과 시험 주차 별 성적을 가져오세요.
SELECT s.name, e.exam_seq, e.score
FROM MANAGER m JOIN STUDENT S on m.student_code = s.student_code
JOIN EXAM e on m.student_code = e.student_code WHERE m.name = 'managerA';
순차적으로 진행한다. 우선, 가져올 값을 써야한다. 가져올 것은 student의 name, exam의 exam_seq, exam의 score이다.
다음, MANAGE 테이블과 STUDENT테이블의 외래키인 student_code를 join을 통해 대조해서 가져온다.
그렇게 해서 가져온 외래키인 student_code를 EXAM테이블에 조인을 통해 대조한다. 그다음, 그렇게 연결한 외래키중, managerA의 외래키를 고른다.
그럼 manageA가 가지고 있는 외래키의 name, exam_seq, score가 출력되게 된다.
5.STUDENT 테이블에서 s1 수강생을 삭제했을 때 EXAM에 있는 s1수강생의 시험성적과 MANAGER의 managerA가 관리하는 수강생 목록에 자동으로 삭제될 수 있도록 하세요.
ALTER TABLE EXAM DROP CONSTRAINT exam_fk_student_code;
ALTER TABLE EXAM ADD CONSTRAINT exam_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
ALTER TABLE MANAGER DROP CONSTRAINT manager_fk_student_code;
ALTER TABLE MANAGER ADD CONSTRAINT manager_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code) ON DELETE CASCADE;
DELETE FROM STUDENT WHERE student_code = 's1';
DELETE명령어만 내리면 실행되지 않는다. 연관된 데이터가 있기 때문이다.
우선 DROP을 통해 외래키를 날려버린 후, DELETE CASCADE를 통해 삭제할 준비가 된 상태로 다시 생성해준다.
그런후에 DELETE를 하면 잘 삭제가 된다.
오늘 한 예제를 내가 이해한대로 정리했는데 맞는지 모르겠다.
강의 자체가 불친절해서 왜 이런 것을 썼는지에 대해서 추론해야 했다.
이전에 SQL자료 탐색을 잠깐 배웠던것 같은데 그게 이해하는데 조금 도움이 되었던것 같다.
'개발일지(일간)' 카테고리의 다른 글
22년 12월 07일 스프링 과제 (0) | 2022.12.07 |
---|---|
22년 12월 06일 (0) | 2022.12.06 |
22년 12월 3일 프로세스,스레드 동시성과 병렬처리 (0) | 2022.12.03 |
22년 12월 01일 인터페이스와 업캐스팅 (0) | 2022.12.01 |
22년 11월 30일 JMV (0) | 2022.11.30 |