카테고리 없음

[패스트 캠퍼스_데이터 분석 부트캠프] 18기 7주차

sooooo-happyday 2025. 4. 13. 21:16

2025/4/7~2025/4/11

7주차 기록

 

언제 7주차가 되었지??


[수강한 강의 내용]

- 프로젝트를 통한 Python 실력 완성하기 회고

- 데이터 분석가 현직자 특강

- SQL 실무 적용 실습

- 데이터 분석가 필수 Tool SQL

- 노션 특강

SQL은 부트캠프 시작 전 온라인 강의로 살짝 학습했었는데

강사님 통해서 배우는 실시간 온라인 강의에서는 

반절정도는 새롭게 느껴졌다.

 

분명 예습했던 내용일텐데

왜 처음처럼 느껴지는 걸까?

정말 알수가 없군.

 

SQL의 종류에 대해 간단하게 정리해보겠습니다.

SQL 명령어 분류 요약

  • DML (Data Manipulation Language) – 데이터 조작어
    데이터추가/조회/수정/삭제
    트랜잭션 사용 O
    → 예:
    • INSERT INTO (Create)
    • SELECT FROM (Read)
    • UPDATE SET (Update)
    • DELETE FROM (Delete)
  • DDL (Data Definition Language) – 데이터 정의어
    데이터베이스나 테이블 구조를 정의/수정/삭제
    트랜잭션 사용 X
    → 예:
    • CREATE (생성)
    • SHOW, DESC (조회)
    • ALTER (수정)
    • DROP (삭제)
  • DCL (Data Control Language) – 데이터 제어어
    → 사용자 권한 및 접근 제어 관련 명령
    → 예: GRANT, REVOKE
  • TCL (Transaction Control Language)
    → 트랜잭션 제어 명령
    → 예: COMMIT, ROLLBACK, SAVEPOINT
  • DQL (Data Query Language)
    → 데이터를 조회하기 위한 명령
    → 예: SELECT (사실상 DML에 포함되기도 함)

 

 

💻 SQL 기초 문법 쉽게 설명하기


✅ USE

USE world;
  • 👉 USE는 어떤 데이터베이스를 쓸지 선택하는 명령어
    예: "world"라는 데이터베이스 안의 테이블들을 이제부터 쓸 거야!

✅ SELECT

SELECT * FROM country;
  • 👉 SELECT는 데이터를 화면에 보여주는 명령어
    *는 모든 정보를 보여달라는 뜻이에요.
    예: country 테이블에 있는 모든 데이터를 다 보여줘!

 

✅ AS (별명 주기)

SELECT code, name AS country_name
FROM country;
  • 👉 AS는 이름을 바꿔서 보기 좋게 보여주는 명령어
    예: name이라는 열 이름을 country_name으로 바꿔서 보여줘!

✅ 연산자 (Operator)

SELECT (continent = 'Africa') AND (population >= 1000 * 10000) AS is_africa_1000
FROM country;
  • 👉 비교하거나 계산해서 조건에 맞는 결과를 보여줌.
    • +, -, *, /, %: 더하기, 빼기, 곱하기, 나누기, 나머지
    • =, !=, >, <, >=, <=: 크거나 같은지, 같은지 비교
    • AND, OR, NOT: 조건이 둘 이상일 때 사용

예: 아프리카 대륙이고 인구가 1천만 명 이상이면 True를 보여줘


✅ WHERE (필터링)

SELECT *
FROM country
WHERE (population >= 4000 * 10000) AND (population <= 5000 * 10000);
  • 👉 WHERE는 조건에 맞는 데이터만 보여주는 명령어
    예: 인구가 4천만 명에서 5천만 명 사이인 나라만 보여줘!

✅ BETWEEN ... AND ...

SELECT *
FROM country(테이블명)
WHERE population BETWEEN 4000 * 10000 AND 5000 * 10000;
  • 👉 BETWEEN은 두 값 사이에 있는 데이터를 찾을 때 사용
    예: 인구가 4천만 이상, 5천만 이하인 나라만 보여줘!

✅ IN, NOT IN

SELECT *
FROM country
WHERE continent IN ('Asia', 'Africa');
  • 👉 IN은 여러 값 중 하나라도 포함되는 데이터를 찾을 때 사용
    예: 아시아나 아프리카에 있는 나라들만 보여줘!

✅ IS NULL, IS NOT NULL

SELECT *
FROM country
WHERE continent IS NOT NULL;
  • 👉 값이 비었는지 아닌지 확인할 수 있음
    예: 대륙 정보가 비어있지 않은 나라만 보여줘!

✅ LIKE

SELECT * FROM country
WHERE continent LIKE '%A%';
  • 👉 LIKE는 어떤 글자가 포함됐는지 찾을 수 있음
    %는 "어떤 글자든 다 괜찮아"라는 뜻이에요.
    예: 대륙 이름에 'A'가 들어가는 나라만 보여줘!

