본문 바로가기

카테고리 없음

스파르타 초보 SQL

SELECT * FROM orders
where payment_method = 'kakaopay'
and course_title ="앱개발 종합반"
and email like '%naver.com'

[수업 목표]

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

[목차]

<aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t

</aside>


01. 1주차 오늘 배울 것

    1. 환영합니다!
    <aside> 😎 환영합니다 여러분!</aside>맨 처음 SQL을 접했을 때, 너무 헷갈리고 어려웠던 개념들. SQL 쿼리를 작성하기 전에 익혀야 할 개념이 너무나도 많았습니다.</aside>
    • 아쉽게도, 이런 개념이 실무에서 그렇게 도움이 되지 않았습니다.
    <aside> 👉 SQL을 잘 하기 위해서는,</aside>SQL의 쉬운 개념부터 어려운 개념까지, SQL 쿼리를 저와 함께 작성해보며 '같이 삽질하며 익히는' 수업입니다.</aside>
    • 자, 이제 본격적으로 시작해볼까요?
  • 저는, 이러한 학습법이 SQL을 잘하게 되기까지의 지름길이라 확신합니다.
  • <aside> 👉 이 수업은
  • 복잡한 개념을 모두 이해하는 방식이 아니라, 일단 반복적으로 써보면서 감과 원리를 익혀가는 것이 중요하다고 느꼈습니다.
  • 예) 관계형 데이터베이스, ERD, 스키마, 엔티티 등..
  • <aside> 👉 개인적인 경험
  • 저는 '엑셀보다 쉬운 SQL' 튜터를 맡은 이범규입니다. 여러분들과 4주동안 SQL을 함께 연습할 생각을 하니 가슴이 두근두근하네요.
    1. 데이터베이스(DB)와 SQL이 왜 필요할까?
      1. 내가 배달음식점의 사장이라면?
      <aside> 👉 자, 배달음식점 사장이 되었다고 상상해봅시다! 아직까지는 규모가 크지 않아서, 혼자서 이렇게 엑셀 시트에 주문내역을 정리하고 있어요.
      1. 필요한 데이터만 불러와서 작업할 수 있어서 속도는 빨라졌고
      2. 충돌이 생겼을 경우 에러를 띄우는 기능을 추가해서 충돌로 생기는 문제도 사라졌어요.
      </aside>
      • 아주 작은 회사에서는 불필요하겠지만, 많은 양의 데이터를 효과적으로 저장/수정/사용하기 위해서는 데이터베이스가 필요합니다. 그래서 거의 모든 회사의 데이터는 데이터베이스에 저장되어 있어요.
      • 이 외에도, 데이터베이스가 사용자에게 주는 이점은 정말 많답니다! 오늘은 첫 날이니, 이 정도만 살펴보아요.
    • <aside> 😎 고민을 하다가, 데이터베이스에 모든 주문데이터를 저장하기 시작했어요.
    • </aside>
    • <aside> ❗ 그런데 문제가 생겼어요! 데이터가 많아지면서 엑셀 시트가 점점 느려지고, 여러사람이 작업하는 내용이 충돌하면서 취소된 주문에 배달이 나가는 등의 문제가 생겨나기 시작했어요.
    • </aside>
    • <aside> 😎 그런데 어느날, 장사가 엄청 잘 되기 시작했어요! 이제는 혼자서는 힘들어져서, 주문을 기록해주고 일을 도와줄 직원 여러명을 채용했어요.
    • </aside>
      1. 데이터베이스 기초 개념
      <aside> 👉 데이터베이스란? 여러 사람들이 같이 사용할 목적으로 데이터를 담는 통이라고 생각하면 되어요.<aside> 👉 원하는대로 데이터를 저장하고 사용하기 위해서는 다양한 기능이 있어야겠죠? 그래서 통상적으로, 모든 데이터베이스는 CRUD에 해당하는 기능을 지원해요.</aside></aside>
    • <aside> 😎 점점 어려워진다고요? 괜찮아요! 이 강의에서는, 저장된 데이터를 읽어오는 "R (Read)"에 대해서만 배울 것이랍니다.
    • C (Create): 데이터의 생성을 의미합니다 R (Read): 저장된 데이터를 읽어오는 것을 의미해요 U (Update): 저장된 데이터를 변경! D (Delete): 저장된 데이터를 삭제하는 것을 의미해요
    • </aside>
      1. SQL이 왜 필요할까?
      <aside> 👉 자, 그럼 SQL은 왜 필요할까요? 데이터를 읽어오는 과정인 "R (Read)"를 엄청나게 편하게 만들어줍니다. 그리고, 데이터를 손쉽고 깔끔하게 정리/분석하는 기능도 지원한답니다!</aside></aside><aside> 😎 짧은 SQL 쿼리 한 줄이면 저장된 데이터를 이렇게 간단히 가져올 수 있어요!이렇게, 데이터를 가져오는 명령어를 작성하는 것을 'SQL 쿼리를 작성한다' 라고 한답니다.
    • </aside>
    • <aside> 👉 SQL은 Structured Query Language의 약자인데요, 결국 데이터베이스에 요청 (Query)을 날려서 원하는 데이터를 가져오는 것을 도와주는 언어라는 의미에요!
    • 열심히 저장된 데이터, 잘 가져다 써야겠죠?
      1. 1~4주차에 배울 순서!
      • 1주차: Select, Where</aside>
      • <aside> 👉 데이터를 불러오고 (Select), 조건에 맞게 필터링 하는 것 (Where)!
      • 2주차: Group by, Order by</aside>
      • <aside> 👉 데이터를 범주에 따라 묶어서 통계치를 구하고 (Group by), 정렬하는 것 (Order by)!
      • 3주차: Join</aside>
      • <aside> 👉 여러 데이터를 합쳐서 분석하기 (Join), 더 쉽고 깔끔하게 원하는 데이터를 얻기 (Subquery)
      • 4주차: Subquery, 그 외</aside>
      • <aside> 👉 실전의 데이터는 생각보다 잘 정리되어 있지 않답니다! 데이터 분석을 위해서 데이터를 원하는 형태로 정리하는 방법을 배워요.

