<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>movely_s2.log</title>
        <link>https://velog.io/</link>
        <description>Product Manager</description>
        <lastBuildDate>Fri, 28 Jan 2022 09:24:21 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>movely_s2.log</title>
            <url>https://images.velog.io/images/movely_s2/profile/e899897e-b5b0-433a-8f4a-2b52aa036b2b/social.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. movely_s2.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/movely_s2" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[ 예제로 알아보는 SQL 문법 
- join, where 필드명 in (subquery)]]></title>
            <link>https://velog.io/@movely_s2/sqlex001</link>
            <guid>https://velog.io/@movely_s2/sqlex001</guid>
            <pubDate>Fri, 28 Jan 2022 09:24:21 GMT</pubDate>
            <description><![CDATA[<h1 id="문제상황">[문제상황]</h1>
<p>테이블에 원하는 데이터가 없어서 여러 테이블을 참조해야 하는 경우가 발생했어요.</p>
<blockquote>
<p>👉 <strong>오늘의 팁</strong></p>
</blockquote>
<ul>
<li><strong>Inner Join</strong>을 사용하여 테이블을 연결하고, 원하는 데이터를 뽑아보세요.</li>
<li><strong>조건</strong>으로 다른 테이블을 참조하는 경우라면 <strong>where절에서 Subquery</strong>를 사용해보세요.</li>
<li><em>where 필드명 in (subquery)*</em> 이런 방식으로요!</li>
</ul>
<h1 id="01-inner-join">01. Inner Join</h1>
<h3 id="예제-1-네이버-이메일을-사용하는-유저-중-성씨별-주문-건수를-세어보자">예제 1) 네이버 이메일을 사용하는 유저 중, 성씨별 주문 건수를 세어보자.</h3>
<ul>
<li>힌트 : orders 테이블에는 이메일과 이름이 없어 users 테이블을 <strong>inner join</strong>하고, 네이버메일 유저를 찾아 성씨별로 주문 수를 카운트하면 돼요. OO별은 <strong>group by</strong>인거 아시죠? </li>
</ul>
<pre><code class="language-sql"> select u.name, count(u.name) as order_cnt from orders o 
 inner join users u on o.user_id = u.user_id 
 where u.email like &#39;%naver.com&#39;
 group by u.name </code></pre>
<p><img src="https://images.velog.io/images/movely_s2/post/5b16224b-c495-49c4-b3d6-5869f7828618/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-28%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.56.22.png" alt=""></p>
<blockquote>
<p>👉 위 쿼리가 실행되는 순서: from → join → where → group by → select</p>
</blockquote>
<ol>
<li>from orders o: orders 테이블 데이터 전체를 가져오고 o라는 별칭을 붙입니다.</li>
<li>inner join users u on o.user_id = u.user_id : users 테이블을 orders 테이블에 붙이는데, orders 테이블의 user_id와 동일한 user_id를 갖는 users 테이블 데이터를 붙입니다. (*users 테이블에 u라는 별칭을 붙입니다)</li>
<li>where u.email like &#39;%naver.com&#39;: users 테이블 email 필드값이 naver.com으로 끝나는 값만 가져옵니다.</li>
<li>group by u.name: users 테이블의 name값이 같은 값들을 뭉쳐줍니다.</li>
<li>select u.name, count(u.name) as count_name : users 테이블의 name필드와 name 필드를 기준으로 뭉쳐진 갯수를 세어서 출력해줍니다.</li>
</ol>
<ul>
<li>Join의 실행 순서는 항상 from 과 붙어다닌다고 생각하면 편해요!</li>
</ul>
<h1 id="02-where-필드명-in-subquery">02. where 필드명 in (subquery)</h1>
<h3 id="예제-2-카카오페이로-결제한-주문건-유저들만-유저-테이블에서-출력해-보자">예제 2) 카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해 보자.</h3>
<ul>
<li>힌트 : order 테이블에서 카카오페이로 결제한 유저아이디를 찾아, 유저테이블에서 확인하면 돼요. order 테이블 정보를 출력할 필요는 없어요!</li>
<li>Where은 조건문이죠? Subquery의 결과를 조건에 활용하는 방식으로 유용하게 사용해 보세요.</li>
<li><em>where 필드명 in (subquery)*</em> 이런 방식으로요!</li>
</ul>
<pre><code class="language-sql">select * from users
 where user_id in (
        select user_id from orders
        where payment_method = &#39;kakaopay&#39;
  )</code></pre>