✅ ORDER BY (정렬하기)

SELECT * FROM country
ORDER BY code ASC, population DESC;
  • 👉 ORDER BY는 데이터를 정렬해주는 명령어
    ASC는 오름차순 (작은 → 큰), DESC는 내림차순 (큰 → 작은)
    예: 코드를 알파벳 순으로 정렬하고, 코드가 같으면 인구가 많은 나라부터 보여줘!

✅ LIMIT (개수 제한)

SELECT * FROM country
ORDER BY population DESC LIMIT 5, 3;
  • 👉 LIMIT은 몇 개만 보여줄지 정할 수 있음
    예: 인구가 많은 나라 중 6번째(0부터 시작이니까 5는 여섯번째임)부터 3개만 보여줘!

 

 


 

 

 

🟩 SQL 종류 아래 두개 기억하기!

  • DML (데이터 조작어)
    • 데이터를 직접 다룸 (읽기/쓰기/수정/삭제)
    • INSERT, SELECT, UPDATE, DELETE 등 사용함
  • DDL (데이터 정의어)
    • 데이터베이스나 테이블을 만들거나 바꿈
    • CREATE, SHOW, DESC, ALTER, DROP 등 사용함

🟩 DML - 데이터를 다루는 문법

📌 기본 문법

  • SELECT: 데이터를 읽어옴
  • FROM: 어느 테이블에서 가져올지 지정
  • WHERE: 조건에 맞는 데이터만 뽑음
  • ORDER BY: 정렬 (ASC: 오름차순, DESC: 내림차순)
  • LIMIT: 몇 개만 출력할지 정함

쿼리 작성 순서: SELECT → FROM → WHERE → ORDER BY → LIMIT
쿼리 실행 순서: FROM → WHERE → SELECT → ORDER BY → LIMIT


📌 조건 필터링

  • BETWEEN A AND B: A부터 B까지 범위
  • IN (...): 여러 값 중 하나
  • NOT IN (...): 여러 값 중 아닌 것들
  • IS NULL, IS NOT NULL: 값이 없는지 확인
  • LIKE '%문자%': 해당 문자가 포함된 데이터 찾음

🟩 DDL - 구조를 다루는 문법

📌 데이터베이스/테이블 조회

  • SHOW DATABASES: 데이터베이스 목록
  • SHOW TABLES: 테이블 목록
  • DESC 테이블명: 테이블 구조 확인