02. 필수 프로그램 설치

    1. DBeaver (다운로드 링크)
    <aside> 💡 DBeaver는 여러분이 SQL을 보다 손쉽게 사용할 수 있도록 도와주는 도구입니다! 🤩
    • (←눌러보기) DBeaver 다운로드 하기
      1. 다운로드 링크를 클릭하세요.
      2. Windows를 사용하고 계시면 (installer), Mac을 사용하고 계시면 (dmg) 라고 되어있는 링크를 클릭하여 DBeaver를 다운로드 받은 후 설치까지 마무리해주세요.
    • </aside>
    • <aside> 👉 '계속' 버튼을 눌러서 진행해주시면 됩니다!
    • (←눌러보기) 스파르타 데이터베이스 연결 방법 참고
      1. 설치한 DBeaver를 실행합니다
      2. 좌측 상단 플러그 모양의 아이콘을 클릭합니다
      3. 새 창이 뜨면, MySQL을 선택하고 '다음' 버튼을 누릅니다
      4. 아래와 같이 정보를 입력하고 좌측 하단 'Test Connection' 버튼을 클릭합니다.Username: sparta_student Password: sparta99
      5. </aside>
      6. <aside> 👉 Server Host: sparta.cbt9ceqjwlr9.ap-northeast-2.rds.amazonaws.com Database: sparta
      7. 만약 Driver가 설치되어있지 않으면 아래와 같은 창이 뜹니다. 다운로드 버튼을 눌러줍니다.
      8. Connection Test 결과에 'Connected'라고 뜨면, 확인 버튼을 누르고 완료 버튼을 눌러줍니다.
  • </aside>

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

<aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!

