해당 SQL은 MySQL 툴 사용, DATABASE는 MySQL의 world, sakila를 사용
- comment : 주석
- #을 지원하긴 하지만 공식 주석은 --
- 사용이유 : 코드에 대한 설명 작성, 실행되지 않는 코드 설정
- ; : SQL 쿼리의 마지막을 의미
SELECT * FROM world; # 맨 끝의 ; SQL 문(statement) 종료 의미
- SQL 문법(Syntax)
- 의미: SQL이 이해할 수 있는 정해진 규칙
- 틀리면: DBMS가 즉시 에러를 반환 → 쿼리 실행 X
- SQL 컨벤션(Coding Convention)
- 의미: SQL 코드를 읽기 쉽고 유지보수하기 좋게 만드는 형식·스타일 규칙 (사내 가이드나 표준)
- 틀려도: 에러 없이 정상 실행됨
- 컨벤션 가이드 : https://www.sqlstyle.guide
- 컨벤션 예시 규칙
- SQL 키워드는 대문자
- 테이블/컬럼명은 소문자 + 스네이크 케이스
- 들여쓰기 및 줄바꿈으로 가독성 확보
- 예약어를 컬럼명으로 쓰지 않기
- 컨벤션을 지켜서 가독성이 좋은 코드를 작성 → 코드의 유지보수가 좋아짐
- 데이터베이스 선택
USE world;
- 선택된 데이터베이스 확인
SELECT DATABASE();
- SHOW PROCESSLIST;
- 현재 MySQL 서버에 연결된 모든 세션(프로세스) 목록을 보여줌
- 주로 서버 부하 분석, 오래 걸리는 쿼리 확인, 특정 연결의 상태를 점검할 때 사용컬럼 의미
컬럼 의미 Id 세션 ID (KILL 명령 시 사용) User 접속한 계정 Host 접속한 클라이언트의 IP와 포트 db 현재 사용 중인 데이터베이스 Command 현재 실행 중인 명령 유형 (Sleep, Query, Connect 등) Time 해당 상태로 경과한 시간(초) State 쿼리의 현재 상태 (예: Sending data, Locked 등) Info 실행 중인 SQL문(일부만 표시)
- KILL number;
- SHOW PROCESSLIST;에서 확인한 Id 값을 넣어 해당 세션을 강제 종료
- 주의:
- 단순히 연결을 끊는 것뿐 아니라, 실행 중인 쿼리도 강제로 중단됨
- 트랜잭션이 진행 중이었다면 롤백됨
- 잘못 종료하면 다른 사용자의 작업이 날아갈 수 있음
- 데이터베이스 인코딩 방식 확인 : SHOW VARIABLES LIKE 'character_set_database';
- 데이터베이스 인코딩 방식 변경 : utf8mb4 > ascii : ALTER DATABASE bda CHARACTER SET = ascii;
- 인코딩 방식 설정 이유 : 데이터베이스 인코딩 방식에 따라서 테이블이 생성됨
- 코드 실행 단축키
- Ctrl + Enter
- 역할: 현재 커서가 있는 쿼리만 실행
- 보통 세미콜론(;)이나 빈 줄을 기준으로 해당 블록만 실행
- Ctrl + Shift + Enter
- 역할: 전체 스크립트 실행
- 현재 SQL 에디터 창에 있는 모든 쿼리를 순서대로 실행
- Ctrl + Enter
- DBMS 종류
- RDBMS : 테이블 사이의 관계를 갖는 데이터베이스
- READ 빠름
- 문법이 어렵고, 구조변경 및 확장이 어려움
- 오래된만큼 신뢰도가 높음
- NoSQL : 테이블 사이의 관계를 갖지 않는 데이터베이스
- CREATE, UPDATE, DELETE 빠름
- 구조의 변경과 확장이 쉬움
- 상대적으로 신뢰도가 낮음
- RDBMS : 테이블 사이의 관계를 갖는 데이터베이스
- SQL 쿼리 종류
- DML : 데이터 조작어 : DATA CRUD : TRANSACTION 사용 O
- C(INSERT INTO)
- INSERT INTO <table>(<columns>) VALUES (data1), (data2), …
- R(SELECT FROM)
- READ
- SELECT : columns : AS(엘리어스도 생략 가능)
- FROM : table
- WHERE : filtering condition(operator)
- BETWEEN AND, IN, NOT IN, IS NULL, IS NOT NULL, LIKE(%)
- ORDER BY : sorting : ASC(생략가능), DESC
- 기본값은 문자열은 ABC순, 숫자는 숫자가 작은순 정렬
- LIMIT : limit : num1(limit 갯수) : num1(skip 갯수), num2(limit 갯수)
- ex. pageblock = 20, page = 3
- LIMIT (page -1) * pageblock, pageblock
- C(INSERT INTO)
-
- U(UPDATE SET)
- UPDATE <table> SET <column1> = <data1>, <column2> = <data2>
- D(DELETE FROM)
- DELETE FROM <table> WHERE <condition> LIMIT <num>
- PK 없는 테이블로 인한 데이터 삭제 오류 발생시, 안전모드 비활성화
SET SQL_SAFE_UPDATES = 0;
- DML : 데이터 조작어 : DATA CRUD : TRANSACTION 사용 O
- DDL : 데이터 정의어 : DATABASE, TABLE CRUD : TRANSACTION 사용 X
- C(CREATE)
- 테이블 생성시 필요한 속성 : 컬럼이름(필수), 데이터타입(필수), 제약조건(선택) (NULL, DEFAULT, INCREMENT)
- 데이터타입 : 저장공간을 효율적으로 사용하기 위해
- 숫자 : INT, FLOAT, DOUBLE
- 문자 : CHAR(고정길이), VARCHAR(가변길이), TEXT(긴길이)
- 날짜 : DATETIME(직접입력된시간), TIMESTAMP(현재시간)
- 제약조건 : 데이터의 무결성(원하지 않는 데이터는 저장하지 않는 것)을 지키기 위해 사용
- NOT NULL(결측 데이터 올수 없음), UNIQUE(중복 데이터 불가)
- PRIMARY KEY(결측, 중복 데이터 X : ROW를 구별하는 식별자), AUTO_INCREMENT(자동으로 1씩 증가)
- DEFAULT(저장하려는 데이터가 없는 경우에 저장되는 데이터 설정), CURRENT_TIMESTAMP(현재시간저장)
- CHECK(condition, 조건에 맞는 데이터만 저장 : 8.0.16 버전 이상 사용가능)
- R(SHOW,DESC)
- U(ALTER)
- ALTER <DATABASE | TABLE> …
- 컬럼추가(ADD)
- 컬럼 추가시 특정 컬럼 뒤에 넣기
ALTER TABLE tbl_a ADD COLUMN col_5 INT AFTER col_2; - 컬럼 추가시 맨 앞 컬럼에 넣기
ALTER TABLE tbl_a ADD COLUMN col_6 INT FIRST; - 컬럼변경(MODIFY)
- 컬럼이름변경(CHANGE)
- 컬럼삭제(DROP)
- 테이블 이름 변경(RENAME)
- 컬럼 추가시 특정 컬럼 뒤에 넣기
- D(DROP) : 테이블 삭제
- C(CREATE)
- DCL : 데이터 제어어 : SYSTEM : 계정생성, 권한설정 ...
- TCL : Transaction 제어어
- DQL : DML(READ:SELECT FROM)
- 알고리즘(문제해결을 위한 절차) → 코딩(컴퓨터언어로 변환) = 프로그래밍
- sakila 데이터 베이스 선택
- film 테이블 모든 데이터 확인
- 필요한 컬럼들만 필터링하여 출력
- 영화제목 film_title 컬럼이름으로 출력
- 데이터분석
- 데이터베이스(데이터) : 알고리즘 구현이 어려움
- 파이썬(패키지) : 이미 구현된 알고리즘 사용이 쉬움
- 데이터베이스의 데이터를 파이썬으로 가져와서 데이터분석 수행
- 데이터베이스에 있는 데이터를 파이썬으로 꺼내오는 방법 : csv 파일
- csv : 압축 X → 입출력 빠름 : 파일이 큼
- excel : 압축 O → 입출력 느림 : 파일이 작음
- workbench 메뉴 : Query → export Results 선택
- 데이터 필터링 방법
- WHERE <condition> LIMIT <num1>
- 연산자 (operator)
- 산술 : 데이터 + 데이터 = 데이터 : +, -, *, /, %(나머지)
- 비교 : 데이터 + 데이터 = 논리값 : =, !=, >, <, >=, <= : 조건 1개
- 논리 : 논리값(조건1) + 논리값(조건2) = 논리값 : NOT, AND> OR(우선순위 유의) : 조건 2개 이상
- AND : T AND T = T, 나머지는 F : 두 개의 조건 모두 만족할 때 출력하고 싶을 경우
- OR : F OR F = F : T OR F = T : 둘 중 하나의 조건만 만족해도 출력하고 싶을 경우
- 우선순위 : 산술 > 비교 > 논리
- 선형대수 : 행렬연산
- scala(5), vector([1, 2]), matrix([[1,2], [3,4]] :2D), tensor (≥ 3D)
- 연산수행방법
- 같은모양 : 같은 위치의 데이터끼리 연산
- 다른모양 : 백터 + 스칼라 : 브로드 캐스트 연산 수행
- 비교연산자
- 논리값(true(1), false(0))
- 특정 문자 포함 및 미포함
- IN, NOT IN
- 결측(비어있는) 데이터 필터링
- 결측 데이터는 모든 연산에 대해서 false(0)를 출력
- IS NULL, IS NOT NULL
- LIKE : 특정 문자열 포함여부에 따라서 데이터 출력
- 쿼리 작성 순서 : SELECT > FROM > WHERE > ORDER BY > LIMIT
- 쿼리 실행 순서 : FROM > WHERE > SELECT > ORDER BY > LIMIT
- 그래서 SELECT에 생성한 컬럼은 WHERE 절에서 UNKNOWN COLUMN이 됨
- SQL을 이용한 데이터 전처리
- 데이터 분석 절차
- 문제정의(계획수립) > 데이터수집 > 데이터처리 > 데이터분석 > 결론도출
- 데이터처리
- 결측 데이터 확인 > 결측 데이터 제거
- 결측 데이터 제거
- 수치형 데이터 : 평균, 중앙값으로 채움
- 명목형 데이터 : 최빈값으로 채움
- 제거시 : 데이터의 손실을 최소화하는 방향으로 행, 또는 열을 제거해야함
- 파이썬으로 보기 전에 SQL에서 결측치 처리 및 제거 후 파일을 불러오면 효율적으로 데이터 처리 가능
- 명목형 데이터 > 수치형 데이터 변환
- 최종 : 결측 데이터가 없고 모든 데이터가 수치형인 상태
- 데이터 분석 절차
- 프로그래밍 언어의 종류
- 분류기준 : 컴파일링 방식에 따라서 분류
- 컴파일링 : 컴퓨터(0, 1) ← 사람(a-z, 0-9, %$#) 변환(번역) 해주는 것
- 컴파일러 언어
- 코드를 컴파일링한 후에 컴파일링한 파일을 만들어서 코드 실행
- 단점 : 코드 실행 전에 컴파일링과정(빌드)을 기다려야함, 바로 코드 실행 X, 문법 어려움
- 장점 : 코드의 실행속도가 굉장히 빠름
- 인터프리터 언어
- 한줄씩 컴파일링하면서 코드 실행
- 장점 : 문법이 쉬움, 바로 코드 실행 O
- 단점 : 코드 실행속도가 느림(한줄씩 해석하고 이해하고 하기 때문에) → Numpy(C언어(컴파일러) : 파이썬에서 사용가능)
- 컴파일러 언어
더보기
<<4Ls 회고법>>
1. Liked 좋았던 것 : SQL에서 부족했던 부분을 강사님이 중간중간 내주신 문제를 풀어보며 익히고 이해할 수 있었던 것
2. Lacked 아쉬웠던 것 : 문법을 익혔더라도 프로그래머스 코딩테스트를 보면 어떻게 풀어내야할지 생각이 안나는 경우도 있는 것(연습이 더 필요하다는 것을 느낌)
3. Learned 배운 것 : SQL의 기초부터 오류가 날 수 있는 상황들을 배우며 코드를 구성하는 방법을 배울 수 있었음
4. Longed for 앞으로 바라는 것 : SQL 프로그래머스 코딩테스트를 빠르게 마치고 SQL 200제를 시작할 것, 사고하는 연습을 많이 할 것
'[패스트캠퍼스] 데이터분석 부트캠프' 카테고리의 다른 글
| [9주차 학습일지] 패스트캠퍼스 박두진 강사님 SQL 강의 (3) (0) | 2025.08.19 |
|---|---|
| [8주차 학습일지] 패스트캠퍼스 박두진 강사님 SQL 강의 (2) (7) | 2025.08.14 |
| [7주차 학습일지] 패스트캠퍼스 파이썬 프로젝트 중간점검2 (11) | 2025.08.07 |
| [6주차 학습일지] 패스트캠퍼스 파이썬 프로젝트 중간점검 (11) | 2025.08.01 |
| [5주차 학습일지] 패스트캠퍼스 김인섭 강사님 머신러닝 특강 (3) | 2025.07.25 |