본문 바로가기

Education

[엑셀보다 쉬운 SQL] week1: Select, Where

반응형

1~4주차 배울 순서

  • 1주차: Select, Where
  • 2주차: Group by, Order by
  • 3주차: Join
  • 4주차: Subquery 그 외

 

강의 자료 

 

[내일배움단] 엑셀보다 쉬운 SQL - 1주차

매 주차 강의자료 시작에 PDF파일을 올려두었어요!

teamsparta.notion.site


 

1. 1주차 오늘 배울 것

데이터 베이스(DB)와 SQL이 왜 필요할까?

데이터베이스에 데이터를 저장한다?

  • 엑셀로 관리해도 된다.
  • 하지만 데이터가 너무 많아지면 엑셀 시트가 느려지고, 문제가 발생한다.
  • 따라서 데이터베이스에 모든 주문 데이터를 저장한다.

 

데이터베이스의 이점

  1. 필요한 데이터만 불러와서 작업을 할 수 있으므로 속도가 빠르다.
  2. 충돌이 생겼을 경우, 에러를 띄우는 기능을 추가하여 충돌로 생기는 문제를 해결할 수 있다.
  • 아주 작은 회사에서는 불필요하겠으나, 많은 양의 데이터를 효과적으로 저장/수정/사용하려면 데이터베이스는 필요하다.

 

데이터베이스 기초 개념

데이터베이스

  • = 여러 사람들이 같이 사용할 목적으로 데이터를 담는 통
  • CRUD 기능 지원
    • C (Create) : 데이터 생성
    • R (Read) : 저장된 데이터 읽어오기
    • U (Update) : 저장된 데이터 변경
    • D (Delete) : 저장된 데이터 삭제

 

SQL이 왜 필요할까?

SQL

  • 데이터베이스에 연결하기 위해 약속된 규칙, 언어

 

 

2. 필수 프로그램 설치 안내

DBeaver

설치

https://dbeaver.io/download/

 

데이터베이스 연결

1. DBeaver 실행

2. 플러그 모양 클릭

3. MySQL 선택 -> 다음

4. Server Host, Database, Username, Password를 입력하고, 'Test Connection' 버튼 클릭

5. Driver 설치

6. 연결 완료. 확인 버튼 클릭

 

 

3. SQL과 데이터베이스 살펴보기

Select 쿼리문

쿼리(Query)문이란?

  • 쿼리 = 질의
  • 데이터베이스에 명령을 내리는 것을 의미함

 

Select 쿼리문이란?

  • '데이터를 선택해서 가져오겠다'는 의미
  • 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지

 

테이블 & 필드

  • 테이블: orders (=엑셀 시트)
  • 필드: order_no, created_at, course_title, user_id, payment_method, email

 

Select 쿼리문 연습

DBeaver을 실행한다.

 

테이블 보기

show tables;

 

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

select * from orders;

 

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

select order_no, created_at, user_id, email from orders;

 

데이터베이스 구조

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

 

 

4. Select, Where 절 등 문법 연습해보기

Select, Where 절

Where 절이란?

  • Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것을 의미
  • 예1) orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!
select * from orders 
where payment_method = 'kakaopay'
  • 예2) point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!
select * from point_users
where point > 5000
  • 예3) orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!
select * from orders
where course_title = '앱개발 종합반' and payment_method = 'CARD'

❗문자열에 작은 따옴표(')로 감싸주는 것 잊지 말기

 

Where 절 사용하기 팁

  1. show tables로 어떤 테이블이 있는지 살펴보기
  2. 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기
  3. 원하는 정보가 없으면 다른 테이블에도 2.를 해보기
  4. 테이블을 찾았다! -> 조건을 걸 필드를 찾기
  5. select * from 테이블명 where 조건 이렇게 쿼리 완성!

 

Quiz

Quiz 1) 포인트가 20000점보다 많은 유저만 뽑아보기

select * from point_users
where point > 20000

Quiz 2) 성이 황씨인 유저만 뽑아보기

select * from users
where name = '황**'

Quiz 3) 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기

select * from orders
where course_title = '웹개발 종합반' and payment_method = 'CARD'

 

Where 절과 자주 같이 쓰는 문법

같지 않음 ➡️ !=

ex) 웹개발 종합반 제외한 모든 데이터 보기

select * from orders
where course_title != '웹개발 종합반'

 

범위 ➡️ between and

ex) 7월 13일, 7월 14일의 주문 데이터만 보기

select * from orders
where created_at between '2020-07-13' and '2020-07-15'

 

포함 ➡️ in

ex) 1, 3주차 사람들의 '오늘의 다짐' 데이터만 보기

select * from checkins
where week in (1,3)

 

패턴(문자열 규칙) ➡️ like

ex) 다음 (daum) 이메일을 사용하는 유저만 보기

select * from users
where email like '%@daum%'

%: 아무 문자나 들어가도 상관없음을 의미

 

일부 데이터만 가져오기 ➡️ limit

❗DB에 데이터가 많은 경우 유용함

ex) 5개 데이터만 가져오기

select * from users
where payment_method = 'kakaopay'
limit 5

 

중복 데이터는 제외하고 가져오기 ➡️ distinct

ex) payment_method 중복 제외하고 보기

select distinct(payment_method) from orders

 

몇 개인지 숫자 세보기 ➡️ count

ex) 특정 데이터 개수가 몇개인지 보기

select count(payment_method) from orders

-> 286개

 

Quiz

Quiz 1) 결제수단이 CARD가 아닌 주문 데이터만 추출해보기

select * from orders
where payment_method != 'CARD'

Quiz 2) 20000~30000 포인트 보유하고 있는 유저만 추출해보기

select * from point_users
where point between 20000 and 30000

Quiz 3) 이메일이 s로 시작하고 com로 끝나는 유저만 추출해보기

select * from users
where email like 's%com'

Quiz 4) 이메일이 s로 시작하고 com로 끝나면서 성이 이씨인 유저만 추출해보기

select * from users
where email like 's%com' and name = '이**'

Quiz 5) 스파르타 회원 분들의 성(family name)씨가 몇개인지 보기

select count(distinct(name)) from users

-> 54개

 

 

5. 같이 삽질해보기

  • 에러 메시지를 보고 원인 파악하여 문제를 해결하자.

 

ex 1)

  • where 절에 있는 kakaopay 라는 컬럼이 알려지지 않았다.
  • 즉, kakaopay라는 글자가 컬럼으로 인식되어 발생한 에러인 것.

 

ex 2) 

  • 'name = "이**"' 에서 에러가 발생했다.
  • and나 or로 연결해주지 않은 것.

 

 

6. 퀴즈 풀어보기

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

select email from users
where name = '남**'

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

select * from users
where email like '%@gmail%'
and created_at BETWEEN '2020-07-12' and '2020-07-14'

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

select count(*) from users
where email like '%@gmail%'
and created_at BETWEEN '2020-07-12' and '2020-07-14'

 

 

7. 끝 & 숙제 설명

HW) naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기

select * from orders
where email like '%@naver%'
and course_title = '웹개발 종합반'
and payment_method = 'kakaopay'

 

 

 

 

반응형