</aside>

    1. Select 쿼리문의 개념
    <aside> 👉 쿼리(Query)문이란? 쿼리는 질의를 의미하죠. 데이터베이스에 명령을 내리는 것을 의미합니다.</aside>
    • 4주동안 배울 것은 데이터를 잘 뽑아내는 것이죠? 따라서, 수업의 모든 쿼리문에는 Select가 들어갑니다.
    • Select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지 로 구성됩니다.
    <aside> 👉 잠깐! 테이블과 필드가 뭐냐고요? 아래 예시를 보고갈게요.
    • 테이블과 필드가 뭘까요?
      • 테이블: orders라는 엑셀 시트명 보이시죠? 테이블은 데이터가 담긴 엑셀 시트와 동일합니다. 이런 형태의 값이 데이터베이스에 담기면, orders라는 이름의 테이블이 되겠죠.
      • 필드: order_no, created_at, course_title, user_id, payment_method, email 각각이 필드입니다.
      <aside> 👉 예시) Select 쿼리문을 통해 'orders 테이블의 created_at, course_title, payment_method, email 필드를 가져와줘!'라고 명령을 내릴 수 있답니다.
    • </aside>
  • </aside>
  • 여기서 Select 쿼리문은, 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미입니다.
    1. Select 쿼리문 연습
    <aside> 👉 자, 미리 설치한 DBeaver를 켜볼까요?
    • 이런 화면이 나오면 성공!
    <aside> 👉 SQL 쿼리를 작성하는 입력창이 없다면, 좌측 상단 양피지 모양을 클릭해서 New Script를 해주세요!
    • [코드스니펫] - 스파르타 데이터베이스의 테이블 보기
      • 아래와 같은 화면이 나오면 성공!
    • </aside>
    • <aside> 👉 checkins, courses, enrolleds ... 라는 이름의 테이블들이 있다는 이야깁니다!
    • show tables;
    • [코드스니펫] - orders 테이블의 데이터 가져와보기
      • 요런 데이터가 나오면 성공!
    • select * from orders;
    • [코드스니펫] - orders 테이블의 특정 필드만 가져와보기
      • 마찬가지로, 이런 데이터가 나오면 성공!
    • select created_at, course_title, payment_method, email from orders;
    <aside> 😎 참 쉽죠? 축하합니다! 여러분은 이제 데이터베이스 테이블에서 데이터를 꺼낼 수 있게 되었어요.
  • </aside>
  • </aside>
  • </aside>
    1. 스파르타 데이터베이스의 구조
    <aside> 👉 스파르타 데이터베이스에는 아래와 같은 테이블이 있어요.
    • checkins: 여러분이 강의실 들어오시며 남기는 '오늘의 다짐'이 들어있어요
    • courses: 스파르타의 개설 강좌 정보가 들어있어요
    • enrolleds: 유저별 강좌 등록정보가 들어있어요
    • enrolleds_detail: 유저별 들을 수 있는 영상과, 들었는지 여부가 들어있어요
    • orders: 주문 (수강등록) 정보가 들어있어요
    • point_users: 유저별 포인트 점수가 들어있어요
    • users: 유저 정보가 들어있어요
    <aside> 😎 자, 저와 함께 살펴볼까요?
    • (소곤소곤) 직접 select * from 테이블명 이렇게 쿼리를 날려보셔도 돼요!
  • </aside>
  • </aside>

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

    1. Where 절의 개념
    <aside> 👉 Where 절은, Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것을 의미해요.예1) orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!예3) orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!
  • 예2) point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!
  • </aside>
    1. Select 쿼리문에 Where 절 함께 써보기
    <aside> 😎 쿼리는 열 번 듣는 것보다, 한 번 짜는게 빨리 늡니다! 앞의 예시를 같이 해볼까요?
    • 쿼리를 직접 써보면서 이해해볼까요? 일단 따라 써 봅니다!
      • 아주 직관적이죠? "orders 테이블에서 payment_method가 kakaopay인 것만 가져와줘!" 라는 의미랍니다.
      • 만약 "kakaopay"가 아니라 kakaopay라고 쓰면?
        • 당연히 에러가 납니다! 🥳
        • [Unknown column 'kakaopay' in 'where clause'] 에러문구를 천천히 읽어볼까요?
        <aside> 👉 Where 절에 있는 kakaopay라는 컬럼은 없다! 는 뜻이에요. 여기서 컬럼은 필드를 의미해요. 정말, kakaopay라는 글자를 컬럼(필드명)으로 인식해버렸죠?
      • </aside>
    • </aside>
    • <aside> 👉 Q) 잠깐! 왜 kakaopay가 아니라 "kakaopay"라고 쓰나요? A) kakaopay를 필드명이나 테이블명이 아닌 문자열로 인식시키려는거에요.
    • select * from orders where payment_method = "kakaopay";
    • 여러 조건을 걸어주기 위해서는? 이것도 우선 따라 써 봅시다!
      • 마찬가지로 엄청 직관적이죠? and 를 넣어서 원하는 조건을 계속 추가해주면 됩니다!
    • select * from orders where course_title = "앱개발 종합반" and payment_method = "kakaopay";
  • </aside>
    1. Select 쿼리문에 Where 절 함께 써보기 연습
    <aside> 👉 자, 이제 연습을 해볼까요? (1) 원하는 테이블과 (2) 조건, 이 두 가지만 기억하면 됩니다!
    • SQL을 잘 하기 위해서는, 원하는 정보가 어느 테이블에 담겨있는지 잘 찾는 것이 매우 중요하답니다!
    • [퀴즈] 포인트가 20000점보다 많은 유저만 뽑아보기!</aside>
      • 이렇게 출력돼야 해요!
      • 정답 쿼리 살펴보기!
      • select * from point_users where point > 20000;
    • <aside> 👉 [힌트!] (1) 원하는 테이블: point_users (2) 조건: point > 20000
    • [퀴즈] 성이 황씨인 유저만 뽑아보기</aside>
      • 요렇게 나와야 합니다~~!
      • 정답 쿼리 살펴보기
      • select * from users where name = "황**";
    • <aside> 👉 이 퀴즈는 힌트 없이 혼자 해보세요!
    • [퀴즈] 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기!</aside>
      • 요렇게 나와야 합니다~~!
      • 정답 쿼리 살펴보기
      • select * from orders where course_title = "웹개발 종합반" and payment_method = "CARD";
    • <aside> 👉 [힌트!] 여러 조건은 and로 함께 넣을 수 있다고 했었죠?
  • </aside>
    1. [꿀팁🍯] 이렇게 쿼리를 작성하면 편해요!
    <aside> 👉 1) show tables로 어떤 테이블이 있는지 살펴보기 2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기 3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기 4) 테이블을 찾았다! 조건을 걸 필드를 찾기 5) select * from 테이블명 where 조건 이렇게 쿼리 완성!<aside> 😎 참 쉽죠? 여러분은 이제 조건에 맞는 데이터를 가져올 수 있는 사람이 되었답니다! 👏
  • </aside>
  • </aside>
    1. Where 절과 자주 같이쓰는 문법 배우기
    • '같지 않음' 조건 걸어보기</aside>
      • '같지 않음' 조건은 != 로 걸 수 있습니다.
      <aside> 👉 '웹개발 종합반'을 제외하고 주문데이터를 보고 싶어졌어요. 어떻게 하면 좋을까요?
      • [코드스니펫] '같지 않음' 조건 걸어보기
        • "웹개발 종합반" 데이터 없이 잘 나오죠?
      • select * from orders where course_title != "웹개발 종합반";
      <aside> 👉 잠깐 상식! '!=' 에서 ! (느낌표)는 부정 (not)을 의미합니다. '='는 같음을 의미하니, '!='는 같지 않음이겠죠!
    • </aside>
    • </aside>
    • <aside> 😎 자, 쉬운 것부터 시작해 볼까요?
    • '범위' 조건 걸어보기</aside>
      • '범위' 조건은 between 으로 걸 수 있어요.
      • [코드스니펫] '범위' 조건 걸어보기
        • 7월 13일, 7월 14일 주문데이터만 잘 나오죠?
      • select * from orders where created_at between "2020-07-13" and "2020-07-15";
    • <aside> 👉 7월 13일, 7월 14일의 주문데이터만 보고 싶어졌어요. 어떻게 해야 할까요?
    • '포함' 조건 걸어보기</aside>
      • '포함' 조건은 in 으로 걸 수 있어요.
      • [코드스니펫] '포함' 조건 걸어보기
        • 1, 3 주차 사람들의 '오늘의 다짐'만 잘 나오죠?
      • select * from checkins where week in (1, 3);
    • <aside> 👉 1, 3주차 사람들의 '오늘의 다짐' 데이터만 보고 싶어졌어요.
    • '패턴' (문자열 규칙) 조건 걸어보기</aside>
      • '패턴' 조건은 like 으로 걸 수 있어요.
      • [코드스니펫] '패턴' (문자열 규칙) 조건 걸어보기
        • 오! 엄청 신기하죠? 많이 사용되는 유용한 기능이랍니다!
      • select * from users where email like '%daum.net';
      • [꿀팁🍯] Like의 다양한 사용법</aside>
        • where email like 'a%': email 필드값이 a로 시작하는 모든 데이터
        • where email like '%a' email 필드값이 a로 끝나는 모든 데이터
        • where email like '%co%' email 필드값에 co를 포함하는 모든 데이터
        • where email like 'a%o' email 필드값이 a로 시작하고 o로 끝나는 모든 데이터
        <aside> 👉 이외에도 여러 문법이 있는데, 그때그때 필요한 것을 찾아서 쓰면 됩니다! 같이 한번 찾아볼까요? ('how to use like in sql' 구글링!)
      • </aside>
      • <aside> 👉 Like는 패턴으로 조건을 거는 문법으로, 사용법이 아주 다양하답니다!
    • <aside> 👉 다음 (daum) 이메일을 사용하는 유저만 보고 싶어졌어요. 어떻게 하죠?
    1. [퀴즈] 자, 이제 직접 쿼리를 짜볼까요?
    <aside> 😎 SQL 잘하는 가장 쉬운 방법: 직접 SQL 쿼리를 많이 짜보기!
    • [퀴즈] 결제수단이 CARD가 아닌 주문데이터만 추출해보기</aside>
      • 요런 식으로 나와야 합니다! (일부 데이터만 나온 이미지)
      • 정답 쿼리 살펴보기
      • select * from orders where payment_method != 'CARD';
    • <aside> 👉 [힌트!] '같지 않음' 조건은 != 를 사용한다고 했었죠?
    • [퀴즈] 20000~30000 포인트 보유하고 있는 유저만 추출해보기</aside>
      • 요런 식으로 나와야 합니다!
      • 정답 쿼리 살펴보기
      • select * from point_users where point between 20000 and 30000
    • <aside> 👉 [힌트!] '범위' 조건은 between을 사용한다고 했었죠?
    • [퀴즈] 이메일이 s로 시작하고 com로 끝나는 유저만 추출해보기</aside>
      • 요런 식으로 나와야 합니다!
      • 정답 쿼리 살펴보기
      • select * from users where email like 's%com';
    • <aside> 👉 [힌트!] Like에서 'a%o'를 사용하면 a로 시작하고 o로 끝나는 데이터를 얻을 수 있어요!
    • [퀴즈] 이메일이 s로 시작하고 com로 끝나면서 성이 이씨인 유저만 추출해보기</aside>
      • 요런 식으로 나와야 합니다!
      • 정답 쿼리 살펴보기
      • select * from users where email like 's%com' and name = "이**";
    • <aside> 👉 [힌트!] Like에서 'a%o'를 사용하면 a로 시작하고 o로 끝나는 데이터를 얻을 수 있어요!
  • </aside>
    1. 일부 데이터만 가져오기: Limit
    <aside> 👉 테이블에 어떤 데이터가 들어있나 잠깐 보려고 들어왔는데, 데이터를 다 불러오느라 시간이 오래 걸리면 힘들겠죠?
    • 그런 경우를 대비해, 일부 데이터만 가져오는 Limit이라는 기능이 있습니다.
    • 백문이 불여일견! 직접 SQL 쿼리를 볼까요?
      • 요렇게, 맨 뒤에 limit을 써주고 몇 개 출력할지 숫자를 적어주면 끝!
      • 딱 5개만 출력된 것을 알 수 있죠?
    • select * from orders where payment_method = "kakaopay" limit 5;
  • </aside>
    1. 중복 데이터는 제외하고 가져오기: Distinct
    <aside> 👉 자, 고객이 사용한 결제수단이 어떤 종류가 있을지 궁금할때 어떻게 할까요?
    1. orders 테이블을 모두 불러와서, 한줄한줄씩 읽으며 어떤 결제수단들이 있는지 확인한다
    2. distinct 기능을 사용해서 한 방에 본다
    </aside>
    • 정답은 2번! 너무 쉽죠?
    • 마찬가지로, 직접 바로 SQL 쿼리로 가시죠!
      • 출력하고 싶은 필드에 distinct로 감싸주면 끝!
      • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
    • select distinct(payment_method) from orders;
    1. 몇 개인지 숫자 세보기: Count
    <aside> 👉 이번에는 orders 테이블에 데이터가 몇 개 들어있는지 궁금해요! (결제가 몇 건이나 들어왔죠? 두근두근)
    1. orders 테이블의 데이터를 모두 불러와서, 한줄한줄씩 센다
    2. count 기능을 사용해서 한방에 본다
    </aside>
    • 당연히 2번이죠?
    • 바로 SQL 쿼리부터 보시죠!
      • 한 줄로 끝! select * from orders에서 *을, count로 감싸주면 됩니다.
      • 이렇게 한 줄로 끝!
    • select count(*) from orders
    1. [응용] Distinct와 Count를 같이 써보기
    <aside> 👉 스파르타 회원 분들의 성(family name)씨가 몇개인지 궁금하다면? 이번에도 마찬가지로 쉬운 방법이 있습니다!
    • SQL 쿼리 보러가기
      • 이렇게 하면 성씨가 쭉 나오죠?
      SELECT count(distinct(name)) from users;
      
      • 그리고, 여기에 count를 입혀주면 몇 개의 성씨가 있는지 알 수 있습니다. (참 쉽죠?)
    • select distinct(name) from users;
  • </aside>