<p><strong>쿼리가 실행되는 순서를 이렇게 상상하면 편해요!</strong>
(1) from 실행: users 데이터를 가져와줌
(2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌
(3) where .. in 절에서 subquery의 결과에 해당되는 &#39;user_id의 명단&#39; 조건으로 필터링 해줌
(4) 조건에 맞는 결과 출력</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타코딩클럽] SQL - 4주차]]></title>
            <link>https://velog.io/@movely_s2/spartasqlweek4</link>
            <guid>https://velog.io/@movely_s2/spartasqlweek4</guid>
            <pubDate>Thu, 27 Jan 2022 13:40:51 GMT</pubDate>
            <description><![CDATA[<h1 id="목표"><strong>[목표]</strong></h1>
<ol>
<li>Subquery(서브쿼리)의 사용 방법을 배우기</li>
<li>실전에서 유용한 SQL 문법을 더 배우기</li>
<li>SQL을 사용하여 실전과 같은 데이터분석을 진행해보기</li>
</ol>
<h1 id="01-원하는-데이터를-더-쉽게-subquery">01. 원하는 데이터를 더 쉽게: Subquery</h1>
<h3 id="1-subquery-사용방법-익혀보기">1) Subquery 사용방법 익혀보기</h3>
<blockquote>
<p>👉 Subquery란, 하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는 것을 의미합니다.</p>
</blockquote>
<ul>
<li>괄호 ( ) 안에 쿼리를 넣어주세요!</li>
</ul>
<p>▶︎ kakaopay로 결제한 유저들의 정보 보기</p>
<p><strong>방법 1. users 와 orders 의 inner join으로!</strong></p>
<pre><code class="language-sql">select u.user_id, u.name, u.email from users u
inner join orders o on u.user_id = o.user_id
where o.payment_method = &#39;kakaopay&#39;</code></pre>
<p><strong>방법 2. Subquery로!</strong></p>
<ol>
<li>우선 kakaopay로 결제한 user_id를 모두 구해보기 → K 라고 합시다.</li>
</ol>
<pre><code class="language-sql">select user_id from orders
where payment_method = &#39;kakaopay&#39;</code></pre>
<ol start="2">
<li>그 후에, user_id가 <code>K</code> 에 있는 유저들만 골라보기</li>
</ol>
<pre><code class="language-sql">select u.user_id, u.name, u.email from users u
where u.user_id in (
    select user_id from orders
    where payment_method = &#39;kakaopay&#39;
)</code></pre>
<h1 id="02-자주-쓰이는-subquery-유형">02. 자주 쓰이는 Subquery 유형</h1>
<h2 id="-subquery는-where-select-from-절에서-유용하게-사용될-수-있어요">: Subquery는 where, select, from 절에서 유용하게 사용될 수 있어요!</h2>
<h3 id="1-where-에-들어가는-subquery">1) Where 에 들어가는 Subquery</h3>
<blockquote>
<p>👉 <strong>Where은 조건문</strong>이죠? 
<strong>Subquery의 결과를 조건에 활용하는 방식</strong>으로 유용하게 사용합니다. </p>
</blockquote>
<ul>
<li><strong>where 필드명 in (subquery)</strong> 이런 방식으로요!</li>
</ul>
<p>▶︎ 카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해주고 싶을 때는 아래와 같이 표현할 수 있겠죠.</p>
<pre><code class="language-sql">select * from users u
where u.user_id in (
    select o.user_id from orders o 
     where o.payment_method = &#39;kakaopay&#39;);</code></pre>
<p><strong>- 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!</strong>
(1) from 실행: users 데이터를 가져와줌
(2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌
(3) where .. in 절에서 subquery의 결과에 해당되는 &#39;user_id의 명단&#39; 조건으로 필터링 해줌
(4) 조건에 맞는 결과 출력</p>
<h3 id="2-select-에-들어가는-subquery">2) Select 에 들어가는 Subquery</h3>
<blockquote>
<p>👉 <strong>Select는 결과를 출력</strong>해주는 부분이죠? 
<strong>기존 테이블에 함께 보고싶은 통계 데이터를 손쉽게 붙이는 것에 사용</strong>합니다. </p>
</blockquote>
<ul>
<li><strong>select 필드명, 필드명, (subquery) from ..</strong> 이렇게요!</li>
</ul>
<p>▶︎ &#39;오늘의 다짐&#39; 데이터를 보고 싶은데 &#39;오늘의 다짐&#39; 좋아요의 수가, 본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지가 궁금할 수 있겠죠?</p>
<ol>
<li>그럼, 평균을 먼저 구해봅시다! 
(user_id=&#39;4b8a10e6&#39; 를 예시로!)</li>
</ol>
<pre><code class="language-sql">select avg(likes) from checkins c2
where c2.user_id = &#39;4b8a10e6&#39;</code></pre>
<ol start="2">
<li>그러면, 이렇게 표현할 수 있어요!</li>
</ol>
<pre><code class="language-sql">select c.checkin_id, c.user_id, c.likes, 
    (select avg(likes) from checkins c2
    where c2.user_id = c.user_id) as avg_like_user
from checkins c;</code></pre>
<p><strong>- 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!</strong>
(1) 밖의 select * from 문에서 데이터를 한줄한줄 출력하는 과정에서
(2) select 안의 subquery가 매 데이터 한줄마다 실행되는데
(3) 그 데이터 한 줄의 user_id를 갖는 데이터의 평균 좋아요 값을 subquery에서 계산해서
(4) 함께 출력해준다!</p>
<h3 id="3-from-에-들어가는-subquery-가장-많이-사용되는-유형">3) From 에 들어가는 Subquery (가장 많이 사용되는 유형!)</h3>
<blockquote>
<p>👉 <strong>From</strong>은 언제 사용하면 좋을까요? 
<strong>내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때 사용</strong>하면 딱이겠죠!</p>
</blockquote>
<ul>
<li><p>select * from (subquery) 별칭 </p>
</li>
<li><p>select * from 테이블t
inner join (subquery) 별칭a on t.key=a.key</p>
</li>
<li><p><strong>A</strong> : 우선 유저 별 좋아요 평균을 먼저 구해볼까요?
→ checkins 테이블을 user_id로 group by 하면 되겠죠?</p>
</li>
</ul>
<pre><code class="language-sql">select user_id, round(avg(likes),1) as avg_like from checkins
group by user_id</code></pre>
<ul>
<li>이제 <strong>A</strong>에서 해당 유저 별 포인트를 보고 싶다면?
→ 그러면, 포인트와 like의 상관정도를 알 수 있겠죠?</li>
</ul>
<pre><code class="language-sql">select pu.user_id, a.avg_like, pu.point from point_users pu
inner join (
    select user_id, round(avg(likes),1) as avg_like from checkins
    group by user_id
) a on pu.user_id = a.user_id</code></pre>
<p><strong>- 쿼리가 실행되는 순서를 이렇게 상상하면 편해요!</strong>
(1) 먼저 서브쿼리의 select가 실행되고,
(2) 이것을 테이블처럼 여기고 밖의 select가 실행!</p>
<h1 id="03-subquery-연습">03. Subquery 연습</h1>
<h3 id="1-where-절에-들어가는-subquery">1) Where 절에 들어가는 Subquery</h3>
<blockquote>
<p>👉 <strong>[오늘의 팁!]</strong> </p>
</blockquote>
<ul>
<li>같은 테이블을 Subquery로 사용할 수도 있어요.</li>
<li>필요한 경우, Subquery 안에서 여러 테이블을 Join 할수도 있어요.</li>
</ul>
<p>▶︎ 포인트가 평균보다 많은 사람들의 데이터를 추출해보자! (평균 포인트는 5380점)</p>
<ul>
<li>힌트! → <code>point_users</code> 테이블을 이용해서 avg를 구하고, 다시 <code>point_users</code>와 조인하세요!</li>
</ul>
<pre><code class="language-sql">select * from point_users pu
where pu.point &gt; (select avg(pu2.point) from point_users pu2)</code></pre>
<p>▶︎ 이씨 성을 가진 유저들의 평균 포인트보다 더 많은 포인트를 가지고 있는 데이터를 추출해보자! (이씨 성 평균 포인트는 7454점)</p>
<ul>
<li>힌트! → 위 구문의 서브쿼리 내에서 users와 inner join을 해보세요!</li>
</ul>
<pre><code class="language-sql">select * from point_users pu 
 where pu.point &gt; 
     (select avg(pu2.point) from point_users pu2
      inner join users u on pu2.user_id = u.user_id
      where u.name = &#39;이**&#39;)
</code></pre>
<h3 id="2-select-절에-들어가는-subquery">2) Select 절에 들어가는 Subquery</h3>
<p>▶︎ checkins 테이블에 course_id별 평균 likes수 필드 우측에 붙여보기</p>
<pre><code class="language-sql">select c1.checkin_id, c1.course_id, c1.user_id, c1.likes,
        (select round(avg(c2.likes),1) from checkins c2 
        where c1.course_id = c2.course_id) as avg_like 
  from checkins c1
</code></pre>
<p>▶︎ checkins 테이블에 과목명별 평균 likes수 필드 우측에 붙여보기</p>
<ul>
<li>직전에 실습했던 것에, courses 테이블을 join 하면 되겠죠?</li>
</ul>
<pre><code class="language-sql">select c1.checkin_id, c3.title, c1.user_id, c1.likes,
        (select round(avg(c2.likes),1) from checkins c2 
        where c1.course_id = c2.course_id) as avg_like 
  from checkins c1
 inner join courses c3 on c1.course_id = c3.course_id </code></pre>
<h3 id="3-from-절에-들어가는-subquery">3) From 절에 들어가는 Subquery</h3>
<p>▶︎ course_id별 like 개수에 전체 인원을 붙이기</p>
<p><strong>[준비 1] course_id별 유저의 체크인 개수를 구해보기!</strong></p>
<pre><code class="language-sql">select course_id, count(distinct(user_id)) as checkin_cnt from checkins
group by course_id </code></pre>
<p><strong>[준비 2] course_id별 인원을 구해보기!</strong></p>
<pre><code class="language-sql">select course_id, count(*) as total_cnt from orders
group by course_id</code></pre>
<p><strong>[최종] 준비1과 준비2를 inner join 하면 됩니다!</strong></p>
<pre><code class="language-sql">select a.course_id, a.checkin_cnt, b.total_cnt 
  from (
    select course_id, count(distinct(user_id)) as checkin_cnt from checkins
    group by course_id 
) a 
inner join (
    select course_id, count(*) as total_cnt from orders
    group by course_id 
) b on a.course_id = b.course_id 
</code></pre>
<p><strong>[한걸음 더] 전체 중 얼마나 like를 하는지 알아보면 좋겠죠? 퍼센트 나타내고, 강의 제목도 표기해 주세요.</strong></p>
<pre><code class="language-sql">select c.title, a.checkin_cnt, b.total_cnt,
       (a.checkin_cnt/b.total_cnt) as ratio
  from (
    select course_id, count(distinct(user_id)) as checkin_cnt from checkins
    group by course_id 
) a 
inner join (
    select course_id, count(*) as total_cnt from orders
    group by course_id 
) b on a.course_id = b.course_id 
inner join courses c on a.course_id = c.course_id </code></pre>
<h1 id="04-with절-연습">04. with절 연습</h1>
<h3 id="1-with-절로-더-깔끔하게-쿼리문을-정리하기">1) with 절로 더 깔끔하게 쿼리문을 정리하기</h3>
<p><strong>다시 위의 코드를 볼까요?</strong></p>
<pre><code class="language-sql">select c.title, 
       a.checkin_cnt, 
       b.total_cnt,
       (a.checkin_cnt/b.total_cnt) as ratio
  from (
    select course_id, count(distinct(user_id)) as checkin_cnt from checkins
    group by course_id 
) a 
inner join (
    select course_id, count(*) as total_cnt from orders
    group by course_id 
) b on a.course_id = b.course_id 
inner join courses c on a.course_id = c.course_id </code></pre>
<blockquote>
<p>이렇게 계속 서브쿼리가 붙으면, inner join 안쪽이 너무 헷갈리겠죠!
→ 그 때 쓰는 것이 with 절! 결과는 같은데 훨씬 보기가 좋죠?</p>
</blockquote>
<ul>
<li>with절은 쿼리 젤 위에 작성하고, 실행할 때는 블록으로 감싸야 오류가 안나요!</li>
</ul>
<pre><code class="language-sql">with table1 as (
    select course_id, count(distinct(user_id)) as checkin_cnt from checkins
    group by course_id 
), table2 as (
    select course_id, count(*) as total_cnt from orders
    group by course_id
)

select c.title, 
       a.checkin_cnt, 
       b.total_cnt,
       (a.checkin_cnt/b.total_cnt) as ratio
  from table1 a 
