본문 바로가기
  • ㄹㅇ
패스트캠퍼스

[패스트캠퍼스] 데이터 분석 부트캠프 13기 - SQL (1)

by 한강석 2024. 4. 5.
파이썬 강의가 끝난 뒤 팀 프로젝트를 하면서 파이썬을 익힐 수 있는 시간을 가졌다. 배우자마자 프로젝트를 해야하는 바람에 매우 힘들었다. 우여곡절 끝에 파이썬 파트는 끝이 났고 이번주부터 sql 강의가 이어졌다. 옛날에 SQLD를 취득하려고 SQL을 혼자 배운 적이 있는데 그래도 한 번 들었던 내용이어서 그런지 쉽게 쉽게 이번주는 흘러갔다. 

 

1. SQL 데이터베이스 다루기

테이블이란? 데이터베이스에서 데이터를 형태를 정해 모아놓은 저장 공간이다. 

컬럼과 로우로 이루어져 있으며 데이터를 저장하기 위한 하나의 틀이다. 

  column 1 column 2 column 3
row1 data1 data2 data3
row2 data4 data5 data6

 

 

 

컬럼을 만들 때의 규칙

  1. 컬럼의 이름과 데이터 타입은 테이블을 만들 때 미리 정해진다.
  2. 컬럼의 이름은 동일한 테이블 내에서 중복될 수 없다.
  3. 테이블은 반드시 하나 이상의 컬럼을 가져야 한다.
  4. 하나의 로우는 하나의 관계된 데이터를 의미한다.
  5. 같은 테이블 안에서 로우는 항상 동일한 구조를 가진다.
  6. 로우를 단위로 데이터를 삽입한다.

 

데이터 베이스란? 테이블을 저장해두는 저장소 (= Schema)

보통 데이터베이스를 만들고 테이블을 그 안에 생성해 보관한다.

CREATE DATABASE databasename; - 데이터 베이스 생성

DROP DATABASE databasename; - 데이터 베이스 삭제

SHOW DATABASES; - 현재 존재하는 모든 데이터베이스 목록 표시

USE databasename; - 이제부터 데이터베이스를 사용한다는 의미

 

데이터 베이스에서 테이블을 생성, 삭제, 수정하는 등 데이터를 조작할 수 있는 명령어를 먼저 배웠다. DDL 이라고 하는데 테이블이나 인덱스 등 개체를 만들고 관리하는데 사용하는 명령어들이다. 

 

TABLE 관련 쿼리들

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
--datatype은 varchar, int, date 등 varchar(10) 은 10비트의 문자

 

존재하는 테이블을 이용해서 새로운 테이블을 만들어 줄 수 있다. 이때에는 AS를 사용함.

CREATE TABLE new_table_name AS
    SELECT column1, column2,...
    FROM existing_table_name
    WHERE ....;

 

Constraints로 칼럼에 제약 조건을 넣을수도 있다.

CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);

 

제약조건은 테이블에 특별한 조건을 부여하기 위해 사용된다. 조건에 맞지 않는 값은 칼럼에 추가될 수 없으므로 데이터베이스의 정확도와 신뢰도를 높일 수 있다.

 

반대로 테이블을 지우고 싶으면 DROP이나 TRUNCATE 를 사용

DROP TABLE table_name;
TRUNCATE TABLE table_name;

DROP은 테이블 자체를 삭제하고 TRUNCATE는 테이블 내의 내용만 없애고 틀은 유지됨.

ALTER TABLE로 만들어진 테이블을 변경할 수 있다.

  1. 새로운 칼럼의 추가
ALTER TABLE table_name
ADD column_name datatype;

 

     2. 기존 칼럼 제거

ALTER TABLE table_name
DROP COLUMN column_name;

 

    3. 칼럼의 이름이나 데이터 타입 변경

ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
ALTER TABLE table_name RENAME new_table_name;
ALTER TABLE table_name
CHANGE COLUMN column_name new_column_name datatype;

 

테이블에 행 추가하기 INSERT INTO

INSERT INTO table_name (column1, column2, column3, ...) 
VALUES (value1, value2, value3, ...),
				(value1, value2, value3, ...),
				(value1, value2, value3, ...);  -- 여러개 추가

INSERT INTO table_name
VALUES (value1, value2, value3, ...);  --모든 테이블의 컬럼에 추가하는 경우

 

UPDATE

테이블 내의 값을 바꿀 때에 사용된다. WHERE로 조건을 제대로 걸지 않으면 모든 테이블의 값이 변경되니 반드시 WHERE 조건문을 잘 확인해야 한다.

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

 

DELETE

테이블 내의 값을 제거할 때 사용. 마찬가지로 WHERE로 조건을 정확히 걸어줘야 모든 데이터가 날라가는 일을 막을 수 있다.

DELETE FROM table_name WHERE condition;

DELETE FROM table_name;  -- 테이블을 남기고 모든 데이터 삭제, TRUNCATE랑 유사

 

 

2. 데이터 가져오기

테이블에서 데이터를 조회할 때에는 SELECT를 사용하여 볼 수 있다. SELECT에는 보고 싶은 칼럼의 이름을, FROM에는 볼 테이블 이름을 적어주면 테이블의 칼럼이 조회된다. 또한 WHERE 구문으로 원하는 데이터만 골라서 조회할 수 있다.  SQL을 사용할 때 항상 등장하는 구문이기 때문에 매우 중요하다. 

SELECT column1, column2, ...
FROM database_name.table_name;

USE database_name;
SELECT column1, column2, ...
FROM table_name;

 

만약 모든 컬럼을 보고 싶다면 *를 사용한다.

SELECT * FROM table_name;

 

ALIAS를 지정해 컬럼 별명을 지어줄 수 있다. 컬럼명 뒤에 AS를 붙이고 원하는 이름을 부여한다. 

SELECT column1 AS alias_name1, column2 AS alias_name2, ...
FROM table_name;

 

SELECT DISTINCT 는 테이블의 컬럼을 조회할 때, 중복값을 제거하고 반환한다. 즉 어떤 값들이 들어있는지 확인하고자 할 때 사용한다. 

SELECT DISTINCT Country FROM Customers;
SELECT COUNT(DISTINCT Country) FROM Customers;

 

LIMIT는 가져올 데이터의 로우 수를 지정하는 키워드이다.

쿼리의 가장 마지막에 위치하며 전체 로우 수보다 큰 값을 넣으면 전체 로우를 반환한다.

SELECT column1, column2, ...
FROM table_name
LIMIT 3; 

 

만약 3개를 제외하고 다음으로 오는 2개를 보고싶다면 OFFSET을 활용한다. (4~6 로우 반환)

SELECT * FROM Customers
LIMIT 2 OFFSET 3;

LIMIT 3,2; --이렇게 간단히도 표현가능