📌 테이블 만들기

 
CREATE TABLE user (
  user_id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL,
  email VARCHAR(30) NOT NULL UNIQUE,
  age INT DEFAULT 20,
  rdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
 
  • 데이터 타입
    • 숫자: INT, FLOAT, DOUBLE
    • 문자: CHAR, VARCHAR, TEXT
    • 날짜: DATETIME, TIMESTAMP
  • 제약조건
    • NOT NULL: 비어있으면 안 됨
    • UNIQUE: 중복 불가
    • PRIMARY KEY: 고유값 + 자동 증가
    • DEFAULT: 값이 없으면 기본값 사용

🟩 데이터 넣기 (INSERT)

  • INSERT INTO 테이블명 (컬럼) VALUES (값)
  • 여러 개 한 번에 넣기도 가능함
  • UNIQUE 조건에 어긋나면 에러남

🟩 데이터 수정 (UPDATE)

UPDATE user
SET age = 30 --age(나이) 컬럼 값을 30으로 바꿔줘

WHERE user_id >= 3 --user_id가 3 이상인 사람만 수정하겠다는 조건
LIMIT 2; --조건을 만족하는 사람이 10명 있더라도, 앞에서 2명까지만 수정
  • 조건 만족하는 데이터 중 앞에서부터 2개만 수정함

🟩 데이터 삭제 (DELETE)

DELETE FROM user
WHERE user_id >= 3
LIMIT 2;
  • 조건 만족하는 데이터 중 앞에서 2개만 삭제

🟩 테이블 수정 (ALTER)

  • 컬럼 추가: ALTER TABLE user ADD content TEXT
  • 컬럼 변경: ALTER TABLE user MODIFY COLUMN content VARCHAR(250)
  • 컬럼 삭제: ALTER TABLE user DROP content
  • 인코딩 변경:
    • 확인: SHOW VARIABLES LIKE 'character_set_database'
    • 변경: ALTER DATABASE dbname CHARACTER SET = ascii

 

조금 더 자세하게...

1. 🌱 컬럼 추가하기

ALTER TABLE user ADD content TEXT;

👉 user 테이블에 **새로운 칸(content라는 이름)**을 추가해줘
글을 길게 쓸 수 있는 TEXT 형식으로 만든 거임!
마치 다이어리에 메모란을 추가하는 느낌!


2. ✏️ 컬럼 수정하기

ALTER TABLE user MODIFY COLUMN content VARCHAR(250);

👉 content 칸을 글자 수 최대 250자로 수정해줘
예전엔 무제한으로 쓸 수 있었는데,
지금은 "딱 250자까지만 써!"라고 바꾼 거임.


3. 🧹 컬럼 삭제하기

ALTER TABLE user DROP content;

👉 content 칸을 없애줘!
이제 그 메모란은 더 이상 필요 없다고 결정한 거임.


💬 인코딩 변경 (글자 저장 방식 바꾸기)

4. 🔍 현재 인코딩 확인

SHOW VARIABLES LIKE 'character_set_database';

👉 지금 이 데이터베이스가 **어떤 글자 방식(인코딩)**을 쓰고 있는지 알려줘!

예: 한글이 잘 보이게 저장되는지, 영어만 되는지 등등


5. 🔄 인코딩 변경하기

ALTER DATABASE dbname CHARACTER SET = ascii;

👉 데이터베이스의 **글자 저장 방식을 ASCII(영어 전용)**로 바꿔줘!

예: 영어만 쓸 거라면 용량도 아끼고 딱 좋음!
(근데 한글은 깨질 수 있어서 주의 필요함👀)

 

 


🟩 테이블 삭제 (DROP)

  • DROP TABLE 테이블명
  • DROP DATABASE 데이터베이스명

🟩 외래키 (FOREIGN KEY)

  • 테이블 간 연결고리
  • 참조하는 컬럼은 PRIMARY KEY여야 함
  • 옵션:
    • ON UPDATE CASCADE: 부모 값 바뀌면 같이 바뀜
    • ON DELETE SET NULL: 부모가 삭제되면 NULL로 바뀜
    • 기타: NO ACTION, SET DEFAULT, RESTRICT 등 있음

🟩 함수 (FUNCTION)

✅ 단일행 함수 (1개 데이터에만 작동)

  • CEIL(): 올림
  • ROUND(): 반올림
  • TRUNCATE(): 버림
  • CONCAT(): 문자 이어 붙이기
  • DATE_FORMAT(): 날짜 형식 바꾸기
 
SELECT CEIL(12.345); -- 13
SELECT ROUND(12.567, 2); -- 12.57
SELECT TRUNCATE(12.567, 2); -- 12.56
SELECT CONCAT(name, '(', code, ')') FROM country;
SELECT DATE_FORMAT(payment_date, '%Y-%m') FROM payment;
 
 

✅ 다중행 함수 (여러 데이터 처리)

  • SUM(), AVG(), COUNT(), MIN(), MAX() 등
  • 집계 결과를 한 줄로 보여줌

 

 

 

마지막으로~~~

🧙‍♀️ SQL에서 자주 쓰이는 데이터 형식 정리

1. 🧮 숫자형(Number)

데이터 타입설명
INT 정수(소수점 없는 숫자), 예: 1, 100, -25
FLOAT 소수점 있는 숫자 (대략 6자리 정밀도)
DOUBLE 더 정밀한 소수 (대략 15~17자리)
DECIMAL(숫자, 소수) 소수점 자리수를 정확히 지정할 때 사용

예: 나이, 수량, 가격 등에 사용


2. 📝 문자형(String)

데이터 타입설명
CHAR(n) 고정 길이 문자 (항상 n글자 공간 사용)
VARCHAR(n) 가변 길이 문자 (최대 n글자, 실제 입력한 글자수만큼 저장)
TEXT 긴 글 저장 (최대 65,535자까지)

예: 이름, 이메일, 주소, 소개글 등에 사용
VARCHAR는 짧은 글에, TEXT는 긴 글에 많이 씀


3. 🕒 날짜/시간형(Date & Time)

데이터 타입설명
DATE 날짜만 저장 (YYYY-MM-DD)
TIME 시간만 저장 (HH:MM:SS)
DATETIME 날짜 + 시간 (직접 지정)
TIMESTAMP 날짜 + 시간 (자동으로 현재 시간 저장됨)

예: 가입일, 작성일, 수정일 등 기록용


4. 🧊 논리형(Boolean)

데이터 타입설명
BOOLEAN 또는 TINYINT(1) 1(True), 0(False) 값을 저장

예: "회원이 맞는가요?", "활성화 상태인가요?" 같은 Yes/No 항목


🌟 자주 쓰는 조합 예시

컬럼명데이터 타입설명
name VARCHAR(30) 이름 (30자 이내)
email VARCHAR(50) 이메일 주소
age INT 나이
content TEXT 자기소개, 긴 글
created_at TIMESTAMP 등록 시간 (자동 저장)
is_active BOOLEAN 활동 여부 (True/False)