inner join table2 b on a.course_id = b.course_id 
inner join courses c on a.course_id = c.course_id </code></pre>
<h1 id="05-실전에서-유용한-sql-문법-문자열">05. 실전에서 유용한 SQL 문법 (문자열)</h1>
<h3 id="1-문자열-쪼개보기--substring_index">1) 문자열 쪼개보기 : SUBSTRING_INDEX</h3>
<p>👉 이메일 주소에서 @앞의 아이디만 가져오거나, @뒤의 이메일 도메인을 가져오고 싶어요!</p>
<blockquote>
<p>*<em>SUBSTRING_INDEX *</em>라는 문법을 사용하면 됩니다.</p>
</blockquote>
<ul>
<li><strong>SUBSTRING_INDEX(email, &#39;@&#39;, 1)</strong>
@를 기준으로 텍스트를 쪼개고, 그 중 첫 번째 조각을 가져오라는 뜻!</li>
<li><strong>SUBSTRING_INDEX(email, &#39;@&#39;, -1)</strong>
@를 기준으로 텍스트를 쪼개고, 그 중 마지막 조각을 가져오라는 뜻!</li>
</ul>
<p>▶︎ 이메일에서 아이디만 가져와보기</p>
<pre><code class="language-sql">select user_id, email, SUBSTRING_INDEX(email, &#39;@&#39;, 1) from users</code></pre>
<p>▶︎ 이메일에서 이메일 도메인만 가져와보기</p>
<pre><code class="language-sql">select user_id, email, SUBSTRING_INDEX(email, &#39;@&#39;, -1) from users</code></pre>
<h3 id="2-문자열-일부만-출력하기--substring">2) 문자열 일부만 출력하기 : SUBSTRING</h3>
<p>👉 orders 테이블에서 created_at을 날짜까지만 출력하게 해봅시다!</p>
<blockquote>
<p><strong>SUBSTRING</strong> 이라는 문법을 사용하면 됩니다.
<strong>- substring(created_at,1,10)</strong> SUBSTRING(문자열, 출력을 하고싶은 <strong>첫 글자의 위치</strong>, <strong>몇개의 글자</strong>를 출력하고 싶은지)</p>
</blockquote>
<p>▶︎ orders 테이블에서 날짜까지 출력하게 해보기</p>
<pre><code class="language-sql">select order_no, created_at, substring(created_at,1,10) as date from orders</code></pre>
<p>▶︎ 일별로 몇 개씩 주문이 일어났는지 살펴보기</p>
<pre><code class="language-sql">select substring(created_at,1,10) as date, count(*) as cnt_date from orders
group by date</code></pre>
<h1 id="06-실전에서-유용한-sql-문법-case">06. 실전에서 유용한 SQL 문법 (Case)</h1>
<h3 id="1-case--경우에-따라-원하는-값을-새-필드에-출력해보기">1) CASE : 경우에 따라 원하는 값을 새 필드에 출력해보기</h3>
<p>👉 특정 조건에 따라, 데이터를 구분해서 정리해주고 싶을 때가 있겠죠? 
이런 경우에 <strong>CASE 라는 문법</strong>이 사용됩니다.</p>
<p>[예시]
10000점보다 높은 포인트를 가지고 있으면 &#39;잘 하고 있어요!&#39;, 평균보다 낮으면 &#39;조금 더 달려주세요!&#39; 라고 표시해 주려면 어떻게 해야할까요?</p>
<p>▶︎ 포인트 보유액에 따라 다르게 표시해주기</p>
<pre><code class="language-sql">select pu.point_user_id, pu.point,
case 
when pu.point &gt; 10000 then &#39;잘 하고 있어요!&#39;
else &#39;조금 더 달려주세요!&#39;
END as &#39;구분&#39;
from point_users pu;</code></pre>
<h3 id="2-case-실전을-위한-트릭">2) CASE: 실전을 위한 트릭!</h3>
<p>👉 Subquery를 이용하면 이런 통계도 낼 수 있어요!</p>
<p><strong>1. 우선 몇 가지로 구분을 나누고,</strong></p>
<p><img src="https://images.velog.io/images/movely_s2/post/40883428-531a-4d4e-acb9-952bd0eb499a/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-29%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.33.06.png" alt=""></p>
<pre><code class="language-sql">select pu.point_user_id, pu.point,
case 
when pu.point &gt; 10000 then &#39;1만 이상&#39;
when pu.point &gt; 5000 then &#39;5천 이상&#39;
else &#39;5천 미만&#39;
END as lv
from point_users pu</code></pre>
<p><strong>2. 서브쿼리를 이용해서 group by로 통계를 낼 수 있습니다.</strong></p>
<p><img src="https://images.velog.io/images/movely_s2/post/f0617210-619b-48de-bb67-107368487cfd/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-29%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.33.30.png" alt=""></p>
<pre><code class="language-sql">select level, count(*) as cnt from (
    select pu.point_user_id, pu.point,
    case 
    when pu.point &gt; 10000 then &#39;1만 이상&#39;
    when pu.point &gt; 5000 then &#39;5천 이상&#39;
    else &#39;5천 미만&#39;
    END as lv
    from point_users pu
) a
group by lv</code></pre>
<p><strong>3. with 절과 함께하면 금상첨화죠!</strong></p>
<pre><code class="language-sql">with table1 as (
    select pu.point_user_id, pu.point,
    case 
    when pu.point &gt; 10000 then &#39;1만 이상&#39;
    when pu.point &gt; 5000 then &#39;5천 이상&#39;
    else &#39;5천 미만&#39;
    END as lv
    from point_users pu
)

select level, count(*) as cnt from table1
group by lv</code></pre>
<h1 id="07-sql-문법-복습-또-복습-초급">07. SQL 문법 복습. 또 복습! (초급)</h1>
<h3 id="퀴즈-1-평균-이상-포인트를-가지고-있으면-잘-하고-있어요--낮으면-열심히-합시다-표시하기">퀴즈 1) 평균 이상 포인트를 가지고 있으면 &#39;잘 하고 있어요&#39; / 낮으면 &#39;열심히 합시다!&#39; 표시하기!</h3>
<p>👉 <strong>[힌트!]</strong> CASE 문법 사용, CASE 안에서 Subquery로 평균을 계산하여 비교!</p>
<p><img src="https://images.velog.io/images/movely_s2/post/9d2f2112-1e26-48e4-a992-dc941c3c2a9f/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-29%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.34.05.png" alt=""></p>
<pre><code class="language-sql">select pu.point_user_id, pu.point,
case 
when pu.point &gt; (select avg(pu2.point) from point_users pu2) then &#39;잘 하고 있어요!&#39;
else &#39;열심히 합시다!&#39;
end as &#39;msg&#39;
from point_users pu</code></pre>
<h3 id="퀴즈-2-이메일-도메인별-유저의-수-세어보기">퀴즈 2) 이메일 도메인별 유저의 수 세어보기</h3>
<p>👉 <strong>[힌트!]</strong> SUBSTRING_INDEX와 Group by를 잘 사용하면 끝!</p>
<pre><code class="language-sql">select domain, count(*) as cnt from (
    select SUBSTRING_INDEX(email,&#39;@&#39;,-1) as domain from users
) a
group by domain</code></pre>
<h3 id="퀴즈-3-화이팅이-포함된-오늘의-다짐만-출력해보기">퀴즈 3) &#39;화이팅&#39;이 포함된 오늘의 다짐만 출력해보기</h3>
<p>👉 이번 건 쉽죠? 잊어버리셨을까봐! <code>like</code>를 어떻게 썼더라~</p>
<pre><code class="language-sql">select * from checkins c
where c.comment like &#39;%화이팅%&#39;</code></pre>
<h1 id="08-sql-문법-복습-또-복습-중급">08. SQL 문법 복습. 또 복습! (중급)</h1>
<h3 id="퀴즈-1-수강등록정보enrolled_id별-전체-강의-수와-들은-강의의-수-출력해보기">퀴즈 1) 수강등록정보(enrolled_id)별 전체 강의 수와 들은 강의의 수 출력해보기</h3>
<p>👉 [힌트!] subquery 두 개를 만들어놓고, inner join!</p>
<p>살펴볼 테이블: <code>enrolled_details</code></p>
<p>done_cnt는 들은 강의의 수(done=1),
total_cnt는 전체 강의의 수</p>
<p><img src="https://images.velog.io/images/movely_s2/post/dcf96aac-4728-4f5d-a09e-5f508da2829e/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-29%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.36.40.png" alt=""></p>
<pre><code class="language-sql">with lecture_done as (
    select enrolled_id, count(*) as cnt_done from enrolleds_detail ed 
    where done = 1
    group by enrolled_id
), lecture_total as (
    select enrolled_id, count(*) as cnt_total from enrolleds_detail ed 
    group by enrolled_id
)