05. 같이 삽질해보기

    1. 혼자서도 문제를 해결하려면
    <aside> 👉 SQL을 사용하다보면 예상하지 못했던 에러를 자주 마주하게 됩니다. 모든 에러에 대한 해결책을 외워서 해결하는 건 비효율적이겠죠?
    • 그럼 어떻게 하는게 좋을까요?
    <aside> 👉 기초적인 SQL의 경우, 에러 메시지를 보고 원인을 파악하여 문제를 해결해나가는 것!</aside>
    • 에러 메시지 해석해보기 (1)
      • 자, 뭔가 에러가 났습니다! 어떤 에러메시지일까요?
      • Unknown column 'kakaopay' in 'where clause'라고 나와있죠?
      <aside> 👉 Where 절에 있는 kakaopay라는 컬럼(필드)가 알려지지 않았다 (컴퓨터는 알지 못한다) 라는 것입니다.</aside>
      • 그러면 어떻게 하면 좋을까요?
      <aside> 👉 kakaopay를 'kakaopay'로 바꿔주면 되겠죠? 글자를 ''로 감싸면 변수가 아닌, 문자열(값)로 인식하겠다는 의미입니다.</aside>
    • 결제수단이 kakaopay라는 값을 가진 데이터만 불러오기 위해서는, kakaopay를 문자열(값)으로 지정해 줘야겠죠!
    • 즉, kakaopay라는 글자가 '컬럼(필드)' 이름으로 인식되어서 발생한 에러에요.
    • 에러 메시지 해석해보기 (2)
    <aside> 👉 에러가 생겼을 땐, 당황하지 않고 에러 메시지를 차근차근 읽어보세요! 지금은 어려울 수 있어요, 저랑 4주동안 연습하면 어느샌가 익숙해질거에요.
  • </aside>
  • 아직은 감이 안 잡힌다고요? 괜찮아요! 저랑 같이 문제를 해결해봐요.
  • </aside>

