본문 바로가기

Database/sql 강의

sql 독학 강의 # mysql insert 사용 방법 17편 -sTricky

sql 독학 강의 # mysql insert 사용 방법 17편 -sTricky

 

콘텐츠 index

0. insert란 무엇인가?

1. insert를 하는 다양한 방법

## 전편 강의 보러 가기 ##

2020/05/11 - [Database/sql 강의] - sql 독학 강의 # sub query 서브쿼리 16편 -sTricky

 

sql 독학 강의 # sub query 서브쿼리 16편 -sTricky

sql 독학 강의 # sub query 서브 쿼리 16편 -sTricky 콘텐츠 index 0. 서브 쿼리 종류 1. 스칼라 서브 쿼리 (Scalar Subquery) 2. 인라인 뷰 (Inline view) 3. 서브쿼리 4. join으로 표현하기 ## 전편 강의 보러..

stricky.tistory.com

 

안녕하세요.

 

비가 오는 금요일 이네요. 

 

최근에 SQL 독학 강의 봐주시는 분들이 조금 늘은 것 같아서 감사의 말씀을 먼저 전해 드립니다.

 

나름대로 초보자의 마음을 최대한 이해하려고 노력하며 포스트를 작성하고 있습니다.

 

오늘은 mysql에서 어떻게 insert를 하는지에 관해서 포스팅을 해보겠습니다.

 

시간 끌것 있나요? 바로 가겠습니다.

 

 

0. insert란 무엇인가?

insert는 뭘까요? select문은 이미 있는 데이터를 원하는 형태와 양만큼 출력을 하도록 하는 명령어입니다. 반면 insert는 말 그대로 새로운 데이터를 넣는 명령어입니다.

 

기존에 없는 row, 튜플을 원하는 테이블에 데이터를 입력하는 것 이죠.

 

select는 여러 테이블을 조인해와서 출력을 할 수 있지만, insert는 그렇지 않습니다. 한 번에 하나의 테이블에만 데이터를 넣을 수 있어요.

 

Database에 데이터를 넣는 행위, 그것이 바로 insert입니다.

 

물론 insert 말고도 Database에 데이터를 넣는 방법은 있습니다만, 가장 보편적이고, 일반적인 의미를 말씀드리는 겁니다.

 

1. insert를 하는 다양한 방법

insert문을 작성하는 방법에는 여러 가지 방법이 있습니다.

그 방법들에 대해서 하나씩 설명을 드리도록 하겠습니다.

 

설명에 앞서서 우선 insert문을 테스트할 테이블을 하나 생성하도록 하겠습니다.

create table class.insert_test
(
    seq        int(10) primary key ,
    cont       text,
    name       varchar(15),
    tel_num    int(11),
    input_date datetime
);

위와 같이 테이블을 생성 후 아래 실습을 진행하시면 되겠습니다.

 

 

● 단일행 입력하기 (칼럼 미지정)

데이터 insert를 할 때 insert 대상 테이블의 칼럼을 지정하지 않고 데이터를 insert 하는 방법입니다.

아래 커맨드를 보세요.