select a.enrolled_id, a.cnt_done, b.cnt_total from lecture_done a
inner join lecture_total b on a.enrolled_id = b.enrolled_id</code></pre>
<h3 id="퀴즈-2-수강등록정보enrolled_id별-전체-강의-수와-들은-강의의-수-그리고-진도율-출력해보기">퀴즈 2) 수강등록정보(enrolled_id)별 전체 강의 수와 들은 강의의 수, 그리고 진도율 출력해보기</h3>
<p>👉 [힌트!] 진도율 = (들은 강의의 수 / 전체 강의 수)</p>
<p><img src="https://images.velog.io/images/movely_s2/post/c6c99ca7-1132-4b38-8255-f6ca191d40ae/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-29%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.35.01.png" alt=""></p>
<pre><code class="language-sql">with table1 as (
    select enrolled_id, count(*) as done_cnt from enrolleds_detail
    where done = 1
    group by enrolled_id
), table2 as (
    select enrolled_id, count(*) as total_cnt from enrolleds_detail
    group by enrolled_id
)

select a.enrolled_id,
       a.done_cnt,
       b.total_cnt,
       round(a.done_cnt/b.total_cnt,2) as ratio
  from table1 a
 inner join table2 b on a.enrolled_id = b.enrolled_id</code></pre>
<p>**[잠깐!] **더 간단하게 만들 수 있지 않을까!
아래와 같이 써도 같은 결과겠죠? 이렇게, 가끔 멀리서 보면 더 나은 쿼리를 만들 수 있어요!</p>
<pre><code class="language-sql">select enrolled_id,
       sum(done) as cnt_done,
       count(*) as cnt_total
from enrolleds_detail ed
group by enrolled_id</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타코딩클럽] SQL - 3주차]]></title>
            <link>https://velog.io/@movely_s2/spartasqlweek3</link>
            <guid>https://velog.io/@movely_s2/spartasqlweek3</guid>
            <pubDate>Wed, 26 Jan 2022 16:18:24 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">[목표]</h1>
<ol>
<li>여러 테이블의 정보를 연결하는 Join을 이해</li>
<li>연결된 정보를 바탕으로 보다 풍부한 데이터분석을 연습</li>
<li>아래 위로 결과를 연결하는 Union을 공부</li>
</ol>
<h1 id="01-join">01. Join</h1>
<h2 id="-여러-테이블을-연결해-한-눈에-보고-싶다면">: 여러 테이블을 연결해 한 눈에 보고 싶다면?</h2>
<h3 id="1-join-이란">1) Join 이란?</h3>
<blockquote>
<p>👉 Join이란?
두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미해요.</p>
</blockquote>
<p>▶︎ user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어요!</p>
<p>위의 예시와 같이, 두 테이블의 정보를 연결해서 함께 보고싶을 때가 있겠죠?</p>
<p>그럴 때를 대비해서 무언가 연결된 정보가 있을 때, user_id 처럼 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아놓는답니다. 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 &#39;key&#39;라고 불러요.</p>
<pre><code class="language-sql">select * from point_users
left join users
on point_users.user_id = users.user_id</code></pre>
<blockquote>
<p>👉 <strong>[오늘의 꿀팁!]</strong> 혹시 엑셀을 잘 쓰신다면? 
SQL의 Join은 엑셀의 vlookup과 동일하다고 생각하시면 됩니다 :-)</p>
</blockquote>
<h3 id="2-join의-종류-left-join-inner-join">2) Join의 종류: Left Join, Inner Join</h3>
<p><strong>▶︎ Left Join</strong> 이해하기
<img src="https://images.velog.io/images/movely_s2/post/e4c28383-9cec-4c46-adad-911a991c2ca9/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.26.41.png" alt="">
여기서 A와 B는 각각의 테이블을 의미합니다. 둘 사이의 겹치는 부분은, 뭔가 테이블 A와 B의 key 값이 연결되는 부분일 것 같지 않나요?</p>
<pre><code class="language-sql">select * from users u
left join point_users p
on u.user_id = p.user_id;</code></pre>
<p>👉 어떤 데이터는 모든 필드가 채워져있지만, 어떤 데이터는 비어있는 필드가 있습니다. (NULL)</p>
<ul>
<li>꽉찬 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재해서 연결한 경우</li>
<li>비어있는 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재하지 않는 경우</li>
</ul>
<p><strong>▶︎ Inner Join</strong> 이해하기
<img src="https://images.velog.io/images/movely_s2/post/dcd1d1b8-e62c-4ab6-9d64-261e0f911bff/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.38.18.png" alt=""></p>
<p>여기서 A와 B는 각각의 테이블을 의미합니다. 이 그림은 뭔가, 두 테이블의 교집합을 이야기하고 있는 것 같지 않나요?</p>
<pre><code class="language-sql">select * from users u
 inner join point_users p on u.user_id = p.user_id;</code></pre>
<p>👉 앗, 여기서는 비어있는 필드가 있는 데이터가 없어요!</p>
<p>그 이유는, 같은 user_id를 두 테이블에서 모두 가지고 있는 데이터만 출력했기 때문이에요.</p>
<h1 id="02-join-본격-사용해보기">02. Join 본격 사용해보기</h1>
<h3 id="1-join-함께-연습해보기">1) Join 함께 연습해보기</h3>
<p>▶︎ orders 테이블에 users 테이블 연결해보기</p>
<ul>
<li>주문 정보에 유저 정보를 연결해 분석을 위한 준비를 하려고 합니다! 우선 inner Join을 사용해서 주문 정보에, 유저 정보를 붙여서 볼까요?</li>
</ul>
<pre><code class="language-sql">select * from orders o
 inner join users u on o.user_id = u.user_id;</code></pre>
<p>▶︎ checkins 테이블에 users 테이블 연결해보기</p>
<ul>
<li>&#39;오늘의 다짐&#39; 테이블에 유저 정보를 연결해 분석을 위한 준비를 하려고 합니다! 우선 Inner Join을 사용해서 &#39;오늘의 다짐&#39; 테이블에, 유저 테이블을 붙여서 볼까요?</li>
</ul>
<pre><code class="language-sql">select * from checkins c
inner join users u
on c.user_id = u.user_id;</code></pre>
<blockquote>
<p>👉 <strong>[오늘의 팁!]</strong>
연결의 <strong>기준이 되고싶은 테이블을 from 절</strong>에, 
기준이 되는 테이블에 <strong>붙이고 싶은 테이블을 Join 절</strong>에 위치해 놓습니다.</p>
</blockquote>
<p>▶︎ enrolleds 테이블에 courses 테이블 연결해보기</p>
<ul>
<li>&#39;수강 등록&#39; 테이블에 과목 정보를 연결해 분석을 위한 준비를 하려고 합니다! 우선 Inner Join을 사용해서 &#39;수강 등록&#39; 테이블에, 과목 테이블을 붙여서 볼까요?</li>
</ul>
<pre><code class="language-sql">select * from enrolleds e
 inner join courses c on e.course_id = c.course_id;</code></pre>
<h3 id="2-join--sql-쿼리가-실행되는-순서">2) Join : SQL 쿼리가 실행되는 순서</h3>
<blockquote>
<p>👉 위 쿼리가 실행되는 순서: from → join → select</p>
</blockquote>
<ol>
<li>from enrolleds: enrolleds 테이블 데이터 전체를 가져옵니다.</li>
<li>inner join courses on e.course_id = c.course_id: courses를 enrolleds 테이블에 붙이는데, enrolleds 테이블의 course_id와 동일한 course_id를 갖는 courses의 테이블을 붙입니다.</li>
<li>select * : 붙여진 모든 데이터를 출력합니다.</li>
</ol>
<ul>
<li>항상 from에 들어간 테이블을 기준으로, 다른 테이블이 붙는다고 생각하면 편합니다!</li>
</ul>
<h1 id="03-배웠던-문법을-join과-함께-사용해보기">03. 배웠던 문법을 Join과 함께 사용해보기</h1>
<h3 id="1-배웠던-문법-join과-함께-연습해보기">1) 배웠던 문법 Join과 함께 연습해보기</h3>
<p>▶︎ checkins 테이블에 courses 테이블 연결해서 통계치 내보기</p>
<ul>
<li>&#39;오늘의 다짐&#39; 정보에 과목 정보를 연결해 과목별 &#39;오늘의 다짐&#39; 갯수를 세어보자!</li>
</ul>
<pre><code class="language-sql">select co.title, count(co.title) as checkin_count from checkins ci
 inner join courses co on ci.course_id = co.course_id 
 group by co.title</code></pre>
<blockquote>
<p>👉 <strong>[오늘의 팁!]</strong>
2주차에 배운 alias는 이렇게 사용하면 편합니다. 연결되는 테이블이 많아지면서 필드명과 테이블명이 헷갈려 실수할 수 있는데, 이렇게 alias를 지정해 주면 편하고 깔끔하게 SQL 쿼리를 작성할 수 있어요.</p>
</blockquote>
<p>▶︎ point_users 테이블에 users 테이블 연결해서 순서대로 정렬해보기</p>
<ul>
<li>유저의 포인트 정보가 담긴 테이블에 유저 정보를 연결해서, 많은 포인트를 얻은 순서대로 유저의 데이터를 뽑아보자!</li>
</ul>
<pre><code class="language-sql">select * from point_users p
 inner join users u on p.user_id = u.user_id
 order by p.point desc</code></pre>