06**. 퀴즈 풀어보기**

    1. [퀴즈] Select 쿼리문, Where 절 연습하기
    <aside> 👉 성이 남씨인 유저의 이메일만 추출하기
    • 정답 쿼리 살펴보기!<aside> 😎 이해가 안 되신다고요? 저랑 같이 해봐요!
    • </aside>
    • select email from users where name = "남**";
  • </aside>
    1. [퀴즈] Where 절과 자주 같이쓰는 문법 연습하기
    <aside> 👉 Gmail을 사용하는 2020/07/12~13에 가입한 유저를 추출하기
    • 정답 쿼리 살펴보기!<aside> 😎 이해가 안 되신다고요? 저랑 같이 해봐요!
    • </aside>
    • select * from users where created_at between "2020-07-12" and "2020-07-14" and email like "%gmail.com";
  • </aside>
    1. [퀴즈] 이외 유용한 문법 연습하기
    <aside> 👉 Gmail을 사용하는 2020/07/12~13에 가입한 유저의 수를 세기
    • 정답 쿼리 살펴보기!<aside> 😎 이해가 안 되신다고요? 저랑 같이 해봐요!
    • </aside>
    • select count(*) from users where created_at between "2020-07-12" and "2020-07-14" and email like "%gmail.com";
  • </aside>

07**. 끝 & 숙제 설명**

<aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?

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

</aside>

  • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
  • </aside>

HW. 1주차 숙제 답안 코드

  • [코드스니펫] - 1주차 숙제 답안 코드
  • select * from orders where email like '%naver.com' and course_title = '웹개발 종합반' and payment_method = 'kakaopay'

Copyright ⓒ TeamSparta All rights reserved.

</aside>

[수업 목표]

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

[목차]

<aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t

</aside>


