SQL 강의 1, 2주차 (08.03)

이재하·2023년 8월 3일
0

항해99

목록 보기
13/48

기초 언어 학습 주차가 끝나고 강의 수강 및 웹미니 프로젝트 주차가 시작했다.
기초 언어 학습 주차 후반부에 객체지향을 시작하면서 몰입이 많이 깨졌고 풀어놓은 알고리즘 TIL 작성도 미뤘다.
이번 주차부터 다시 마음을 가다듬고 프로젝트를 마무리하기 위해 몰입을 기대한다.


SQL 강의 1주차

  • 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
  • DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
  • 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.

데이터베이스 기초 개념

데이터베이스란?

여러 사람들이 같이 사용할 목적으로 데이터를 담는 통

원하는대로 데이터를 저장하고 사용하기 위해서는 다양한 기능이 필요하다.
따라서 모든 데이터베이스는 CRUD에 해당하는 기능을 지원한다.

C (Create) : 데이터의 생성을 의미
R (Read) : 저장된 데이터를 읽어오는 것을 의미
U (Update) : 저장된 데이터를 변경
D (Delete) : 저장된 데이터를 삭제하는 것을 의미

SQL(Structured Query Language) 이 필요한 이유

데이터베이스에 요청 Query을 날려서 원하는 데이터를 가져오는 것을 도와주는 언어라는 의미
데이터를 읽어오는 과정인 R (Read)를 편하게 만들어준다. 그리고, 데이터를 손쉽고 깔끔하게 정리/분석하는 기능도 지원한다.

테이블과 필드

  • 테이블 : 테이블은 데이터가 담긴 엑셀 시트와 동일하다. 이런 형태의 값이 데이터베이스에 담기면, orders라는 이름의 테이블이 된다.
  • 필드 : order_no, created_at, course_title, user_id, payment_method, email 각각이 필드다.

강의에서 사용하는 데이터베이스 테이블

  • checkins : 강의실 들어오며 남기는 '오늘의 다짐'이 들어있다.
  • courses : 개설 강좌 정보가 들어있다.
  • enrolleds : 유저별 강좌 등록정보가 들어있다.
  • enrolleds_detail : 유저별 들을 수 있는 영상과, 들었는지 여부가 들어있다.
  • orders : 주문 (수강등록) 정보가 들어있다.
  • point_users : 유저별 포인트 점수가 들어있다.
  • users : 유저 정보가 들어있다.

Select 쿼리문

Select 쿼리문이란?

(Query)쿼리는 질의를 의미한다. 데이터베이스에 명령을 내리는 것을 의미한다.
여기서 Select 쿼리문은, 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미이다.

데이터베이스의 테이블 보기

show tables;

checkins, courses, enrolleds ... 라는 이름의 테이블들이 있다

orders 테이블의 데이터 가져와보기

select * from orders;

orders 테이블의 특정 필드만 가져와보기

select created_at, course_title, payment_method, email from orders;


Where 절 (특정 데이터만 가져오기)

Where 절의 개념

Where 절은, Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것을 의미한다.

select * from orders
where payment_method = "kakaopay";

orders 테이블에서 payment_method가 kakaopay인 것만 가져오라는 의미

where 절과 자주 같이 쓰는 문법

!= : 같지않음
between : 범위
in () : 포함
like : 패턴
etc...

  • betweenand와 같이 사용하고 범위를 지정하는데, between A and B 는 A와 B사이의 데이터를 지칭한다.

  • in () 은 괄호()안에 들어간 조건이 포함한 데이터를 가져온다.

  • week in (1, 3) 은 1, 3주차의 데이터를 지칭한다.

  • like 는 패턴의 조건인데 '%' 를 같이 사용한다.

  • comment like '%123' 은 comment의 내용의 앞부분이 어떻든 뒷부분이 무조건 123으로 끝나는 데이터를 지칭한다. 또, like '1%123' 은 맨앞부분이 1로 시작하고 맨뒷부분이 123으로 끝나는 데이터를 지칭한다.

이외 유용한 문법

limit : 일부 데이터만 가져오기
distinct : 중복 데이터는 제외하고 가져오기
count : 몇 개인지 숫자 세기

e.g) 회원들의 성(family name) 데이터 가져오기

SELECT count(distinct(name)) from users;

퀴즈

성이 남씨인 유저의 이메일만 추출하기

select email from users 
where name = "남**";

Gmail을 사용하는 2020/07/12~13에 가입한 유저를 추출하기

select * from users
where created_at between "2020-07-12" and "2020-07-14"
and email like "%gmail.com";

Gmail을 사용하는 2020/07/12~13에 가입한 유저의 수를 세기

select count(*) from users
where created_at between "2020-07-12" and "2020-07-14"
and email like "%gmail.com";
select * from orders
where email like '%naver.com'
and course_title = '웹개발 종합반'
and payment_method = 'kakaopay'


SQL 강의 2주차

  • 동일한 범주의 데이터를 묶어서 통계를 내주는 Group by를 이해한다.
  • 출력하는 데이터를 필드의 값으로 정렬하여 출력하는 Order by를 익힌다.
  • 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.

Group by

특정 필드를 그룹화 해준다.

  • 성씨별 회원수를 Group by 로 쉽게 구해보기
select name, count(*) from users
group by name;


Order by

테이블 데이터를 정렬해준다.

오름차순 정렬

select name, count(*) from users
group by name
order by count(*);

내림차순 정렬

select name, count(*) from users
group by name
order by count(*) desc;


별칭기능 : Alias

쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있다. 그래서 SQL은 Alias라는 별칭 기능을 지원한다.

select * from orders o
where o.course_title = '앱개발 종합반'

as 이용 count(*) 가 아니라 cnt로 출력

select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method


퀴즈

1. orders 테이블에서 주문 데이터를 읽어오고
2. 웹개발 종합반 데이터만 남기고
3. 결제수단(범주) 별로 그룹화하고
4. 결제수단별 주문건수를 세어준다
select payment_method, count(*) from orders
where course_title = "웹개발 종합반"
group by payment_method;
위 쿼리가 실행되는 순서: from → where → group by → select 

네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기

select payment_method, count(*) from orders
where email like '%naver.com' and course_title = '앱개발 종합반'
group by payment_method

1개의 댓글

comment-user-thumbnail
2023년 8월 3일

글 재미있게 봤습니다.

답글 달기