데이터 분석을 위한 SQL 입문
✔️ DB와 SQL이 무엇인지?
✔️ MySQL 설치
✔️ MySQL SQL 쿼리 수행
✔️ DB와 SQL이 무엇인지?
DB(DataBase)
DB : 데이터의 집합
DBMS : DB관리 운영하는 역할의 프로그램
DBMS 특징
1. 데이터의 무결성(오류, 중복X)
2. 데이터의 독립성(응용프로그램과 DB간 영향X)
3. 보안(권한에 따라 접근 제한 가능)
4. 데이터의 중복 최소화
5. 응용 프로그램 제작 및 수정 용이
6. 데이터의 안정성 향상(백업과 복원 용이)
테이블(Table)
데이터 효율적 저장을 위한 구조
데이터를 여러 개의 테이블로 나누어 저장
기본키(Primary key)와 외래키( Foreign Key)를 사용해
부모와 자식 관계로 묶어 데이터 효율적 저장 가능
해당 구조를 SQL(Structured Query Language)를 이용해
데이터 생성, 조회, 수정, 삭제 가능
SQL(Structured Query Language)
관계형 데이터베이스(RDBMS)에서 사용하는 언어
다양한 언어가 동작하지만 SQL이며 RDBMS에 따라 약간 다르지만 대부분 동일
데이터분석에 SQL이 필요한 이유
40개 항목 20만개의 기업 데이터를 엑셀 파일 5개 로딩 : 4분 47초 소요
40개 항목 20만개의 기업 데이터 5개의 db 로딩 : 50초 소요
SQL쿼리를 사용해 여러 개의 테이블을 합쳐서 조회후 Python의 데이터로 가져올 수 있음
+
NoSQL
빅데이터, 인공지능이 대두되며 비정형 데이터 처리 용이한 비관게형 DB 사용
MongoDB : Document 형식
Redis : JSON 형식
등 다양한 비관계형 DB 존재
✔️ MySQL 설치
1. 구글에 MySQL 검색하고 MySQL Community Downloads에 들어갑니다.
2. MySQL Installer for windows를 선택합니다.
3. 최신 버전이 아닌 원하는 버전이 있는 경우 Archives를 선택합니다.
4. 원하는 버전을 선택 후 다운로드 진행하여 설치파일을 받습니다.
5. full을 선택하여 설치하게 되면 해당 화면이 나타나게 됩니다.
(full 버전이 안되는 경우는 우선은 설치를 진행하고 우측 화면의 Add를 통해 추가적으로 설치합니다)
6. MySQL Workbench를 실행하여 root 계정에 비밀번호를 설정하고 실행한다면 환경설정은 완료입니다.
✔️ MySQL SQL 쿼리 수행
SQL과 엑셀 파일과의 유사점
DB = 엑셀 파일
Table = 엑셀 시트
테이블에 존재하는 데이터는 SQL 조회
데이터베이스 사용
use 데이터베이스명;
데이터 조회
-- 전체 열을 조회
SELECT * FROM 테이블명;
-- 테이블에서 1개 컬럼만 조회
SELECT 컬럼명 FROM 테이블명;
-- 여러 컬럼을 조회
SELECT 컬럼명1, 컬럼명2 FROM 테이블명;
-- 데이터를 10개만 조회하고 싶은 경우
select
*
from 테이블명
limit 10;
-- 테이블의 구조 확인
desc 테이블명; -- 데이터베이스 먼저 설정 후 해당 데이터베이스의 테이블 확인
조건에 맞는 데이터 조회
비교연산자
같다 =
같지 않다 !=, <>
오른쪽이 왼쪽 초과 >
오른쪽이 왼쪽 이상 >=
오른쪽이 왼쪽 미만 <
오른쪽이 왼쪽 이하 <=
논리연산자
조건을 2개 이상 주는 경우
AND : ~이면서 ~인 경우
OR : ~ 또는 ~, ~이거나 ~인 경우
-- where + 비교연산자, 논리연산자
select
*
from 테이블명
where 조건;
-- 조건에 맞지 않는 것만 조회
select
*
from 테이블명
where 컬럼명 != 값;
-- 값 이상의 경우만 조회
select
*
from 테이블명
where 컬럼 >= 값;
-- 테이블 데이터 중 조건1에 충족하면서 조건2도 충족하는 경우 조회
select
*
from 테이블명
where 조건1
and 조건2;
-- 테이블 데이터 중 조건1에 충족하거나 조건2를 충족하는 경우 조회
select
*
from 테이블명
where 조건1
or 조건2;
IN(값1, 값2, ...)
테이블에서 컬럼의 값이 포함되는 경우 사용
안에 값이 있는 경우 : IN(값1, 값2,...)
안에 있는 값이 없는 경우 : NOT IN(값1, 값2,...)
select
*
from 테이블명
where 기준컬럼 in (값1, 값2, ....);
-- 값이 아닌 경우를 조회
select
*
from 테이블명
where 기준컬럼 not in (값1, 값2, ....);
LIKE()
문자열 안에서 특정 단어를 포함한 행을 찾는 경우 사용
값이 처음, 끝, 어디든지 포함된 경우 : LIKE(‘값%’), LIKE(‘%값’), LIKE(‘%값%’)
값이 처음, 끝, 어디든지 포함되지 않은 경우 : NOT LIKE 활용
-- 값이 앞 부분에 포함된 경우
select
*
from 테이블명
where Name like 'Rice%';
-- 값이 뒷 부분에 포함된 경우
select
*
from 테이블명
where Name like '%값';
-- 값이 앞뒤 어디든지 포함된 경우
select
*
from 테이블명
where Name like '%값%';
BETWEEN a and b
a 이상 b 이하인 경우 사용
-- where 기준컬럼 >= a and 기준컬럼 <= b 과 동일
select
*
from 테이블명
where 기준컬럼 between a and b;
NULL, NOT NULL
NULL인 경우 : IS NULL
NULL이 아닌 경우 : IS NOT NULL
-- 기준컬럼에서 NULL값인 경우 찾음
select
*
from 테이블명
where 기준컬럼 is null;
-- 기준컬럼에서 NULL값이 아닌 경우 찾음
select
*
from 테이블명
where 기준컬럼 is not null;
ORDER BY ~ ASC, DESC
데이터 순서 정렬
select
*
from 테이블명
where 컬럼명 + 조건
order by 기준컬럼 ASC(오름차순) / DESC(내림차순);
GROUP BY
특정 컬럼을 기준으로 그룹 연산 수행 (평균, 최소값, 최대값, 행 갯수 등 집계 연산)
select
기준 컬럼명,
그룹 연산 함수(컬럼)
from 테이블명
where 컬럼명
group by 기준컬럼;
HAVING
그룹 연산 후의 결과에서 특정 조건을 충족하는 행을 찾는 경우
select
기준컬럼,
집계함수(컬럼)
from 테이블명
group by 기준컬럼
having 집계함수(컬럼) < 값; -- 예시
JOIN
여러 곳에 분산된 데이터 모아서 가져오기
INNER JOIN(교집합)
왼쪽, 오른쪽에 있는 테이블에서 기준 컬럼의 값이 일치하는 것만 합침
select
*
from 테이블명
inner join 테이블명2 on 테이블명.기준컬럼명 = 테이블명2.기준컬럼명;
-- INNER JOIN은 INNER 생략 가능
select
*
from 테이블명
join 테이블명2 on 테이블명.기준컬럼명 = 테이블명2.기준컬럼명;
LEFT (OUTER) JOIN
왼쪽 테이블의 기준 컬럼에 있는 자료에 해당하는 값만 조회(매칭 안되면 NULL)
-- LEFT JOIN
select
*
from 테이블1 as 별칭1
left join 테이블2 as 별칭2 on 별칭1.기준컬럼 = 별칭2.기준컬럼;
RIGHT (OUTER) JOIN
오른쪽 테이블의 기준 컬럼에 있는 자료에 해당하는 값만 조회(매칭 안되면 NULL)
-- RIGHT JOIN
select
*
from 테이블1 as 별칭1
right join 테이블2 as 별칭2 on 별칭1.기준컬럼 = 별칭2.기준컬럼;
+
as ~ : 별칭
테이블1.기준컬럼 = 별칭1.기준컬럼
3개의 테이블을 하나로 합치기
테이블1 + 테이블2 = 테이블12 + 테이블3 = 테이블123
데이터를 어떻게 합칠 것인지 사전에 명확한 기준에 따라 조회
select
*
from 테이블1 테1
join 테이블2 테2 on 테1.기준컬럼 = 테2.기준컬럼
join 테이블3 테3 on 테1.기준컬럼 = 테3.기준컬럼;
데이터 분석을 위한 SQL 입문_4
SQL과 MySQL 설치부터 기본적인 SELECT문과 JOIN까지 알아보았습니다.
자세한 내용은 혼자 공부하는 SQL 블로그 글도 참고해주시기 바랍니다.
'혼공시리즈/혼공S_혼자 공부하는 SQL' 카테고리의 글 목록
데이터 분석 공부 열심히 하는 중😁
everyonelove.tistory.com
(위 내용은 혼자 공부하는 SQL 정리본으로 MySQL에 관한 다양한 내용을 정리해놓았습니다.)
'BOOTCAMP > SQL(MySQL)' 카테고리의 다른 글
[SQL입문] MySQL_뷰(VIEW)와 MySQL 권한 부여, 실습 문제 풀이 (0) | 2025.03.02 |
---|---|
[SQL입문] MySQL_SQL 함수(숫자, 문자열, 날짜와 시간) 활용 (0) | 2025.02.28 |
[SQL입문] MySQL_ERD 다이어그램 생성과 DB 백업 및 불러오기 (1) | 2025.02.28 |
[SQL입문] MySQL_제약조건 있는 테이블 활용 및 ROLLBACK 실습 (2) | 2025.02.27 |