<p>▶︎ orders 테이블에 users 테이블 연결해서 통계치 내보기</p>
<ul>
<li>주문 정보에 유저 정보를 연결해 네이버 이메일을 사용하는 유저 중, 성씨별 주문건수를 세어보자!</li>
</ul>
<pre><code class="language-sql">select u.name, count(u.name) as count_name from orders o
 inner join users u on o.user_id = u.user_id 
 where u.email like &#39;%naver.com&#39;
 group by u.name</code></pre>
<h3 id="2-sql-쿼리가-실행되는-순서">2) SQL 쿼리가 실행되는 순서</h3>
<blockquote>
<p>👉 위 쿼리가 실행되는 순서: from → join → where → group by → select</p>
</blockquote>
<ol>
<li>from orders o: orders 테이블 데이터 전체를 가져오고 o라는 별칭을 붙입니다.</li>
<li>inner join users u on o.user_id = u.user_id : users 테이블을 orders 테이블에 붙이는데, orders 테이블의 user_id와 동일한 user_id를 갖는 users 테이블 데이터를 붙입니다. (*users 테이블에 u라는 별칭을 붙입니다)</li>
<li>where u.email like &#39;%naver.com&#39;: users 테이블 email 필드값이 naver.com으로 끝나는 값만 가져옵니다.</li>
<li>group by u.name: users 테이블의 name값이 같은 값들을 뭉쳐줍니다.</li>
<li>select u.name, count(u.name) as count_name : users 테이블의 name필드와 name 필드를 기준으로 뭉쳐진 갯수를 세어서 출력해줍니다.</li>
</ol>
<ul>
<li>Join의 실행 순서는 항상 from 과 붙어다닌다고 생각하면 편해요!</li>
</ul>
<h1 id="04-이제는-실전-본격-쿼리-작성">04. 이제는 실전! 본격 쿼리 작성</h1>
<h3 id="퀴즈-1-결제-수단-별-유저-포인트의-평균값-구해보기">퀴즈 1) 결제 수단 별 유저 포인트의 평균값 구해보기</h3>
<ul>
<li>join 할 테이블: <code>point_users</code> 에, <code>orders</code> 를 붙이기</li>
<li>꿀팁! → <code>round(숫자,자릿수)</code> 를 이용해서 반올림을 해볼까요?</li>
</ul>
<pre><code class="language-sql">select o.payment_method, round(AVG(p.point)) from point_users p
 inner join orders o on p.user_id = o.user_id 
 group by o.payment_method</code></pre>
<h3 id="퀴즈-2-결제하고-시작하지-않은-유저들을-성씨별로-세어보기">퀴즈 2) 결제하고 시작하지 않은 유저들을 성씨별로 세어보기</h3>
<ul>
<li>join 할 테이블: <code>enrolleds</code> 에, <code>users</code> 를 붙이기</li>
<li>꿀팁! → <code>is_registered = 0</code> 인 사람들을 세어보아요!</li>
<li>꿀팁! → <code>order by</code> 를 이용해서 내림차순으로 정렬하면 보기 좋겠죠?</li>
</ul>
<pre><code class="language-sql">select name, count(*) as cnt_name from enrolleds e
 inner join users u on e.user_id = u.user_id 
 where is_registered = 0
 group by name
 order by cnt_name desc</code></pre>
<h3 id="퀴즈-3-과목-별로-시작하지-않은-유저들을-세어보기">퀴즈 3) 과목 별로 시작하지 않은 유저들을 세어보기</h3>
<ul>
<li>join 할 테이블: <code>courses</code>에, <code>enrolleds</code> 를 붙이기</li>
<li>꿀팁! → <code>is_registered = 0</code> 인 사람들을 세어보아요!</li>
</ul>
<pre><code class="language-sql">select c.course_id, c.title, count(*) as cnt_notstart from courses c
inner join enrolleds e 
on c.course_id = e.course_id
where is_registered = 0
group by c.course_id</code></pre>
<h1 id="05-한번-더-총복습">05. 한번 더 총복습!</h1>
<h3 id="연습-1-웹개발-앱개발-종합반의-week-별-체크인-수를-세어볼까요-보기-좋게-정리해보기">연습 1) 웹개발, 앱개발 종합반의 week 별 체크인 수를 세어볼까요? 보기 좋게 정리해보기!</h3>
<ul>
<li>join 할 테이블: <code>checkins</code>에, <code>courses</code> 를 붙이기</li>
<li>꿀팁! → group by, order by에 <code>콤마</code>로 이어서 두 개 필드를 걸어보세요!</li>
</ul>
<pre><code class="language-sql">select c2.title, c1.week, count(*) from checkins c1
 inner join courses c2 on c1.course_id = c2.course_id 
 group by c2.title, c1.week 
 order by c2.title, c1.week </code></pre>
<h3 id="연습-2-연습1번에서-8월-1일-이후에-구매한-고객들만-발라내어-보세요">연습 2) 연습1번에서, 8월 1일 이후에 구매한 고객들만 발라내어 보세요!</h3>
<ul>
<li>join 할 테이블: <code>checkins</code>에, <code>courses</code> 를 붙이고! + <code>checkins</code> 에, <code>orders</code> 를 한번 더 붙이기!</li>
<li>꿀팁! → <code>checkins</code> 테이블에 inner join을 한번 더 걸고, where 절로 마무리!</li>
</ul>
<pre><code class="language-sql">select c2.title, c1.week, count(*) as cnt from checkins c1
 inner join courses c2 on c1.course_id = c2.course_id
 inner join orders o on c1.user_id = o.user_id
 where o.created_at &gt;= &#39;2020-08-01&#39;
 group by c2.title, c1.week 
 order by c2.title, c1.week </code></pre>
<h1 id="06-left-join-복습">06. Left Join 복습</h1>
<h3 id="1-다시한번-복습-inner-join-vs-left-join">1) 다시한번 복습! inner join vs left join</h3>
<blockquote>
<ul>
<li><strong>inner join</strong> 은 교집합, <strong>left join</strong> 은 첫번째 원에 붙이는 것!</li>
</ul>
</blockquote>
<ul>
<li><strong>left join</strong>은 <code>어디에 → 뭐를 붙일건지, 순서가 중요</code>해요!</li>
</ul>
<h3 id="2-left-join-언제쓸까요">2) Left join 언제쓸까요?</h3>
<p>예를 들면 모든 유저가 포인트를 갖고 있지를 않을 수 있잖아요!
users 테이블과 ↔ point_users 테이블을 left join 해봅시다.</p>
<pre><code class="language-sql">select * from users u
  left join point_users pu on u.user_id = pu.user_id</code></pre>
<p><strong>이 상태에선, 이런 게 가능해요.</strong>
💡 유저 중에, 포인트가 없는 사람(=즉, 시작하지 않은 사람들)의 통계!</p>
<ul>
<li>속닥속닥) <code>is NULL</code> , <code>is not NULL</code> 을 함께 배워보아요!</li>
</ul>
<pre><code class="language-sql">select name, count(*) from users u
left join point_users pu on u.user_id = pu.user_id
where pu.point_user_id is NULL
group by name</code></pre>
<pre><code class="language-sql">select name, count(*) from users u
  left join point_users pu on u.user_id = pu.user_id
 where pu.point_user_id is not NULL
 group by name</code></pre>
<h3 id="3-여기서-퀴즈---막해보기">3) 여기서 퀴즈! - 막해보기</h3>
<p>▶︎ 7월10일 ~ 7월19일에 가입한 고객 중, 
포인트를 가진 고객의 숫자, 그리고 전체 숫자, 그리고 비율을 보고 싶어요!</p>
<ul>
<li>힌트1 → <code>count</code> 은 NULL을 세지 않는답니다!</li>
<li>힌트2 → Alias(별칭)도 잘 붙여주세요!</li>
<li>힌트3 → 비율은 소수점 둘째자리에서 반올림!</li>
</ul>
<pre><code class="language-sql">select count(point_user_id) as pnt_user_cnt,
       count(*) as tot_user_cnt,
       round(count(point_user_id)/count(*),2) as ratio
  from users u
  left join point_users pu on u.user_id = pu.user_id
 where u.created_at between &#39;2020-07-10&#39; and &#39;2020-07-20&#39;</code></pre>
