개발 환경 준비
SQL이 작동하기 위해서 특정 종류의 데이터베이스가 필요하다. SQLite는 모바일 앱 저장소와 개발에 주로 사용되는 유명한 경량 데이터베이스이다. Sequel Pro, install MySQL, fire up a Laravel application 등의 도구를 사용해 쿼리를 실행할 수 있는 데이터베이스 환경을 생성할 수 있다.
테이블 생성하기
관계형 데이터베이스(MySQL, SQLite, PostgreSQL)는 테이블들로 이루어져 있다. 하나의 데이터베이스는 많은 테이블을 갖고 있고 각 테이블은 레코드의 특정 카테고리로 이루어져 있다. 많은 웹 애플리케이션에서 보통 마이그레이션을 통해 테이블을 생성하지만, SQL의 create문을 읽고 작성할 수 있으면 도움일 될 것이다.
create table exercise_logs (
id integer primary key autoincrement,
type text,
minutes integer,
calories integer,
heart_rate integer
);
위에 있는 SQL문은 5개의 열(id, type, minutes, calories, heart_rate)을 가진 exercise_logs라는 테이블을 생성한다. 각 열은 정수나 텍스트처럼 특정 데이터 타입을 갖는다. create문의 두 번째 줄에서 새로운 레코드가 고유한 id를 갖는다고 명시하였는데, 이를 테이블의 기본키(primary key)라고 한다. 또한 테이블의 구조와 정의를 스키마라고 한다.
테이블에 데이터 삽입하기
insert into exercise_logs(type, minutes, calories, heart_rate) values ('biking', 30, 1000, 110);
테이블의 이름인 exercise_logs와 데이터를 삽입하고 싶은 특정 열을 명시하고, values 키워드 다음에 데이터베이스에 삽입하고 싶은 데이터를 명시하였다.
Select문
데이터베이스의 모든 레코드를 선택하기 위해서 다음과 같은 select문을 작성할 수 있다.
select * from exercise_logs;
사용자가 참가하고 있는 모든 활동과 그 활동을 위해 소모한 전체 칼로리를 찾기 위해서 다음과 같은 select문을 작성할 수 있다.
select type, sum(calories) as total_calories from exercise_logs group by type;
다른 예로 어떤 등급의 학생이 몇 명인지를 결정하는 것과 같은 여러 종류의 일을 select문으로 처리할 수 있다.
select count(*),
case
when heart_rate > 220 - 30 then 'above max'
when heart_rate > round(.9 * (220 - 30)) then 'above target'
when heart_rate > round(.5 * (220 - 30)) then 'within target'
else 'below target'
end as 'heart_rate_zone'
from exercise_logs
group by heart_rate_zone;
SQL은 목적에 맞게 데이터를 설명할 때 아주 유용하다. 마케팅 결과 필터링, 고객 정보 찾기, 서버 로그 찾기, 보고용 대시보드 생성하기 등 여러 작업에 활용될 수 있다.
서브쿼리와 Like
가끔은 쿼리를 이용해 동적으로 데이터를 얻어 다른 쿼리에 적용해야 하는 일이 있다. 이 경우 서브쿼리를 사용한다. drs_favorites라는 테이블은 의사의 추천 활동 정보를 담고 있다고 해보자.
create table drs_favorites (
id integer primary key,
type text,
reason text
);
insert into drs_favorites (type, reason) values ('running', 'improves cardiovascular health.');
select * from exercise_logs where type in (select type from drs_favorites where reason like "%cardiovascular%");
위의 코드에서 cardiovascular라는 단어가 포함된 모든 레코드를 선택한다.
참고 링크
DataLit : 데이터 다루기
https://www.boostcourse.org/ds103/joinLectures/84465
SQL 소개
https://www.w3schools.com/sql/sql_intro.asp
'프로젝트 단위 공부 > [부스트코스] DataLit : 데이터 다루기' 카테고리의 다른 글
Ch1-9. 데이터 시각화하기 (0) | 2023.07.21 |
---|---|
Ch1-7. 확률 변수 (0) | 2023.07.20 |
Ch1-6. 이산 확률 (0) | 2023.07.20 |
Ch1-3. 텍스트 데이터 정제 (0) | 2023.07.17 |
Ch1-1. 파이썬 정규표현식 다시보기 (0) | 2023.07.17 |