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"라는 데이터베이스 안의 테이블들을 이제부터 쓸 거야!
✅ SELECT
- 👉 SELECT는 데이터를 화면에 보여주는 명령어
*는 모든 정보를 보여달라는 뜻이에요.
예: country 테이블에 있는 모든 데이터를 다 보여줘!
✅ AS (별명 주기)
FROM country;
- 👉 AS는 이름을 바꿔서 보기 좋게 보여주는 명령어예
예: name이라는 열 이름을 country_name으로 바꿔서 보여줘!
✅ 연산자 (Operator)
FROM country;
- 👉 비교하거나 계산해서 조건에 맞는 결과를 보여줌.
- +, -, *, /, %: 더하기, 빼기, 곱하기, 나누기, 나머지
- =, !=, >, <, >=, <=: 크거나 같은지, 같은지 비교
- AND, OR, NOT: 조건이 둘 이상일 때 사용
예: 아프리카 대륙이고 인구가 1천만 명 이상이면 True를 보여줘
✅ WHERE (필터링)
FROM country
WHERE (population >= 4000 * 10000) AND (population <= 5000 * 10000);
- 👉 WHERE는 조건에 맞는 데이터만 보여주는 명령어
예: 인구가 4천만 명에서 5천만 명 사이인 나라만 보여줘!
✅ BETWEEN ... AND ...
FROM country(테이블명)
WHERE population BETWEEN 4000 * 10000 AND 5000 * 10000;
- 👉 BETWEEN은 두 값 사이에 있는 데이터를 찾을 때 사용
예: 인구가 4천만 이상, 5천만 이하인 나라만 보여줘!
✅ IN, NOT IN
FROM country
WHERE continent IN ('Asia', 'Africa');
- 👉 IN은 여러 값 중 하나라도 포함되는 데이터를 찾을 때 사용
예: 아시아나 아프리카에 있는 나라들만 보여줘!
✅ IS NULL, IS NOT NULL
FROM country
WHERE continent IS NOT NULL;
- 👉 값이 비었는지 아닌지 확인할 수 있음
예: 대륙 정보가 비어있지 않은 나라만 보여줘!
✅ LIKE
- 👉 LIKE는 어떤 글자가 포함됐는지 찾을 수 있음
%는 "어떤 글자든 다 괜찮아"라는 뜻이에요.
예: 대륙 이름에 'A'가 들어가는 나라만 보여줘!
✅ ORDER BY (정렬하기)
- 👉 ORDER BY는 데이터를 정렬해주는 명령어
ASC는 오름차순 (작은 → 큰), DESC는 내림차순 (큰 → 작은)
예: 코드를 알파벳 순으로 정렬하고, 코드가 같으면 인구가 많은 나라부터 보여줘!
✅ LIMIT (개수 제한)
- 👉 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 테이블명: 테이블 구조 확인
📌 테이블 만들기
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)
SET age = 30 --age(나이) 컬럼 값을 30으로 바꿔줘
WHERE user_id >= 3 --user_id가 3 이상인 사람만 수정하겠다는 조건
LIMIT 2; --조건을 만족하는 사람이 10명 있더라도, 앞에서 2명까지만 수정
- 조건 만족하는 데이터 중 앞에서부터 2개만 수정함
🟩 데이터 삭제 (DELETE)
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. 🌱 컬럼 추가하기
👉 user 테이블에 **새로운 칸(content라는 이름)**을 추가해줘
글을 길게 쓸 수 있는 TEXT 형식으로 만든 거임!
마치 다이어리에 메모란을 추가하는 느낌!
2. ✏️ 컬럼 수정하기
👉 content 칸을 글자 수 최대 250자로 수정해줘
예전엔 무제한으로 쓸 수 있었는데,
지금은 "딱 250자까지만 써!"라고 바꾼 거임.
3. 🧹 컬럼 삭제하기
👉 content 칸을 없애줘!
이제 그 메모란은 더 이상 필요 없다고 결정한 거임.
💬 인코딩 변경 (글자 저장 방식 바꾸기)
4. 🔍 현재 인코딩 확인
👉 지금 이 데이터베이스가 **어떤 글자 방식(인코딩)**을 쓰고 있는지 알려줘!
예: 한글이 잘 보이게 저장되는지, 영어만 되는지 등등
5. 🔄 인코딩 변경하기
👉 데이터베이스의 **글자 저장 방식을 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 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자 이내) |
VARCHAR(50) | 이메일 주소 | |
age | INT | 나이 |
content | TEXT | 자기소개, 긴 글 |
created_at | TIMESTAMP | 등록 시간 (자동 저장) |
is_active | BOOLEAN | 활동 여부 (True/False) |