본문 바로가기

TIL

TIL) 인텔리제이에서 mysql 사용하기

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문을 이용하여 테이블을 수정할 수 있습니다. 아래 코드는 각각 다음과 같은 의미를 가집니다.

  1. student 테이블에서 emaill 컬럼(CALUMN)을 VARCHAR(100) 자료형으로 추가(ADD)한다. 이때, NOT NULL로 한다.
  2.  major 테이블에서 name 칼럼(CALUMN)의 자료형을 VARCHAR(100)으로 변경(MODIFY)한다.
  3.  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 강의 마무리하기