<h1 id="07-결과물-합치기-union-배우기">07. 결과물 합치기! Union 배우기</h1>
<h3 id="1-select를-두-번-할-게-아니라-한번에-모아서-보고싶은-경우-있을걸요">1) Select를 두 번 할 게 아니라, 한번에 모아서 보고싶은 경우, 있을걸요!</h3>
<p>👉 근데, 그러려면 한 가지 조건이 있어요! 노란색과 파란색 박스의 필드명이 같아야 한답니다. 🙂 (당연하겠죠?)</p>
<p><img src="https://images.velog.io/images/movely_s2/post/aa8e6869-0634-4ddc-b79f-8e6adaa941cb/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-28%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2012.43.42.png" alt=""></p>
<h3 id="2-union을-이용해서-아래와-같은-모습을-만들어볼까요">2) Union을 이용해서 아래와 같은 모습을 만들어볼까요?</h3>
<ul>
<li>8월</li>
</ul>
<pre><code class="language-sql">select &#39;8월&#39; as month, c.title, c2.week, count(*) as cnt from checkins c2
 inner join courses c on c2.course_id = c.course_id
 inner join orders o on o.user_id = c2.user_id
 where o.created_at &gt; &#39;2020-08-01&#39;
 group by c2.course_id, c2.week
 order by c2.course_id, c2.week</code></pre>
<ul>
<li>7월</li>
</ul>
<pre><code class="language-sql">select &#39;7월&#39; as month, c.title, c2.week, count(*) as cnt from checkins c2
 inner join courses c on c2.course_id = c.course_id
 inner join orders o on o.user_id = c2.user_id
 where o.created_at &lt; &#39;2020-08-01&#39;
 group by c2.course_id, c2.week
 order by c2.course_id, c2.week</code></pre>
<ul>
<li>여기에 <strong>아래 위로 Union all을 사용</strong>해 붙여주면 끝!</li>
</ul>
<pre><code class="language-sql">(
    select &#39;7월&#39; as month, c.title, c2.week, count(*) as cnt from checkins c2
     inner join courses c on c2.course_id = c.course_id
     inner join orders o on o.user_id = c2.user_id
     where o.created_at &lt; &#39;2020-08-01&#39;
     group by c2.course_id, c2.week
     order by c2.course_id, c2.week
)
union all
(
    select &#39;8월&#39; as month, c.title, c2.week, count(*) as cnt from checkins c2
     inner join courses c on c2.course_id = c.course_id
     inner join orders o on o.user_id = c2.user_id
     where o.created_at &gt; &#39;2020-08-01&#39;
      group by c2.course_id, c2.week
     order by c2.course_id, c2.week
)</code></pre>
<ul>
<li>앗, 그런데, 한 가지! 정렬이 깨졌네요!? 😂
👉 <strong>네 맞습니다! union을 사용하면 내부 정렬이 먹지 않아요.</strong>
이 때 유용한 방법이 있지요. 바로, <strong>SubQuery(서브쿼리)!</strong>
4주차에 공부한다고 하니 기대해주세요!</li>
</ul>
<h1 id="08-3주차-숙제">08. 3주차 숙제</h1>
<p>enrolled_id별 수강완료(done=1)한 강의 갯수를 세어보고, 완료한 강의 수가 많은 순서대로 정렬해보기. user_id도 같이 출력되어야 한다.</p>
<ul>
<li>조인해야 하는 테이블: <code>enrolleds</code>, <code>enrolleds_detail</code></li>
<li>조인하는 필드: <code>enrolled_id</code></li>
</ul>
<pre><code class="language-sql">select e.enrolled_id,
         e.user_id,
         count(*) as cnt
  from enrolleds e
 inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
 where ed.done = 1
 group by e.enrolled_id, e.user_id
 order by cnt desc</code></pre>
<h3 id="3주차-수업-완강했어요-👏">3주차 수업 완강했어요! 👏</h3>
<h1 id="💡공부를-마치며">💡공부를 마치며...</h1>
<p>1) 연결의 기준이 되고싶은 테이블을 from 절에, 
기준이 되는 테이블에 붙이고 싶은 테이블을 Join 절에 위치해 놓습니다.
ㄴ 기준 정하는게 좀 헷갈린다...더 많은 예제를 통해 확인해 봐야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타코딩클럽] SQL - 2주차]]></title>
            <link>https://velog.io/@movely_s2/spartasqlweek2</link>
            <guid>https://velog.io/@movely_s2/spartasqlweek2</guid>
            <pubDate>Tue, 25 Jan 2022 14:12:09 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">[목표]</h1>