01. 1주차 오늘 배울 것

    1. 환영합니다!
    <aside> 😎 환영합니다 여러분!</aside>맨 처음 SQL을 접했을 때, 너무 헷갈리고 어려웠던 개념들. SQL 쿼리를 작성하기 전에 익혀야 할 개념이 너무나도 많았습니다.</aside>
    • 아쉽게도, 이런 개념이 실무에서 그렇게 도움이 되지 않았습니다.
    <aside> 👉 SQL을 잘 하기 위해서는,</aside>SQL의 쉬운 개념부터 어려운 개념까지, SQL 쿼리를 저와 함께 작성해보며 '같이 삽질하며 익히는' 수업입니다.</aside>
    • 자, 이제 본격적으로 시작해볼까요?
  • 저는, 이러한 학습법이 SQL을 잘하게 되기까지의 지름길이라 확신합니다.
  • <aside> 👉 이 수업은
  • 복잡한 개념을 모두 이해하는 방식이 아니라, 일단 반복적으로 써보면서 감과 원리를 익혀가는 것이 중요하다고 느꼈습니다.
  • 예) 관계형 데이터베이스, ERD, 스키마, 엔티티 등..
  • <aside> 👉 개인적인 경험
  • 저는 '엑셀보다 쉬운 SQL' 튜터를 맡은 이범규입니다. 여러분들과 4주동안 SQL을 함께 연습할 생각을 하니 가슴이 두근두근하네요.
    1. 데이터베이스(DB)와 SQL이 왜 필요할까?
      1. 내가 배달음식점의 사장이라면?
      <aside> 👉 자, 배달음식점 사장이 되었다고 상상해봅시다! 아직까지는 규모가 크지 않아서, 혼자서 이렇게 엑셀 시트에 주문내역을 정리하고 있어요.
      1. 필요한 데이터만 불러와서 작업할 수 있어서 속도는 빨라졌고
      2. 충돌이 생겼을 경우 에러를 띄우는 기능을 추가해서 충돌로 생기는 문제도 사라졌어요.
      </aside>
      • 아주 작은 회사에서는 불필요하겠지만, 많은 양의 데이터를 효과적으로 저장/수정/사용하기 위해서는 데이터베이스가 필요합니다. 그래서 거의 모든 회사의 데이터는 데이터베이스에 저장되어 있어요.
      • 이 외에도, 데이터베이스가 사용자에게 주는 이점은 정말 많답니다! 오늘은 첫 날이니, 이 정도만 살펴보아요.
    • <aside> 😎 고민을 하다가, 데이터베이스에 모든 주문데이터를 저장하기 시작했어요.
    • </aside>
    • <aside> ❗ 그런데 문제가 생겼어요! 데이터가 많아지면서 엑셀 시트가 점점 느려지고, 여러사람이 작업하는 내용이 충돌하면서 취소된 주문에 배달이 나가는 등의 문제가 생겨나기 시작했어요.
    • </aside>
    • <aside> 😎 그런데 어느날, 장사가 엄청 잘 되기 시작했어요! 이제는 혼자서는 힘들어져서, 주문을 기록해주고 일을 도와줄 직원 여러명을 채용했어요.
    • </aside>
      1. 데이터베이스 기초 개념
      <aside> 👉 데이터베이스란? 여러 사람들이 같이 사용할 목적으로 데이터를 담는 통이라고 생각하면 되어요.<aside> 👉 원하는대로 데이터를 저장하고 사용하기 위해서는 다양한 기능이 있어야겠죠? 그래서 통상적으로, 모든 데이터베이스는 CRUD에 해당하는 기능을 지원해요.</aside></aside>
    • <aside> 😎 점점 어려워진다고요? 괜찮아요! 이 강의에서는, 저장된 데이터를 읽어오는 "R (Read)"에 대해서만 배울 것이랍니다.
    • C (Create): 데이터의 생성을 의미합니다 R (Read): 저장된 데이터를 읽어오는 것을 의미해요 U (Update): 저장된 데이터를 변경! D (Delete): 저장된 데이터를 삭제하는 것을 의미해요
    • </aside>
      1. SQL이 왜 필요할까?
      <aside> 👉 자, 그럼 SQL은 왜 필요할까요? 데이터를 읽어오는 과정인 "R (Read)"를 엄청나게 편하게 만들어줍니다. 그리고, 데이터를 손쉽고 깔끔하게 정리/분석하는 기능도 지원한답니다!</aside></aside><aside> 😎 짧은 SQL 쿼리 한 줄이면 저장된 데이터를 이렇게 간단히 가져올 수 있어요!이렇게, 데이터를 가져오는 명령어를 작성하는 것을 'SQL 쿼리를 작성한다' 라고 한답니다.
    • </aside>
    • <aside> 👉 SQL은 Structured Query Language의 약자인데요, 결국 데이터베이스에 요청 (Query)을 날려서 원하는 데이터를 가져오는 것을 도와주는 언어라는 의미에요!
    • 열심히 저장된 데이터, 잘 가져다 써야겠죠?
      1. 1~4주차에 배울 순서!
      • 1주차: Select, Where</aside>
      • <aside> 👉 데이터를 불러오고 (Select), 조건에 맞게 필터링 하는 것 (Where)!
      • 2주차: Group by, Order by</aside>
      • <aside> 👉 데이터를 범주에 따라 묶어서 통계치를 구하고 (Group by), 정렬하는 것 (Order by)!
      • 3주차: Join</aside>
      • <aside> 👉 여러 데이터를 합쳐서 분석하기 (Join), 더 쉽고 깔끔하게 원하는 데이터를 얻기 (Subquery)
      • 4주차: Subquery, 그 외</aside>
      • <aside> 👉 실전의 데이터는 생각보다 잘 정리되어 있지 않답니다! 데이터 분석을 위해서 데이터를 원하는 형태로 정리하는 방법을 배워요.

