ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 엑셀보다 쉬운 sql 1주차
    엑셀보다 쉬운 SQL 2023. 3. 9. 20:49

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

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" al

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
      1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
      2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
      3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
      [목차]</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>
        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 쿼리로 가시죠!
          • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
        • 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에 가입한 유저를 추출하기
        • 정답 쿼리 살펴보기!
          • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
          • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
          <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
      • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
      • </aside>
      HW. 1주차 숙제 답안 코드
      • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
        1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
        2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
        3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
        [목차]</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>
          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 쿼리로 가시죠!
            • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
          • 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에 가입한 유저를 추출하기
          • 정답 쿼리 살펴보기!
            • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
            • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
            <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
        • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
        • </aside>
        HW. 1주차 숙제 답안 코드
        • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
          1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
          2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
          3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
          [목차]</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>
            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 쿼리로 가시죠!
              • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
            • 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에 가입한 유저를 추출하기
            • 정답 쿼리 살펴보기!
              • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
              • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
              <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
          • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
          • </aside>
          HW. 1주차 숙제 답안 코드
          • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
            1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
            2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
            3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
            [목차]</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>
              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 쿼리로 가시죠!
                • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
              • 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에 가입한 유저를 추출하기
              • 정답 쿼리 살펴보기!
                • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
            • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
            • </aside>
            HW. 1주차 숙제 답안 코드
            • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
              1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
              2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
              3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
              [목차]</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>
                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 쿼리로 가시죠!
                  • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                • 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에 가입한 유저를 추출하기
                • 정답 쿼리 살펴보기!
                  • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                  • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                  <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
              • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
              • </aside>
              HW. 1주차 숙제 답안 코드
              • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
                1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
                2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
                3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
                [목차]</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>
                  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 쿼리로 가시죠!
                    • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                  • 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에 가입한 유저를 추출하기
                  • 정답 쿼리 살펴보기!
                    • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                    • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                    <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
                • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
                • </aside>
                HW. 1주차 숙제 답안 코드
                • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
                  1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
                  2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
                  3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
                  [목차]</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>
                    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 쿼리로 가시죠!
                      • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                    • 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에 가입한 유저를 추출하기
                    • 정답 쿼리 살펴보기!
                      • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                      • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                      <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
                  • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
                  • </aside>
                  HW. 1주차 숙제 답안 코드
                  • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
                    1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
                    2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
                    3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
                    [목차]</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>
                      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 쿼리로 가시죠!
                        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                      • 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에 가입한 유저를 추출하기
                      • 정답 쿼리 살펴보기!
                        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                        <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
                    • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
                    • </aside>
                    HW. 1주차 숙제 답안 코드
                    • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
                      1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
                      2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
                      3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
                      [목차]</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>
                        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 쿼리로 가시죠!
                          • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                        • 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에 가입한 유저를 추출하기
                        • 정답 쿼리 살펴보기!
                          • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                          • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                          <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
                      • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
                      • </aside>
                      HW. 1주차 숙제 답안 코드
                      • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
                        1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
                        2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
                        3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
                        [목차]</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>
                          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 쿼리로 가시죠!
                            • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                          • 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에 가입한 유저를 추출하기
                          • 정답 쿼리 살펴보기!
                            • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                            • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                            <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
                        • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
                        • </aside>
                        HW. 1주차 숙제 답안 코드
                        • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
                          1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
                          2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
                          3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
                          [목차]</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>
                            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 쿼리로 가시죠!
                              • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                            • 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에 가입한 유저를 추출하기
                            • 정답 쿼리 살펴보기!
                              • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                              • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                              <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
                          • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
                          • </aside>
                          HW. 1주차 숙제 답안 코드
                          • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
                            1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
                            2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
                            3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
                            [목차]</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>
                              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 쿼리로 가시죠!
                                • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
                              • 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에 가입한 유저를 추출하기
                              • 정답 쿼리 살펴보기!
                                • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
                                • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
                                <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
                            • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
                            • </aside>
                            HW. 1주차 숙제 답안 코드
                            • [코드스니펫] - 1주차 숙제 답안 코드
                          • </aside>
                          • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
                          • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
                          • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
                          • </aside>
                        • </aside>
                        • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
                        • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
                        • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
                        • </aside>
                      • </aside>
                      • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
                      • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
                      • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
                      • </aside>
                    • </aside>
                    • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
                    • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
                    • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
                    • </aside>
                  • </aside>
                  • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
                  • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
                  • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
                  • </aside>
                • </aside>
                • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
                • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
                • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
                • </aside>
              • </aside>
              • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
              • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
              • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
              • </aside>
            • </aside>
            • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
            • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
            • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
            • </aside>
          • </aside>
          • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
          • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
          • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
          • </aside>
        • </aside>
        • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
        • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
        • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
        • </aside>
      • </aside>
      • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
      • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
      • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
      • </aside>
    • </aside>
    • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
    • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
    • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
    • </aside>

    t="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
      1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
      2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
      3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
      [목차]</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>
        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 쿼리로 가시죠!
          • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
        • 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에 가입한 유저를 추출하기
        • 정답 쿼리 살펴보기!
          • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
          • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
          <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
      • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
      • </aside>
      HW. 1주차 숙제 답안 코드
      • [코드스니펫] - 1주차 숙제 답안 코드<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요! [수업 목표]
        1. 데이터베이스(DB)와 SQL이 왜 필요한지 이해한다.
        2. DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해한다.
        3. 조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익힌다.
        [목차]</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>
          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 쿼리로 가시죠!
            • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
          • 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에 가입한 유저를 추출하기
          • 정답 쿼리 살펴보기!
            • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
            • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
            <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**. 끝 & 숙제 설명**숙제: naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
        • 결과<aside> 😎 이런 결과가 나오면 정답! 👏
        • </aside>
        HW. 1주차 숙제 답안 코드
        • [코드스니펫] - 1주차 숙제 답안 코드
      • </aside>
      • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
      • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
      • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
      • </aside>
    • </aside>
    • <aside> 📃 자, 1주차 고생 많았습니다! 고생의 끝은 숙제죠?
    • <aside> 👉 시작하기 전에, sparta_week1.sql 이라는 파일을 먼저 만들어봅시다!
    • <aside> 💡 모든 토글을 열고 닫는 단축키 Windows : Ctrl + alt + t Mac : ⌘ + ⌥ + t
    • </aside>

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </aside>

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

    [수업 목표]

    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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

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

    <aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e9b61fa-7a3a-4ebc-b502-407eaf7619ee/css__280x280.png" width="40px" /> 매 주차 강의자료 시작에 PDF파일을 올려두었어요!

    </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로 시작하는 모든 데이터
          • 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 쿼리로 가시죠!
        • 요렇게, 네 개의 결제수단이 있다는 사실을 한 줄로 알아낼 수 있답니다!
      • 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에 가입한 유저를 추출하기
      • 정답 쿼리 살펴보기!
        • 7월 12일 부터 13일까지 데이터를 추출하는데 왜 14일까지 입력해야할까요?그렇기 때문에 between "2020-07-12" and "2020-07-13"으로 입력할 경우 between "2020-07-12 00:00:00" and "2020-07-13 00:00:00”으로 컴퓨터가 받아들이기 때문에 원하는 대로 출력되지 않는 것입니다!
        • 그 답은 날짜가 인식되는 형식에 있습니다! 코드에 “2020-07-12”로 입력하더라도 “2020-07-12 23:59:59”로 인식하는 것이 아니라 “2020-07-12 00:00:00”으로 인식하기 때문입니다.
        <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주차 숙제 답안 코드

    '엑셀보다 쉬운 SQL' 카테고리의 다른 글

    엑셀보다 쉬운 sql 4주차  (0) 2023.03.12
    엑셀보다 쉬운 sql 3주차  (0) 2023.03.11
    엑셀보다 쉬운 sql 2주차  (0) 2023.03.10
Designed by Tistory.