<ol>
<li>동일한 범주의 데이터를 묶어서 통계를 내주는 Group by를 이해</li>
<li>출력하는 데이터를 필드의 값으로 정렬하여 출력하는 Order by를 익히기</li>
<li>조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익히기</li>
</ol>
<h1 id="01-group-by">01. Group by</h1>
<h3 id="1-group-by란">1) Group by란?</h3>
<blockquote>
<p>동일한 범주를 갖는 데이터를 하나로 묶어서, <strong>범주별 통계</strong>를 내주는 것을 의미해요.
<strong>Group by</strong>를 이용하면 1) 같은 성씨의 데이터를 하나로 묶고 2) 각 성씨의 회원수를 구할 수 있어요. </p>
</blockquote>
<pre><code class="language-sql">select name, count(*) from users
group by name;</code></pre>
<p>성씨별로 회원이 몇 명인지, 세어진 것을 확인할 수 있죠?</p>
<ol>
<li>from users: users 테이블에서 데이터를 불러옵니다</li>
<li>group by name: name이라는 필드에서 동일한 값을 갖는 데이터를 하나로 합쳐줍니다</li>
<li>select name, count(<em>): 이름과 count(</em>)를 출력해 주는데, 여기서 count(*)는 group by로 합쳐진 데이터의 개수를 세어주는 것입니다!</li>
</ol>
<h3 id="2-group-by--sql-쿼리가-실행되는-순서">2) Group by : SQL 쿼리가 실행되는 순서</h3>
<blockquote>
<p>👉  위 쿼리가 실행되는 순서: from → group by → select</p>
</blockquote>
<ol>
<li>from users: users 테이블 데이터 전체를 가져옵니다.</li>
<li>group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐줍니다.</li>
<li>select name, count(<em>): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
예) 이*</em>, 이<strong>, 김</strong>, 김<strong>, 박</strong> 이렇게 데이터가 있었다면, 이<strong>는 2개, 김</strong>은 2개, 박**은 1개겠죠!</li>
</ol>
<h1 id="02-group-by-기능-알아보기">02. Group by 기능 알아보기</h1>
<h3 id="1-동일한-범주의-개수-구하기">1) 동일한 범주의 개수 구하기</h3>
<blockquote>
<p>👉 동일한 범주의 갯수는 <strong>count(*)</strong>를 사용해서 해요. </p>
</blockquote>
<p>▶︎ 주차별 &#39;오늘의 다짐&#39; 개수 구하기</p>
<pre><code class="language-sql">select week, count(*) from checkins
group by week;</code></pre>
<pre><code class="language-sql">select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;</code></pre>
<h3 id="2-동일한-범주에서의-최솟값-구하기">2) 동일한 범주에서의 최솟값 구하기</h3>
<blockquote>
<p>👉 동일한 범주 특정 필드의 최솟값은 <strong>min(필드명)</strong>을 사용해서 해요. </p>
</blockquote>
<p>▶︎ 주차별 &#39;오늘의 다짐&#39;의 좋아요 최솟값 구하기</p>
<pre><code class="language-sql">select week, min(likes) from checkins
group by week;</code></pre>
<pre><code class="language-sql">select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;</code></pre>
<h3 id="3-동일한-범주에서의-최댓값-구하기">3) 동일한 범주에서의 최댓값 구하기</h3>
<blockquote>
<p>👉 동일한 범주 특정 필드의 최댓값은 <strong>max(필드명)</strong>을 사용해서 해요. </p>
</blockquote>
<p>▶︎ 주차별 &#39;오늘의 다짐&#39;의 좋아요 최댓값 구하기</p>
<pre><code class="language-sql">select week, max(likes) from checkins
group by week;</code></pre>
<pre><code class="language-sql">select 범주가 담긴 필드명, max(최댓값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;</code></pre>
<h3 id="4-동일한-범주의-평균-구하기">4) 동일한 범주의 평균 구하기</h3>
<blockquote>
<p>👉 동일한 범주 특정 필드의 평균값은 <strong>avg(필드명)</strong>을 사용해서 해요. </p>
</blockquote>
<p>▶︎ 주차별 &#39;오늘의 다짐&#39;의 좋아요 평균값 구하기</p>
<pre><code class="language-sql">select week, avg(likes) from checkins
group by week;</code></pre>
<pre><code class="language-sql">select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;</code></pre>
<pre><code class="language-sql">select week, round(avg(likes),2) from checkins
group by week;</code></pre>
<p>평균을 구할 때는 소수점이 나와서 보기 좋지가 않아, round(필드명,소수점자리수)를 함께써서 원하는 숫자로 표기해요. 0은 그냥 반올림. 2는 소수점 둘째자리까지 표기.</p>
<h3 id="5-동일한-범주의-합계-구하기">5) 동일한 범주의 합계 구하기</h3>
<blockquote>
<p>👉 동일한 범주 특정 필드의 합계는 <strong>sum(필드명)</strong>을 사용해서 해요. </p>
</blockquote>
<p>▶︎ 주차별 &#39;오늘의 다짐&#39;의 좋아요 합계 구하기</p>
<pre><code class="language-sql">select week, sum(likes) from checkins
group by week;</code></pre>
<pre><code class="language-sql">select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;</code></pre>
<h1 id="03-order-by">03. Order by</h1>
<h2 id="-깔끔한-정렬이-필요할-땐">: 깔끔한 정렬이 필요할 땐?</h2>
<h3 id="1-오름차순으로-정렬해보기">1) 오름차순으로 정렬해보기</h3>
<blockquote>
<p>👉  기존 작성된 코드에 <em>*order by count(</em>) <em>*만 추가해줬어요. 
갯수 (count(</em>) 값)을 기준으로 정렬해달라는 뜻이에요.</p>
</blockquote>
<ul>
<li>기본 오름차순으로 asc(어센딩)정렬되며, 내림차순은 <strong>desc(디센딩)</strong> 추가</li>
</ul>
<p>▶︎ 성씨별 회원수 데이터를 오름차순으로 정렬해보기</p>
<pre><code class="language-sql">select name, count(*) from users
group by name
order by count(*);</code></pre>
<h3 id="2-내림차순으로-정렬해보기">2) 내림차순으로 정렬해보기</h3>
<blockquote>
<p>👉  order by count(<em>)에 *</em>desc**만 붙여줬어요.</p>
</blockquote>
<p>▶︎ 성씨별 회원수 데이터를 내림차순으로 정렬해보기</p>
<pre><code class="language-sql">select name, count(*) from users
group by name
order by count(*) desc;</code></pre>
<h3 id="3-order-by-사용해보기">3) Order by 사용해보기</h3>
<p>▶︎ like를 많이 받은 순서대로 &#39;오늘의 다짐&#39;을 출력해 볼까요?</p>
<pre><code class="language-sql">select * from checkins
order by likes desc;</code></pre>
<pre><code class="language-sql">select * from 테이블명
order by 정렬의 기준이 될 필드명;</code></pre>
<h3 id="4-order-by--sql-쿼리가-실행되는-순서">4) Order by : SQL 쿼리가 실행되는 순서</h3>
<pre><code class="language-sql">select name, count(*) from users
group by name
order by count(*);</code></pre>
<blockquote>
<p>👉 위 쿼리가 실행되는 순서: from → group by → select → order by</p>
</blockquote>
<ol>
<li>from users: users 테이블 데이터 전체를 가져옵니다.</li>
<li>group by name: users 테이블 데이터에서 같은 name을 갖는 데이터를 합쳐줍니다.</li>
<li>select name, count(<em>): name에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
예) 이*</em>, 이<strong>, 김</strong>, 김<strong>, 박</strong> 이렇게 데이터가 있었다면, 이<strong>는 2개, 김</strong>은 2개, 박**은 1개겠죠!</li>
<li>order by count(*): 합쳐진 데이터의 개수에 따라 오름차순으로 정렬해줍니다.</li>
</ol>
<h1 id="04-where와-함께-사용해보기">04. Where와 함께 사용해보기</h1>
<h3 id="1-where와-group-by-order-by-함께-사용해보기">1) Where와 Group by, Order by 함께 사용해보기</h3>
<p>▶︎ 웹개발 종합반의 결제수단별 주문건수 세어보기</p>
<p>😎 원리는 간단해요. Where절로 조건이 하나 추가되고, 그 이후에 Group by, Order by가 실행되는 것!</p>
<p>[순서]</p>
<ol>
<li>orders 테이블에서 주문 데이터를 읽어오고</li>
<li>웹개발 종합반 데이터만 남기고</li>
<li>결제수단(범주) 별로 그룹화하고</li>
<li>결제수단별 주문건수를 세어준다!</li>
</ol>
<pre><code class="language-sql">select payment_method, count(*) from orders
where course_title = &quot;웹개발 종합반&quot;
group by payment_method;</code></pre>
<p>위와 같이, group by와 select 사이에 where로 조건을 넣어주면 끝!</p>
<h3 id="2-sql-쿼리가-실행되는-순서">2) SQL 쿼리가 실행되는 순서</h3>
<blockquote>
<p>👉 위 쿼리가 실행되는 순서: from → where → group by → select</p>
</blockquote>
<ol>
<li>from orders: users 테이블 데이터 전체를 가져옵니다.</li>
<li>where course_title = &quot;웹개발 종합반&quot;: 웹개발 종합반 데이터만 남겨줍니다.</li>
<li>group by payment_method: 같은 payment_method을 갖는 데이터를 합쳐줍니다.</li>
<li>select payment_method, count(*): payment_method에 따라 합쳐진 데이터가 각각 몇 개가 합쳐진 것인지 세어줍니다.
예) CARD, CARD, kakaopay 이렇게 데이터가 있었다면, CARD는 2개, kakaopay는 1개겠죠!</li>
</ol>
<p>만약 order by가 추가된다면? order by는 맨 나중에 실행됩니다! (결과물을 정렬해주는 것이기 때문!)</p>
<h1 id="05-이외-유용한-문법-배워보기">05. 이외 유용한 문법 배워보기</h1>
<h3 id="1-별칭-기능-alias">1) 별칭 기능: Alias</h3>
<p>쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있습니다. 그래서 SQL은 Alias(알리아스)라는 별칭 기능을 지원합니다.</p>
<pre><code class="language-sql">select * from orders o
where o.course_title = &#39;앱개발 종합반&#39;</code></pre>
<p>요렇게 테이블에 이름을 붙여서 별칭을 추가하는 것도 가능하고,</p>
<pre><code class="language-sql">select payment_method, count(*) as cnt from orders o
where o.course_title = &#39;앱개발 종합반&#39;
group by payment_method</code></pre>
<p>출력될 필드에 as를 붙여서 별칭을 추가하는 것도 가능해요! 그럼, count(*)가 아니라 cnt로 출력되었네요! </p>
<h1 id="06-2주차-숙제">06. 2주차 숙제</h1>
<p>네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기</p>
<pre><code class="language-sql">select payment_method, count(*) from orders
where email like &#39;%naver.com&#39; and course_title = &#39;앱개발 종합반&#39;
group by payment_method</code></pre>
<h3 id="2주차-수업-완강했어요-👏">2주차 수업 완강했어요 👏</h3>
<h1 id="💡-공부를-마치며">💡 공부를 마치며...</h1>
<p>1) order by의 기본정렬은 오름차순이며, 내림차순정렬은 desc를 붙이면 돼요.
2) 평균을 구하는 avg(필드명)은 보통 소수점자리로 계산되어, round()와 함께 쓰면 좋아요. round(avg(필드명),소수점자리수)로 표기하며, 0은 일단위, 2는 소수점 둘째자리까지 표시한다는 의미이다.
3) OO별..에서 OO이 범주필드를 의미한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스파르타코딩클럽] SQL - 1주차]]></title>
            <link>https://velog.io/@movely_s2/spartasqlweek1</link>
            <guid>https://velog.io/@movely_s2/spartasqlweek1</guid>
            <pubDate>Tue, 25 Jan 2022 12:07:29 GMT</pubDate>
            <description><![CDATA[<h1 id="목표-">**[목표] **</h1>
<ol>
<li>DB에서 데이터를 가져오는 기초적인 문법인 Select와 Where문을 이해</li>
<li>조금 더 복잡한 분석을 위해 자주 사용되는 유용한 문법을 익히기</li>
</ol>
<p>** * 필수 프로그램 설치  ** : DBeaver [디비버] (<a href="https://dbeaver.io/download/">다운로드 링크</a>)</p>
<h1 id="01-select-쿼리문이란">01. Select 쿼리문이란</h1>
<h3 id="1-select-쿼리문"><strong>1) Select 쿼리문</strong></h3>
<p>쿼리(Query)문이란? 쿼리는 질의를 의미하죠. 데이터베이스에 명령을 내리는 것을 의미합니다. 
여기서 Select 쿼리문은, 데이터베이스에서 &#39;데이터를 선택해서 가져오겠다&#39;는 의미입니다.</p>
<blockquote>
<p>👉 Select 쿼리문은 1) 어떤 테이블에서 2) 어떤 필드의 데이터를 가져올지 로 구성됩니다.</p>
</blockquote>
<h3 id="2-select-쿼리문-연습"><strong>2) Select 쿼리문 연습</strong></h3>
<p>▶︎ orders 테이블의 데이터 가져와보기</p>
<pre><code class="language-sql">select * from orders;</code></pre>
<p>▶︎ orders 테이블의 데이터 가져와보기</p>
<pre><code class="language-sql">select * from orders;</code></pre>
<p>▶︎ orders 테이블의 데이터 가져와보기</p>
<pre><code class="language-sql">select * from orders;</code></pre>
<p>▶︎ orders 테이블의 특정 필드만 가져와보기</p>
<pre><code class="language-sql">select created_at, course_title, payment_method, email from orders;</code></pre>
<h1 id="02-where">02. Where</h1>
<h2 id="-특정-데이터만-가져오고-싶다면">: 특정 데이터만 가져오고 싶다면?</h2>
<h3 id="1-where-절의-개념">1) Where 절의 개념</h3>
<blockquote>
<p>👉 Where 절은, Select 쿼리문으로 가져올 데이터에 조건을 걸어주는 것을 의미해요.</p>
</blockquote>
<p>▶︎ orders 테이블에서 결제수단이 카카오페이인 데이터만 가져와줘!</p>
<pre><code class="language-sql">select * from orders
where payment_method = &quot;kakaopay&quot;;</code></pre>
<p>▶︎ point_users 테이블에서 포인트가 5000점 이상인 데이터만 가져와줘!</p>
<pre><code class="language-sql">select * from point_users
where point &gt;= 5000;</code></pre>
<p>▶︎ orders 테이블에서 주문한 강의가 앱개발 종합반이면서, 결제수단이 카드인 데이터만 가져와줘!</p>
<pre><code class="language-sql">select * from orders
where course_title = &quot;앱개발 종합반&quot; and payment_method = &quot;kakaopay&quot;;</code></pre>
<h3 id="2-select-쿼리문에-where-절-함께-써보기">2) Select 쿼리문에 Where 절 함께 써보기</h3>
<blockquote>
<p>👉 (1) 원하는 테이블과 (2) 조건, 이 두 가지만 기억
여러 조건은 and로 함께 넣을 수 있다.</p>
</blockquote>
<p>▶︎ 포인트가 20000점보다 많은 유저만 뽑아보기!</p>
<pre><code class="language-sql">select * from point_users
where point &gt; 20000;</code></pre>
<p>▶︎ 성이 황씨인 유저만 뽑아보기!</p>
<pre><code class="language-sql">select * from users
where name = &quot;황**&quot;;</code></pre>
<p>▶︎ 웹개발 종합반이면서 결제수단이 CARD인 주문건만 뽑아보기!</p>
<pre><code class="language-sql">select * from orders
where course_title = &quot;웹개발 종합반&quot; and payment_method = &quot;CARD&quot;;</code></pre>
<h1 id="03-where-절과-자주-같이-쓰는-문법">03. Where 절과 자주 같이 쓰는 문법</h1>
<h3 id="1-같지-않음-조건-걸어보기">1) &#39;같지 않음&#39; 조건 걸어보기</h3>
<blockquote>
<p>&#39;같지 않음&#39; 조건은 != 로 걸 수 있습니다. </p>
</blockquote>
<p>▶︎ &#39;웹개발 종합반&#39;을 제외하고 주문데이터를 보고 싶어졌어요. 어떻게 하면 좋을까요?</p>
<pre><code class="language-sql">select * from orders
where course_title != &quot;웹개발 종합반&quot;;</code></pre>
<h3 id="2-범위-조건-걸어보기">2) &#39;범위&#39; 조건 걸어보기</h3>
<blockquote>
<p>&#39;범위&#39; 조건은 between 으로 걸 수 있어요.</p>
</blockquote>
<p>▶︎ 7월 13일, 7월 14일의 주문데이터만 보고 싶어졌어요. 어떻게 해야 할까요?</p>
<pre><code class="language-sql">select * from orders
where created_at between &quot;2020-07-13&quot; and &quot;2020-07-15&quot;;</code></pre>
<h3 id="3-포함-조건-걸어보기">3) &#39;포함&#39; 조건 걸어보기</h3>
<blockquote>
<p>&#39;포함&#39; 조건은 in 으로 걸 수 있어요.</p>
</blockquote>
<p>▶︎ 1, 3주차 사람들의 &#39;오늘의 다짐&#39; 데이터만 보고 싶어졌어요. 어떻게 해야 할까요?</p>
<pre><code class="language-sql">select * from checkins 
where week in (1, 3);</code></pre>
<h3 id="4-패턴-문자열-규칙-조건-걸어보기">4) &#39;패턴&#39; (문자열 규칙) 조건 걸어보기</h3>
<blockquote>
<p>&#39;패턴&#39; 조건은 like 으로 걸 수 있어요.</p>
</blockquote>
<ul>
<li>where email like &#39;a%&#39;: email 필드값이 a로 시작하는 모든 데이터</li>
<li>where email like &#39;%a&#39; email 필드값이 a로 끝나는 모든 데이터</li>
<li>where email like &#39;%co%&#39; email 필드값에 co를 포함하는 모든 데이터</li>
<li>where email like &#39;a%o&#39; email 필드값이 a로 시작하고 o로 끝나는 모든 데이터</li>
</ul>
<p>▶︎ 다음 (daum) 이메일을 사용하는 유저만 보고 싶어졌어요. 어떻게 하죠?</p>
<pre><code class="language-sql">select * from users 
where email like &#39;%daum.net&#39;;</code></pre>
<h1 id="04-이외-유용한-문법">04. 이외 유용한 문법</h1>
<h3 id="1-일부-데이터만-가져오기--limit">1) 일부 데이터만 가져오기 : Limit</h3>
<p>테이블에 어떤 데이터가 들어있나 잠깐 보려고 들어왔는데, 데이터를 다 불러오느라 시간이 오래 걸리면 힘들겠죠?</p>
<p>그런 경우를 대비해, 일부 데이터만 가져오는 Limit이라는 기능이 있습니다.</p>
<pre><code class="language-sql">select * from orders 
where payment_method = &quot;kakaopay&quot;
limit 5;</code></pre>
<p>요렇게, 맨 뒤에 limit을 써주고 몇 개 출력할지 숫자를 적어주면 끝!
딱 5개만 출력된 것을 알 수 있죠?</p>
<h3 id="2-중복-데이터는-제외하고-가져오기-distinct">2) 중복 데이터는 제외하고 가져오기: Distinct</h3>
<p>고객이 사용한 결제수단이 어떤 종류가 있을지 궁금할때 어떻게 할까요?</p>
<pre><code class="language-sql">select distinct(payment_method) from orders;</code></pre>
<p>출력하고 싶은 필드에 distinct로 감싸주면 끝!
몇 개의 결제수단 종류가 있는지 알 수 있어요.</p>
<h3 id="3-몇-개인지-숫자-세보기-count">3) 몇 개인지 숫자 세보기: Count</h3>
<p>orders 테이블에 데이터가 몇 개 들어있는지 궁금해요!</p>
<pre><code class="language-sql">select count(*) from orders</code></pre>
<p>한 줄로 끝! select * from orders에서 *을, count로 감싸주면 됩니다.</p>
<h3 id="4-distinct와-count를-같이-써보기">4) Distinct와 Count를 같이 써보기</h3>
<p>회원 분들의 성(family name)씨가 몇개인지 궁금하다면?</p>
<pre><code class="language-sql">select distinct(name) from users;</code></pre>
<p>이렇게 하면 성씨가 쭉 나오죠?</p>
<pre><code class="language-sql">SELECT count(distinct(name)) from users;</code></pre>
<p>그리고, 여기에 count를 입혀주면 몇 개의 성씨가 있는지 알 수 있습니다. </p>
<h1 id="05-1주차-숙제">05. 1주차 숙제</h1>
<p>naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기</p>
<pre><code class="language-sql">select * from orders
where email like &#39;%naver.com&#39;
and course_title = &#39;웹개발 종합반&#39;
and payment_method = &#39;kakaopay&#39;</code></pre>
<h3 id="1주차-수업-완강했어요-👏">1주차 수업 완강했어요! 👏</h3>
<h1 id="💡공부를-마치며">💡공부를 마치며...</h1>
<p>1) 문자는 작은따옴표(&#39;)로 감싸고, 숫자는 그냥 써 주세요.
2) 테이블이 뭐가 있는지 다 보고 싶으면, </p>
<pre><code class="language-sql">show tables;</code></pre>
<p>3) 쿼리 마지막에 (;)세미콜론을 붙여서 종결되었다고 표기하기도 해요.
4) 조건에 %를 넣어서 앞뒤 조건의 모든것?을 찾겠다는 것을 의미해요.</p>
<h3 id="이렇게-쿼리를-작성하면-편해요">이렇게 쿼리를 작성하면 편해요!</h3>
<p>1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기
6) SQL 쿼리 작성하기!</p>
]]></description>
        </item>
    </channel>
</rss>