insert into class.insert_test values (1,'대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now());

위와 같이 입력을 하고 데이터가 잘 들어갔는지 select를 해보겠습니다.

select * from class.insert_test;

결과는 아래와 같습니다.

insert문을 한번 잘 살펴보겠습니다.

insert into class.insert_test values (1,'대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now());
-- insert into [테이블명] values ([seq],[cont],[name],[tel_num],[input_date]);

윗줄은 위에서 실행한 커맨드 자체를 넣은 것이고, 아래 주석으로 막혀 있는 줄은 구문을 해설하기 위해서 써둔 것입니다.

 

[테이블명]에 class_insert_test라고 우리가 위에서 만든 테이블 명이 들어가 있습니다. insert를 하는 대상 테이블 명을 넣어주시면 됩니다.

[칼럼명] 에는 테이블의 컬럼 생성 순서대로 데이터를 순서에 맞게 ", "로 분리하여 나열한 것입니다. 여길 보면 어떤 것은 " ' " 이 감싸고 있지만 어떤 건 그냥 데이터가 써져 있는 것을 확인할 수 있습니다.

 

그 차이는 int나 float 등 숫자로 정의되어 있는 칼럼에 데이터를 넣을 때는 " ' "로 감싸지 않고 넣어도 되고(감싸서 넣어도 됩니다), text, varchar등 문자로 정의된 컬럼에 데이터를 넣을때는 " ' "로 데이터 양쪽을 감싸서 넣어야 하기 때문입니다.

 

마지막 데이터 타입에 데이터를 넣을 때 위 커맨드에서는 " now() "라고 입력이 되어 있는데, 이것은 커맨드를 실행하는 시점의 시간을 넣으라는 의미입니다. " now() " 대신 " sysdate() "를 사용하셔도 되고, 어떤 지정된 날짜 및 시간을 넣고 싶으시면 <'2020-02-01 12:32:22'>, <'2020-02-01'>, <'20200201'>, <date_format('20200201', '% y% m% d')>이런 식으로

 

● 단일행 입력하기 (칼럼 지정)

데이터를 insert시 칼럼을 지정해서 넣는 방법입니다.

아래 커맨드를 먼저 보시겠습니다.

insert into class.insert_test (seq, cont, name, tel_num, input_date) values (8,'대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now());

아까와 거의 비슷하나 테이블명 뒤에 "("로 괄호를 열고 해당 테이블의 칼럼명이 써있습니다. 이는 컬럼 순번대로가 아니라 "(,)"안의 컬럼 순서대로 데이터를 넣는다고 보면 됩니다.

 

그리고, 위 방법대로 하면 일부의 데이터만 넣을 수도 있습니다.

아래 커맨드를 보시겠습니다.

insert into class.insert_test (seq, cont, input_date) values (10,'대한민국은 코로나를 잘 극복 하고 있습니다.', now());

위와 같이 class.insert_test 테이블에 있는 seq, cont, name, tel_num, input_date 칼럼 중에 seq, cont, input_date칼럼에만 데이터를 넣는 커맨드입니다.

 

결과를 보겠습니다.

빨간색 박스 안을 보시면 name과 tel_num 칼럼에는 값이 안 들어가 있다는 것을 확인할 수 있습니다.

 

위와 같이 원하는 칼럼에만 데이터를 insert 할 수 있습니다.

 

● 복수행 입력하기

이번에는 하나의 insert 문으로 여러 행의 데이터를 입력하는 방법에 관해서 알아보겠습니다.

아래 insert SQL문을 보시겠습니다.

insert into class.insert_test
values (13, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (14, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (15, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (16, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (17, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now())
;

위 insert SQL을 이용하면 커맨드를 보시면 아시겠습니다. 한 번에 5건의 데이터를 넣을 수 있습니다. 물론 더 쓴다면 더 많이 넣을 수 도 있겠죠.

 

결과를 보겠습니다.

빨간 박스 안의 데이터만큼 입력이 된 것을 확인할 수 있습니다.

 

● insert select 문 활용하기

또 다른 하나의 insert 문 작성 법을 안내드리겠습니다.

select 한 결과를 바로 insert문을 이용해서 데이터 입력을 하는 방법입니다.

 

위 실습을 하기 위해서 하나의 테이블을 더 만들어 줍니다.

create table class.insert_test2 as select * from class.insert_test where 1=2;

위 커맨드는 생소하겠지만, 추후 차차 배울 내용 중 하나입니다. 간단하게 설명을 드리자면 우리가 실습을 하고 있던 class.insert_test 테이블과 똑같은 모습으로 class.insert_test2라는 테이블을 생성을 하는데, 마지막에 "where 1=2"가 보이실 겁니다. 여기에 "1=2"라고 조건을 넣어주면 데이터는 옮기지 않고 모양만 똑같이 만든다고 보시면 되고, "1=1"이라고 조건을 주거나 where절 자체를 안 넣으면 class.insert_test 테이블 안에 있는 데이터까지 class.insert_test2로 옮기겠다는 뜻이 됩니다.

 

그리고 class.insert_test2에 아래와 같이 데이터를 일부 넣어 줍니다.

insert into class.insert_test2
values (21, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (22, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (23, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (24, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now()),
       (25, '대한민국은 코로나를 잘 극복 하고 있습니다.', '홍길동', 01012345678, now())
;

이렇게 하고, class.insert_test와 class.insert_test2 데이터를 확인합니다.

※class.insert_test의 데이터는 위 실습 내용과 달리 데이터가 더 들어 있을 겁니다. 제가 포스팅 작성하면서 더 실행을 해서 그렇습니다. 양해 바랍니다.

 

그럼, insert select 문을 활용해서 class.insert_test2에 있는 5건의 데이터를 class.insert_test로 입력해 보도록 하겠습니다.

 

커맨드는 아래와 같습니다.

insert into class.insert_test select * from class.insert_test2;

class.insert_test 테이블을 확인해보겠습니다.

위 빨간 박스 안에 데이터가 insert select로 옮겨진 데이터입니다.

 

어떤가요? 간단하죠?

 

오늘은 이렇게 다양한 insert문 작성 방법에 관해서 공부해 봤습니다.

 

직접 다양한 방법으로 실습을 진행을 해보시고, 궁금하신 점이 있으시면 댓글 부탁드리겠습니다.

 

open.kakao.com/o/szfhqYec

 

Database/남/db개발님의 오픈프로필

DB 개발자, DB 개인 CLASS

open.kakao.com


## 다음 강의 보러 가기 ##

2020/05/22 - [Database/sql 강의] - mysql update sql 독학 강의#18편 -sTricky

 

mysql update sql 독학 강의#18편 -sTricky

mysql update sql 독학 강의#18편 -sTricky 콘텐츠 index 0. update란 무엇인가? 1. 기본 update문 사용방법 2. 2개 이상의 칼럼 값을 변경하는 update문 사용방법 ## 전편 강의 보러 가기 ## 2020/05/15 - [Data..

stricky.tistory.com

 

 

cont안의 데이터와 같이 대한민국이 코로나를 잘 극복하고 있듯이 대한민국 구성원 여러분들도 코로나 잘 이겨내 봅시다!! 파이팅입니다.

 

감사합니다.

 

 

 

 

 

by.sTricky