02. 필수 프로그램 설치

    1. DBeaver (다운로드 링크)
    <aside> 💡 DBeaver는 여러분이 SQL을 보다 손쉽게 사용할 수 있도록 도와주는 도구입니다! 🤩
    • (←눌러보기) DBeaver 다운로드 하기
      1. 다운로드 링크를 클릭하세요.
      2. Windows를 사용하고 계시면 (installer), Mac을 사용하고 계시면 (dmg) 라고 되어있는 링크를 클릭하여 DBeaver를 다운로드 받은 후 설치까지 마무리해주세요.
    • </aside>
    • <aside> 👉 '계속' 버튼을 눌러서 진행해주시면 됩니다!
    • (←눌러보기) 스파르타 데이터베이스 연결 방법 참고
      1. 설치한 DBeaver를 실행합니다
      2. 좌측 상단 플러그 모양의 아이콘을 클릭합니다
      3. 새 창이 뜨면, MySQL을 선택하고 '다음' 버튼을 누릅니다
      4. 아래와 같이 정보를 입력하고 좌측 하단 'Test Connection' 버튼을 클릭합니다.Username: sparta_student Password: sparta99
      5. </aside>
      6. <aside> 👉 Server Host: sparta.cbt9ceqjwlr9.ap-northeast-2.rds.amazonaws.com Database: sparta
      7. 만약 Driver가 설치되어있지 않으면 아래와 같은 창이 뜹니다. 다운로드 버튼을 눌러줍니다.
      8. Connection Test 결과에 'Connected'라고 뜨면, 확인 버튼을 누르고 완료 버튼을 눌러줍니다.
  • </aside>

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

<aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!

