본문 바로가기
Skillset/SQL

SQL 데이터 추출 / 삽입 / 수정 / 삭제하기 (SQL select, insert, update, delete)

by Everly. 2022. 5. 25.

이번 포스팅에선 테이블로부터 데이터를 추출하는 방법과, 데이터를 삽입, 수정, 삭제하는 방법을 다룹니다.

코드는 여기서 다운받을 수 있습니다. (chapter2.sql 다운로드)

 

GitHub - suy379/SQL-basic

Contribute to suy379/SQL-basic development by creating an account on GitHub.

github.com

저번 포스팅에서 삭제했던 테이블 [MEM_TABLE]을 다시 만들어줍니다.

 

CREATE TABLE [MEM_TABLE] (
[ID] VARCHAR(20) PRIMARY KEY,
[NAME] VARCHAR(20),
[GENDER] VARCHAR(2),
[AGE] INT,
[JOINMONEY] MONEY,
[JOINDATE] DATE NOT NULL,
[CAMPAIGN] BIT
)

SELECT * FROM MEM_TABLE

 

현재 테이블 MEM_TABLE은 틀만 있을 뿐, 비어 있습니다. 

 

✔Table of Contents

     

    1. 데이터 삽입 (INSERT)

    비어 있는 MEM_TABLE에 데이터를 삽입해줍니다. 컬럼 형식에 맞춰 입력해주면 됩니다.

    (※ 문자형과 날짜형의 경우 반드시 따옴표(' ')를 써줘야 하며, 그 외는 쓰지 않습니다)

    --INSERT DATA
    INSERT INTO MEM_TABLE VALUES ('A001', 'Chris', 'M', 28, 10000, '2022-05-19', 1);
    INSERT INTO MEM_TABLE VALUES ('A002', 'Sally', 'F', 21, 30000, '2022-02-25', 0);
    INSERT INTO MEM_TABLE VALUES ('A003', 'Judith', 'F', 32, 500000, '2019-07-01', 1);
    INSERT INTO MEM_TABLE VALUES ('A004', 'John', 'M', 25, 15000, '2020-06-11', NULL)
    
    SELECT * FROM MEM_TABLE

     

    삽입후 SELECT문을 이용해 데이터를 조회합니다. 잘 들어간 것을 확인할 수 있죠?

    참고로 ID는 PRIMARY KEY이기 때문에 중복이 안되며, 비어 있으면 안됩니다.

    또한 JOINDATE는 NOT NULL로 제약조건이 설정되어 있으므로 비어있으면 안됩니다. 나머지 컬럼들은 이런 제약이 없어 자유롭습니다.

     


    2. 데이터 추출 (SELECT)

    앞에서도 이미 썼지만, 데이터를 추출하는 것은 SELECT문을 사용하면 됩니다.

    기본 구문은 다음과 같습니다.

    SELECT 컬럼명
    FROM 테이블명
    WHERE 조건

     

    여기서 컬럼은 여러 개를 한꺼번에 뽑을 수 있는데요! 이 과정에서 컬럼 이름도 바꿔서 뽑을 수 있고, 순서도 마음대로 바꿀 수 있습니다.

     

    Q. ID, NAME, JOINDATE, AGE 순서대로 열을 뽑고, NAME은 '성명' 이라는 이름으로 뽑으시오.
    SELECT ID, NAME AS 성명, JOINDATE, AGE
    FROM MEM_TABLE

     

    위처럼 원래 테이블 순서와 다른 순서로 뽑을수도 있고, AS를 활용해 컬럼명도 다르게 뽑을 수 있습니다.

     


    3. 데이터 수정 (UPDATE)

    수정도 어렵지 않습니다. 여기서는 UPDATE와 SET 이라는 구문을 사용합니다.

    UPDATE 테이블명
    SET 컬럼명 
    WHERE 조건

     

    Q. MEM_TABLE의 모든 연령(AGE)을 30으로 바꾸시오.
    UPDATE MEM_TABLE 
    SET AGE = 30 
    
    SELECT * FROM MEM_TABLE

     

    결과를 보면 MEM_TABLE의 모든 AGE가 30이 된 것을 확인할 수 있습니다.

     

    그런데 UPDATE는 조심해야 합니다. 테이블에 직접적으로 영향을 끼치기 때문이죠.

    이렇게 일괄적으로 AGE를 30으로 변경해버렸으니 다시 되돌릴 수 없습니다.

    특정 조건에 대해서만 AGE를 31로 변경하고 싶다면 어떻게 해야 할까요? 

     

    Q. ID가 'A001'인 데이터에 대해서만 AGE를 31로 바꾸시오.
    UPDATE MEM_TABLE 
    SET AGE = 31
    WHERE ID = 'A001'
    
    SELECT * FROM MEM_TABLE

     

    이렇게 WHERE을 사용하면 됩니다! 잘 바뀐 것을 확인할 수 있습니다.

     


    4. 데이터 삭제 (DELETE)

    이번엔 불필요한 데이터를 삭제하는 명령어 DELETE에 대해 알아봅시다.

    먼저 DELETE는 모든 데이터를 삭제하는 데에도 활용할 수 있습니다. 다음처럼 말이죠

     

    --DELETE DATA (DON'T DO!)
    DELETE MEM_TABLE

     

    위를 실행하면 MEM_TABLE의 모든 데이터가 전부 삭제됩니다. 그래서 실행하면 안됩니다!

    조건을 두어 일부 데이터만 삭제해봅시다.

     

    Q. ID가 'A004'인 데이터만 삭제하시오.
    --DELETE DATA WHEN ID = A004
    DELETE MEM_TABLE 
    WHERE ID = 'A004'

     

    위 쿼리를 실행하면 위처럼 'A004'번 데이터가 삭제되었습니다. 

    DELETE는 위와 같이 특정 조건 하에서 데이터를 삭제하고 싶은 경우 많이 사용합니다.

     


    (번외편) 테이블 삭제

    DELETE가 데이터를 삭제한다면, 좀 더 범위를 넓혀서 테이블까지 삭제할 수 있습니다. 

    바로 저번 포스팅에서도 소개한 TRUNCATE와 DROP인데요! 

     

    엄밀히 따지자면 TRUNCATE는 데이터와 테이블 공간을 삭제하고,

    DROP은 테이블 자체를 삭제하는 것으로 DROP이 좀 더 상위 개념입니다.

     

    밑의 쿼리는 실행하면 데이터가 아예 삭제되므로 주의하세요:

     

    TRUNCATE TABLE MEM_TABLE
    SELECT * FROM MEM_TABLE

     

    DROP TABLE MEM_TABLE 
    SELECT * FROM MEM_TABLE

     

    위처럼 DROP TABLE을 사용할 경우 아예 삭제되어 SELECT문으로 조회 시 에러가 나게 됩니다.

     

    이렇게 해서 저번 포스팅에 이어, 기본적인 SQL 명령어에 대해 알아보았습니다.

    간단한 데이터베이스와 테이블을 만들어 데이터를 생성하기도 하고, 삭제하기도 하고, 조회 및 수정까지 해보았는데요!

    실전에서 우리 데이터 분석가들은 직접 데이터베이스나 테이블을 만들기보단, 주어진 데이터를 원하는 형태로 추출하고 가공하는 역할을 합니다. 

    그래서 다음 포스팅부턴 예제 데이터를 활용하여, 자주 쓰이는 SQL 명령어를 더 자세히 알아봅니다 :)

    반응형

    댓글