1. 인텔리제이는 프로젝트에서 데이터 베이스와 연동할 수 있습니다.
이때 인테리제이 우측 데이터베이스 아이콘을 누른 후 + 버튼을 누르면 프로젝트와 연동할 수 있는 데이터 베이스를 생성할 수 있습니다. 오늘은 mysql을 사용하겠습니다.
2. mysql에서 쿼리문 작성하기
1. 테이블 생성하기
쿼리문을 이용하여 테이블을 생성하고, 데이터의 입력, 조회, 수정, 삭제, 조인을 할 수 있습니다. 우선 쿼리문을 이용하여 student와 major 테이블 그리고 두 테이블을 연결해 줄 수 있는 enrollment 테이블을 생성합니다.
CREATE TABLE student(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '학생 식별자',
name VARCHAR(100) COMMENT '이름',
age INT COMMENT '나이',
grade VARCHAR(10) COMMENT '등급'
);
student 테이블에는 id, name, age, grade의 4개의 열을 가지고있습니다. 이때, id는 PRIMARY KEY입니다. PRIMARY KEY는 중복되지 않고, 필수로 입력되어야하는 값입니다. 하지만 위 코드에서 AUTO_INCREMENT라는 속성을 주었는데 이 속성은 값을 입력하지 않아도 자동적으로 1씩 증가하면서 입력됩니다. 이 방법을 적용하여 major테이블을 작성하는 쿼리문은 다음과 같습니다.
CREATE TABLE major(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '전공 식별자',
name VARCHAR(50) NOT NULL COMMENT '이름',
turtor VARCHAR(50) NOT NULL COMMENT '튜터'
);
major 테이블에는 id, name, turtor의 4개의 열을 가지고있습니다. student 테이블과 같이 id는 PRIMARY KEY 이고 AUTO_INCRMENT속성을 가지고있습니다. 이때 , name과 turtor은 NOT NULL 속성을 가지고있는데, NOT NULL은 빈값을 허용하지 않는 다는 뜻으로, 필수적으로 값이 입력되야한다는 의미입니다.
enrollment 테이블은 student와 major을 연결해주는 테이블입니다.
CREATE TABLE enrollment(
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '등록 식별자',
student_id BIGINT COMMENT '수강색 식별자',
major_id BIGINT COMMENT '전공 식별자',
FOREIGN KEY (student_id) REFERENCES student(id),
FOREIGN KEY (major_id) REFERENCES major(id)
);
enrollment역시 id를 PRIMARY KEY로 가지고있고, AUTO_INCREMENT 속성을 가지고 있습니다. 또한 student_id와 major_id가 있고, 각각 FOREIGN KEY로 설정되어있습니다. 이때, FOREIGN KEY는 이 테이블이 REFERENCES 이하의 테이블과 관계가 있고, FOREIGN KEY를 기준으로 연결되어있다고 알려주는 KEY입니다.
2. 테이블 변경하기
이미 선언한 테이블의 수정사항이 발생하였을 때, ALTER문을 이용하여 테이블을 수정할 수 있습니다. 아래 코드는 각각 다음과 같은 의미를 가집니다.
- student 테이블에서 emaill 컬럼(CALUMN)을 VARCHAR(100) 자료형으로 추가(ADD)한다. 이때, NOT NULL로 한다.
- major 테이블에서 name 칼럼(CALUMN)의 자료형을 VARCHAR(100)으로 변경(MODIFY)한다.
- major 테이블에서 turtor 칼럼의 속성에 UNIQUE를 추가(ADD)한다. (이때, UNIQUE는 중복이 불가능한 속성입니다.)
ALTER TABLE student ADD COLUMN email VARCHAR(100) NOT NULL ;
ALTER TABLE major MODIFY COLUMN name VARCHAR(100);
ALTER TABLE major ADD CONSTRAINT UNIQUE (turtor);
위와 같이 ALTER문을 이용하여 테이블의 속성과 칼럼을 변경할 수 있습니다.
3. 테이블에 데이터 삽입하기
테이블에 데이터를 삽입할 때는 INSERT INTO문을 이용하여 데이터를 추가할 수 있습니다. student 테이블에 임의의 데이터를 3가지 추가하는 INSERT INTO문은 다음과 같습니다.
INSERT INTO student(name, age, grade, email) VALUE ("학생1", 20, 'AAA', 'a@a.com');
INSERT INTO student(name, age, grade, email) VALUE ("학생2", 20, 'AA', 'b@b.com');
INSERT INTO student(name, age, grade, email) VALUE ("학생3", 20, 'A', 'c@c.com');
테이블 명과 삽입 될 칼럼을 먼저 적은 후 VALUE에 삽입될 데이터를 작성해 준다면, name에 '학생1'이 삽입되고, age에는 20, grade에는 'AAA', email에는 a@a.com이 삽입됩니다. 이때, id는 AUTO_INCREMENT속성이 있으므로 추가하지 않습니다. 이번에는 major 테이블에 데이터를 삽입하겠습니다.
INSERT INTO major(name, turtor) VALUE ('Spring', 'Kim');
INSERT INTO major(name, turtor) VALUE ('NodeJS', 'Lee');
INSERT INTO major(name, turtor) VALUE ('React', 'Park');
위의 설명과 같이 각각의 데이터는 major 테이블에 name과 turtor에 삽입됩니다.
- name = 'Spring'
- turtor = 'Kim'
이때, turtor은 UNIQUE이므로, 중복된 값을 가질 수 없습니다. 마지막으로 enrollment테이블에 데이터를 삽입하겠습니다.
INSERT INTO enrollment(student_id, major_id) VALUE (1, 1);
INSERT INTO enrollment(student_id, major_id) VALUE (2, 2);
major 테이블의 각각의 칼럼에 1,1과 2,2가 대입되었음을 알 수 있습니다.
4. 데이터 조회하기
데이터의 조회는 SELECT문으로 할 수 있습니다. 또한 조회할 데이터에 *문자를 넣는다면 선택된 테이블의 모든 칼럼을 조회합니다.
SELECT * FROM student;
위 쿼리문은 student문의 모든 칼럼(*)을 조회하는 SELECT문입니다. 이때, 데이터 전체조회가 아닌 일부의 데이터만 필터링을 할 수 있습니다. 이 일부 데이터를 선택해주는 명령어는 WHERE입니다.
SELECT * FROM student WHERE id = 1;
위 쿼리문은 student 테이블에서 id값이 1인 값의 모든 칼럼(*)을 조회하는 쿼리문 입니다. SELECT문은 특정 칼럼만 조회하는 기능도 있습니다.
SELECT name, age FROM student WHERE id = 2;
위 쿼리문은 student 테이블에서 id값이 2인 데이터의 name과 age를 조회하는 쿼리문입니다.
5. 데이터 변경하기
테이블의 변경은 ALTER로 하였지만 데이터의 변경은 UPDATE입니다. 이때도 WHERE문을 이용하여 조건을 줄 수 있습니다.
UPDATE student SET age = 21 WHERE name = '학생1';
위 쿼리문은 student 테이블의 name이 '학생1'인 데이터의 age를 21로 변경하는 쿼리문 입니다.
SELECT * FROM student WHERE name = '학생1';
조회 문으로 데이터의 변경을 확인할 수 있습니다.
6. 데이터 삭제하기
데이터의 삭제는 DELETE문으로 가능합니다. 이때 역시 WHERE문으로 조건을 주어서 일정 데이터만 삭제하는 것이 가능합니다.
DELETE FROM student WHERE id = 4;
student 테이블에서 id가 4인 데이터를 삭제하라는 쿼리문입니다. SELECT문의 전체 조회로 id가 4인 데이터가 삭제되었습을 알 수 있습니다.
SELECT * FROM student;
7. 테이블 조인하기
테이블간의 관계를 주어서 여러개의 테이블을 한개의 테이블처럼 이용할 수 있습니다. 이때, JOIN을 이용하여 연결할 테이블을 명시해주고 ON을 이용하여 기준을 명시해줍니다.
SELECT s.name, m.name
FROM student s
JOIN enrollment e ON s.id=e.student_id
JOIN major m on e.major_id = m.id;
위 쿼리문은 student의 name과 major의 name을 조회하는 쿼리문입니다. 이때 student와 major 테이블은 enrollment를 사이에 두고 연결이 되어있고, student 테이블의 id와 enrollment 테이블의 student_id가 연결되어있고, major 테이블의 id와 enrollment 테이블의 major_id가 연결되어있습니다. 이때 JOIN은 연결된 테이블 양쪽에 존재해야 조회를 해 줍니다. 한 쪽에서 연결 된 데이터가 없다면 조회할 수 없습니다.
SELECT s.name, m.name
FROM student s
LEFT JOIN enrollment e on s.id = e.student_id
LEFT JOIN major m on e.major_id = m.id;
위 쿼리문은 JOIN이 아닌 LEFT JOIN을 사용하였습니다. LEFT JOIN과 JOIN의 차이점은 JOIN은 양쪽 모두에 존재 해야지 조회를 해주는 연결 방식이었다면, LEFT JOIN은 왼쪽 테이블(위 경우에서는 student 테이블)의 모든 데이터를 기준으로 출력을 해 줍니다. 이때, 연결 된 테이블(위 경우 enrollment와 major)에 값이 없다면, null로 출력해줍니다.
3. 내일 해야하는 것
- Spring 강의 과제하기
- 개인 과제 시작하기
- Spring 강의 마무리하기
'TIL' 카테고리의 다른 글
TIL) 일정관리 과제 컨트롤러 Mapping구현 (0) | 2024.11.05 |
---|---|
TIL) 일정관리 과제 구현 (0) | 2024.11.04 |
TIL) Spring Boot에서 PUT, DELETE API 생성 (1) | 2024.10.31 |
TIL) Spring Boot에서 POST API생성 (0) | 2024.10.30 |
TIL) Spring Boot에서 GET API생성 (0) | 2024.10.29 |