</aside>

    1. Select 쿼리문의 개념
    <aside> 👉 쿼리(Query)문이란? 쿼리는 질의를 의미하죠. 데이터베이스에 명령을 내리는 것을 의미합니다.</aside>
    • 4주동안 배울 것은 데이터를 잘 뽑아내는 것이죠? 따라서, 수업의 모든 쿼리문에는 Select가 들어갑니다.
    • Select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지 로 구성됩니다.
    <aside> 👉 잠깐! 테이블과 필드가 뭐냐고요? 아래 예시를 보고갈게요.
    • 테이블과 필드가 뭘까요?
      • 테이블: orders라는 엑셀 시트명 보이시죠? 테이블은 데이터가 담긴 엑셀 시트와 동일합니다. 이런 형태의 값이 데이터베이스에 담기면, orders라는 이름의 테이블이 되겠죠.
      • 필드: order_no, created_at, course_title, user_id, payment_method, email 각각이 필드입니다.
      <aside> 👉 예시) Select 쿼리문을 통해 'orders 테이블의 created_at, course_title, payment_method, email 필드를 가져와줘!'라고 명령을 내릴 수 있답니다.
    • </aside>
  • </aside>
  • 여기서 Select 쿼리문은, 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미입니다.
    1. Select 쿼리문 연습
    <aside> 👉 자, 미리 설치한 DBeaver를 켜볼까요?
    • 이런 화면이 나오면 성공!
    <aside> 👉 SQL 쿼리를 작성하는 입력창이 없다면, 좌측 상단 양피지 모양을 클릭해서 New Script를 해주세요!
    • [코드스니펫] - 스파르타 데이터베이스의 테이블 보기
      • 아래와 같은 화면이 나오면 성공!
    • </aside>
    • <aside> 👉 checkins, courses, enrolleds ... 라는 이름의 테이블들이 있다는 이야깁니다!
    • show tables;
    • [코드스니펫] - orders 테이블의 데이터 가져와보기
      • 요런 데이터가 나오면 성공!
    • select * from orders;
    • [코드스니펫] - orders 테이블의 특정 필드만 가져와보기
      • 마찬가지로, 이런 데이터가 나오면 성공!
    • select created_at, course_title, payment_method, email from orders;
    <aside> 😎 참 쉽죠? 축하합니다! 여러분은 이제 데이터베이스 테이블에서 데이터를 꺼낼 수 있게 되었어요.
  • </aside>
  • </aside>
  • </aside>
    1. 스파르타 데이터베이스의 구조
    <aside> 👉 스파르타 데이터베이스에는 아래와 같은 테이블이 있어요.
    • checkins: 여러분이 강의실 들어오시며 남기는 '오늘의 다짐'이 들어있어요
    • courses: 스파르타의 개설 강좌 정보가 들어있어요
    • enrolleds: 유저별 강좌 등록정보가 들어있어요
    • enrolleds_detail: 유저별 들을 수 있는 영상과, 들었는지 여부가 들어있어요
    • orders: 주문 (수강등록) 정보가 들어있어요
    • point_users: 유저별 포인트 점수가 들어있어요
    • users: 유저 정보가 들어있어요
    <aside> 😎 자, 저와 함께 살펴볼까요?
    • (소곤소곤) 직접 select * from 테이블명 이렇게 쿼리를 날려보셔도 돼요!
  • </aside>
  • </aside>

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

    1. Where 절의 개념
    <aside> 👉 Where 절은, Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것을 의미해요.예1) orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!예3) orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!
  • 예2) point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!
  • </aside>
    1. Select 쿼리문에 Where 절 함께 써보기
    <aside> 😎 쿼리는 열 번 듣는 것보다, 한 번 짜는게 빨리 늡니다! 앞의 예시를 같이 해볼까요?
    • 쿼리를 직접 써보면서 이해해볼까요? 일단 따라 써 봅니다!
      • 아주 직관적이죠? "orders 테이블에서 payment_method가 kakaopay인 것만 가져와줘!" 라는 의미랍니다.
      • 만약 "kakaopay"가 아니라 kakaopay라고 쓰면?
        • 당연히 에러가 납니다! 🥳
        • [Unknown column 'kakaopay' in 'where clause'] 에러문구를 천천히 읽어볼까요?
        <aside> 👉 Where 절에 있는 kakaopay라는 컬럼은 없다! 는 뜻이에요. 여기서 컬럼은 필드를 의미해요. 정말, kakaopay라는 글자를 컬럼(필드명)으로 인식해버렸죠?
      • </aside>
    • </aside>
    • <aside> 👉 Q) 잠깐! 왜 kakaopay가 아니라 "kakaopay"라고 쓰나요? A) kakaopay를 필드명이나 테이블명이 아닌 문자열로 인식시키려는거에요.
    • select * from orders where payment_method = "kakaopay";
    • 여러 조건을 걸어주기 위해서는? 이것도 우선 따라 써 봅시다!
      • 마찬가지로 엄청 직관적이죠? and 를 넣어서 원하는 조건을 계속 추가해주면 됩니다!
    • select * from orders where course_title = "앱개발 종합반" and payment_method = "kakaopay";
  • </aside>
    1. Select 쿼리문에 Where 절 함께 써보기 연습
    <aside> 👉 자, 이제 연습을 해볼까요? (1) 원하는 테이블과 (2) 조건, 이 두 가지만 기억하면 됩니다!
    • SQL을 잘 하기 위해서는, 원하는 정보가 어느 테이블에 담겨있는지 잘 찾는 것이 매우 중요하답니다!
    • [퀴즈] 포인트가 20000점보다 많은 유저만 뽑아보기!</aside>
      • 이렇게 출력돼야 해요!
      • 정답 쿼리 살펴보기!
      • select * from point_users where point > 20000;
    • <aside> 👉 [힌트!] (1) 원하는 테이블: point_users (2) 조건: point > 20000
    • [퀴즈] 성이 황씨인 유저만 뽑아보기</aside>
      • 요렇게 나와야 합니다~~!
      • 정답 쿼리 살펴보기
      • select * from users where name = "황**";
    • <aside> 👉 이 퀴즈는 힌트 없이 혼자 해보세요!
    • [퀴즈] 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기!</aside>
      • 요렇게 나와야 합니다~~!
      • 정답 쿼리 살펴보기
      • select * from orders where course_title = "웹개발 종합반" and payment_method = "CARD";
    • <aside> 👉 [힌트!] 여러 조건은 and로 함께 넣을 수 있다고 했었죠?
  • </aside>
    1. [꿀팁🍯] 이렇게 쿼리를 작성하면 편해요!
    <aside> 👉 1) show tables로 어떤 테이블이 있는지 살펴보기 2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기 3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기 4) 테이블을 찾았다! 조건을 걸 필드를 찾기 5) select * from 테이블명 where 조건 이렇게 쿼리 완성!<aside> 😎 참 쉽죠? 여러분은 이제 조건에 맞는 데이터를 가져올 수 있는 사람이 되었답니다! 👏
  • </aside>
  • </aside>
    1. Where 절과 자주 같이쓰는 문법 배우기
    • '같지 않음' 조건 걸어보기</aside>
      • '같지 않음' 조건은 != 로 걸 수 있습니다.
      <aside> 👉 '웹개발 종합반'을 제외하고 주문데이터를 보고 싶어졌어요. 어떻게 하면 좋을까요?
      • [코드스니펫] '같지 않음' 조건 걸어보기
        • "웹개발 종합반" 데이터 없이 잘 나오죠?
      • select * from orders where course_title != "웹개발 종합반";
      <aside> 👉 잠깐 상식! '!=' 에서 ! (느낌표)는 부정 (not)을 의미합니다. '='는 같음을 의미하니, '!='는 같지 않음이겠죠!
    • </aside>
    • </aside>
    • <aside> 😎 자, 쉬운 것부터 시작해 볼까요?
    • '범위' 조건 걸어보기</aside>
      • '범위' 조건은 between 으로 걸 수 있어요.
      • [코드스니펫] '범위' 조건 걸어보기
        • 7월 13일, 7월 14일 주문데이터만 잘 나오죠?
      • select * from orders where created_at between "2020-07-13" and "2020-07-15";
    • <aside> 👉 7월 13일, 7월 14일의 주문데이터만 보고 싶어졌어요. 어떻게 해야 할까요?
    • '포함' 조건 걸어보기</aside>
      • '포함' 조건은 in 으로 걸 수 있어요.
      • [코드스니펫] '포함' 조건 걸어보기
        • 1, 3 주차 사람들의 '오늘의 다짐'만 잘 나오죠?
      • select * from checkins where week in (1, 3);
    • <aside> 👉 1, 3주차 사람들의 '오늘의 다짐' 데이터만 보고 싶어졌어요.
    • '패턴' (문자열 규칙) 조건 걸어보기</aside>
      • '패턴' 조건은 like 으로 걸 수 있어요.
      • [코드스니펫] '패턴' (문자열 규칙) 조건 걸어보기
        • 오! 엄청 신기하죠? 많이 사용되는 유용한 기능이랍니다!
      • select * from users where email like '%daum.net';
      • [꿀팁🍯] Like의 다양한 사용법</aside>
        • where email like 'a%': email 필드값이 a로 시작하는 모든 데이터</