<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>kyra_c.log</title>
        <link>https://velog.io/</link>
        <description>이번 주에 내가 배운 것(Week I Learned)</description>
        <lastBuildDate>Fri, 20 Aug 2021 09:37:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>kyra_c.log</title>
            <url>https://images.velog.io/images/kyra_c/profile/fe100d26-6d01-499c-8f23-323d86da896a/스크린샷 2021-05-28 오후 4.43.06.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. kyra_c.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kyra_c" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[스파르타코딩 - SQL 4주차]]></title>
            <link>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-4%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-4%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Fri, 20 Aug 2021 09:37:55 GMT</pubDate>
            <description><![CDATA[<h2 id="1-subquery">1. Subquery</h2>
<pre><code>: 쿼리 안의 쿼리라는 의미, 하위 쿼리의 결과를 상위 쿼리에서 사용하면, SQL 쿼리가 훨씬 간단하고 편하게 데이터를 얻을 수 있음.

: 하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는 것을 의미

: 안에 있는 쿼리 먼저 작동되고 그뒤에 큰 쿼리가 작동</code></pre><h3 id="1-1-where---이미-뽑아놓은거-안에-이-쿼리-안에-있니">1-1 where :  이미 뽑아놓은거 안에 이 쿼리 안에 있니?</h3>
<pre><code>+ Where은 조건문으로 Subquery의 결과를 조건에 활용하는 방식으로 유용하게 사용
+ where 필드명 in (subquery)</code></pre><p> 카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력</p>
<pre><code>SELECT user_id, name, email FROM users u 
WHERE user_id in (
    SELECT user_id FROM orders o 
    WHERE payment_method = &#39;kakaopay&#39;
)
</code></pre><blockquote>
<p><strong>쿼리 실행 순서</strong>
(1) from 실행: users 데이터를 가져와줌
(2) Subquery 실행: 해당되는 user_id의 명단을 뽑아줌
(3) where .. in 절에서 subquery의 결과에 해당되는 &#39;user_id의 명단&#39; 조건으로 필터링 해줌
(4) 조건에 맞는 결과 출력</p>
</blockquote>
<h3 id="1-2-selet--뽑을때마다-실행되게">1-2 selet : 뽑을때마다 실행되게!</h3>
<pre><code>+ Select는 결과를 출력, 기존 테이블에 함께 보고싶은 통계 데이터를 손쉽게 붙이는 것에 사용
+ select 필드명, 필드명, (subquery) from ..</code></pre><p> &#39;오늘의 다짐&#39; 좋아요의 수가, 본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지</p>
<pre><code>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><blockquote>
<p><strong>쿼리 실행 순서</strong>
(1) 밖의 select * from 문에서 데이터를 한줄한줄 출력하는 과정에서
(2) select 안의 subquery가 매 데이터 한줄마다 실행되는데
(3) 그 데이터 한 줄의 user_id를 갖는 데이터의 평균 좋아요 값을 subquery에서 계산해서
(4) 함께 출력해준다!</p>
</blockquote>
<h3 id="1-3-from내가-만든-select와-이미-있는-테이블을-join하고-싶을-때">1-3 from:내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때</h3>
<p>가장 많이 사용되는 유형!</p>
<ol>
<li>우선 유저 별 좋아요 평균</li>
<li><ul>
<li>해당 유저 별 포인트
=&gt; 포인트와 like의 상관정도를 알 수 있음.<pre><code>select pu.user_id , pu.point, a.avg_likes from point_users pu
inner join (
select user_id, ROUND(AVG(likes),1) as avg_likes from checkins c 
group by user_id 
) a on pu.user_id =a.user_id</code></pre></li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>쿼리 실행 순서</strong>
(1) 먼저 서브쿼리의 select가 실행되고,
(2) 이것을 테이블처럼 여기고 밖의 select가 실행!</p>
</blockquote>
<p>이씨 성을 가진 유저들의 평균 포인트보다 더 많은 포인트를 가지고 있는 데이터를 추출</p>
<pre><code>select * from point_users pu
where pu.point &gt; (
    select avg(point) from users u
    inner join point_users pu on pu.user_id =u.user_id 
    where u.name = &#39;이**&#39;
)</code></pre><p>둘은 동일하다 
하위는 서브쿼리안에 서브쿼리가 또 들어갈 수 있음.</p>
<pre><code>SELECT * from point_users pu 
WHERE pu.point &gt; (
    SELECT avg(point) from point_users pu 
    WHERE user_id in (
        SELECT user_id from users u 
        WHERE name = &#39;이**&#39;
    )
)</code></pre><h2 id="2-with--with-절로-더-깔끔하게-쿼리문을-정리">2. with : with 절로 더 깔끔하게 쿼리문을 정리</h2>
<p><img src="https://images.velog.io/images/kyra_c/post/d0728dc4-c7fb-4ea5-a9fc-3aa6c3d4dd84/%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%202021-08-20%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.40.35.png" alt=""></p>
<pre><code>select c.title,
       a.cnt_checkins,
       b.cnt_total,
       (a.cnt_checkins/b.cnt_total) as ratio
from
(
    select course_id, count(distinct(user_id)) as cnt_checkins from checkins
    group by course_id
) a
inner join
(
    select course_id, count(*) as cnt_total 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><p>이걸 with를 사용해서 변경
VVVVVV</p>
<pre><code>with table1 as (
    select course_id, count(distinct(user_id)) as cnt_checkins from checkins
    group by course_id
), table2 as (
    select course_id, count(*) as cnt_total from orders
    group by course_id
)

select c.title,
       a.cnt_checkins,
       b.cnt_total,
       (a.cnt_checkins/b.cnt_total) 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><h2 id="3-substring--문자열-데이터를-원하는-형태로-한번-정리">3. substring : 문자열 데이터를 원하는 형태로 한번 정리</h2>
<h3 id="3-1-substring_index--문자열-쪼개보기">3-1 substring_index : 문자열 쪼개보기</h3>
<p>이메일에서 아이디만 가져와보기</p>
<pre><code>select user_id, email, SUBSTRING_INDEX(email, &#39;@&#39;, 1) from users</code></pre><p>이메일에서 도메인만 가져와보기</p>
<pre><code>select user_id, email, SUBSTRING_INDEX(email, &#39;@&#39;, -1) from users</code></pre><h3 id="3-2-substring--문자열-일부만-출력하기">3-2 substring : 문자열 일부만 출력하기</h3>
<p>orders 테이블에서 날짜까지 출력하게 해보기</p>
<pre><code>select SUBSTRING(created_at,1,10) as date, count(*) from orders o 
group by date</code></pre><p>일별로 몇 개씩 주문이 일어났는지 살펴보기</p>
<pre><code>SELECT created_at, SUBSTRING(created_at,12,8) from orders o </code></pre><h2 id="case--경우에-따라-원하는-값을-새-필드에-출력">CASE : 경우에 따라 원하는 값을 새 필드에 출력</h2>
<p> 특정 조건에 따라, 데이터를 구분해서 정리해주고 싶을 때, CASE 라는 문법이 사용</p>
<p> 10000점보다 높은 포인트를 가지고 있으면 &#39;잘 하고 있어요!&#39;, 평균보다 낮으면 &#39;조금 더 달려주세요!&#39; 라고 표시해 주려면 어떻게 해야할까?</p>
<pre><code>select     pu.user_id, pu.point,
        (CASE when pu.point &gt; 10000 then &#39; 잘 하고 있어요!&#39;
        ELSE  &#39;조금만 더 파이팅!&#39; end) as msg
from    point_users pu </code></pre><p>포인트 보유액에 따라 다르게 표시해주기&gt; 서브쿼리를 이용해서 group by로 통계 &gt; with 절과 함께해 정리</p>
<pre><code>with table1 as (
    select     pu.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 a.lv, COUNT(*) as cnt from table1 a 
group by a.lv</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[스파르타코딩 - SQL 3주차]]></title>
            <link>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Mon, 09 Aug 2021 09:57:30 GMT</pubDate>
            <description><![CDATA[<p>코린이의 SQL 3주차</p>
<h2 id="1-join">1. Join</h2>
<p>   : Join을 사용하면, 이렇게 한 눈에 두 개의 테이블을 연결할 수 있음.
   : SQL의 Join은 엑셀의 vlookup 기능과 동일함</p>
<blockquote>
</blockquote>
<p>Join이란?
두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미해요
예) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어요!</p>
<h4 id="1-1-left-join">1-1 Left Join</h4>
<p>  <img src="https://images.velog.io/images/kyra_c/post/3f7ee40e-8b1c-4d23-9442-b9bf28987ba9/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.27.31.png" alt="">
   두 집합 사이의 관계</p>
<pre><code>select * from users u
left join point_users p
on u.user_id = p.user_id</code></pre><p><img src="https://images.velog.io/images/kyra_c/post/7dba70e8-2d8c-4b00-9a18-db299f04f4b7/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.29.44.png" alt="">
    꽉찬 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재해서 연결한 경우
    비어있는 데이터: 해당 데이터의 user_id 필드값이 point_users 테이블에 존재하지 않는 경우</p>
<h4 id="1-2-inner-join">1-2 Inner Join</h4>
<p>  <img src="https://images.velog.io/images/kyra_c/post/6cea90cf-6381-4efe-a70f-08385be091f2/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.28.12.png" alt="">
   두 테이블의 교집합을 이야기</p>
<pre><code>select * from users u
inner join point_users p
on u.user_id = p.user_id;</code></pre><p>   여기서는 비어있는 필드가 있는 데이터가 없음. 그 이유는, 같은 user_id를 두 테이블에서 모두 가지고 있는 데이터만 출력했기 때문</p>
<h4 id="join-연습">Join 연습</h4>
<p> inner join이 좀더 쉬우니 inner join 실습 후 left join (순서가 중요) 하는게 좋음</p>
<p>연습1</p>
<pre><code> //orders 테이블에 users 테이블 연결해보기

SELECT * FROM orders o 
inner join users u on o.user_id = u.user_id </code></pre><p>  <img src="https://images.velog.io/images/kyra_c/post/ad159a67-ca62-4612-89ce-f6b64814b5b1/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.35.37.png" alt=""></p>
<p>연습2</p>
<pre><code>//orders 테이블에 users 테이블 연결해보기

SELECT * FROM checkins c 
inner join users u on c.user_id = u.user_id </code></pre><p>  <img src="https://images.velog.io/images/kyra_c/post/090e03b7-0c62-46b3-ba40-215a3a8dcb36/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.39.43.png" alt=""></p>
<p>연습3</p>
<pre><code>//enrolleds 테이블에 courses 테이블 연결해보기

SELECT * FROM enrolleds e 
inner join courses c on c.course_id = c.course_id </code></pre><p><img src="https://images.velog.io/images/kyra_c/post/0d3b4122-7b38-4455-9e89-95ce61acb707/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.39.24.png" alt=""></p>
<blockquote>
<p>위 쿼리가 실행되는 순서: from → join → select</p>
</blockquote>
<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>
</blockquote>
<blockquote>
<p>항상 from에 들어간 테이블을 기준으로, 다른 테이블이 붙는다고 생각하자</p>
</blockquote>
<h2 id="2-join--이전문법-활용">2. Join + 이전문법 활용</h2>
<p><strong>- checkins 테이블에 courses 테이블 연결해서 통계치 내보기</strong></p>
<pre><code>SELECT c1.course_id, c2.title, COUNT(*) as cnt from checkins c1
inner join courses c2 on c1.course_id =c2.course_id 
group by c1.course_id </code></pre><p>  <img src="https://images.velog.io/images/kyra_c/post/cb60f00a-b0d5-473a-a042-f5f0b5375dce/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.47.39.png" alt=""></p>
<p><strong>- point_users 테이블에 users 테이블 연결해서 순서대로 정렬해보기</strong></p>
<pre><code>SELECT pu.user_id, u.name, u.email, pu.point FROM point_users pu 
inner join users u on pu.user_id = u.user_id 
order BY pu.point DESC 
코드를 입력하세요</code></pre><p><img src="https://images.velog.io/images/kyra_c/post/08d2c36a-71a8-47d1-bcd1-a27d98feba93/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.51.00.png" alt=""></p>
<p><strong>- orders 테이블에 users 테이블 연결해서 통계치 내보기</strong></p>
<pre><code>select u.name , COUNT(*) as cnt from orders o 
inner join users u on o.user_id = u.user_id
WHERE o.email LIKE &quot;%naver.com&quot;
GROUP BY u.name</code></pre><p><img src="https://images.velog.io/images/kyra_c/post/fe4d6065-7d7e-4bc5-a58d-69b1affc8fa3/%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%202021-08-09%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.53.40.png" alt=""></p>
<blockquote>
<p>위 쿼리가 실행되는 순서: from → join → where → group by → select</p>
</blockquote>
<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>
</blockquote>
<blockquote>
<p>Join의 실행 순서는 항상 from 과 붙어다닌다고 생각하자</p>
</blockquote>
<h2 id="3-union">3. Union</h2>
<p>; Select를 두 번 할 게 아니라, 한번에 모아서 보고싶은 경우 쓴다
<img src="https://images.velog.io/images/kyra_c/post/d66056e2-167b-4dbe-92b4-8ab87e170f8d/%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%202021-08-12%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.51.58.png" alt=""></p>
<p><img src="https://images.velog.io/images/kyra_c/post/4a9ce5bd-c8a8-47e8-b1f7-8a1577ce4516/Untitled.png" alt=""></p>
<pre><code>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><p>V</p>
<pre><code>(
    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><p>union을 사용하면 내부 정렬이 먹지 않는다. 이 때 유용한 방법이 있음. 바로, SubQuery(서브쿼리) 다음주에 배움</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[스파르타코딩 - SQL 2주차]]></title>
            <link>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Wed, 04 Aug 2021 10:48:05 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/kyra_c/post/1e0ed51d-630a-483c-81e5-cd36a59fd6c4/%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%202021-08-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.49.01.png" alt=""></p>
<p>코린이의 SQL 2주차</p>
<h2 id="1-group-by">1. Group by</h2>
<p>: 동일한 범주의 데이터를 묶어주어, 통계를 내주기</p>
<h3 id="1-1-프로세스">1-1 프로세스</h3>
<p>  <em>문제 : 성씨별로 몇 명이 회원이 있는지 구하기</em></p>
<h4 id="step1--전체데이터를-먼저-불러본다">step1 : 전체데이터를 먼저 불러본다</h4>
<pre><code> SELECT * FROM users
group by name </code></pre><h4 id="step2--동일한-범주의-데이터를-어떻게-묶을건지-고려-후-데이터-선택-수정">step2 : 동일한 범주의 데이터를 어떻게 묶을건지 고려 후 데이터 선택 수정</h4>
<pre><code> SELECT name, COUNT(*) FROM users
group by name </code></pre><p> <strong>쿼리가 실행되는 순서: from → group by → select</strong></p>
<h3 id="1-2-범주의-갯수-구하기--전주에-배운-where-과-값이-같은지-비교확인">1-2 범주의 갯수 구하기 + 전주에 배운 where 과 값이 같은지 비교/확인</h3>
<p> 주차별 &#39;오늘의 다짐&#39; 개수 구하기</p>
<pre><code>&gt; 테이블로 값만 카운트 보여주기
SELECT week, COUNT(*) FROM checkins
group by week


&gt; 조건의 해당 값 카운트 모두 보여주기
SELECT * FROM checkins
where week =1</code></pre><h3 id="1-3-최솟값-최대값-평균값-합계">1-3 최솟값/ 최대값/ 평균값/ 합계</h3>
<h4 id="최소값--min최솟값을-알고-싶은-필드명">최소값 : min(최솟값을 알고 싶은 필드명)</h4>
<pre><code>select week, min(likes) from checkins
group by week</code></pre><h4 id="최대값--max최대값을-알고-싶은-필드명">최대값 : max(최대값을 알고 싶은 필드명)</h4>
<pre><code>select week, max(likes) from checkins
group by week</code></pre><h4 id="평균값--avg평균값을-알고-싶은-필드명">평균값 : avg(평균값을 알고 싶은 필드명)</h4>
<pre><code>select week, avg(likes) from checkins
group by week</code></pre><blockquote>
<p>+참고
  소수점 반올림 : round(avg(평균값을 알고 싶은 필드명), 보여주고자 하는 소수점의 자리수)</p>
</blockquote>
<h4 id="합계--sum-합계를-알고-싶은-필드명">합계 : sum (합계를 알고 싶은 필드명)</h4>
<pre><code>select week, sum(likes) from checkins
group by week</code></pre><h3 id="1-4-where-과-함께-쓰기">1-4 where 과 함께 쓰기</h3>
<p>  &#39;신&#39; 씨를 가진 데이터만 불러와서 개수 &gt; group by를 사용해서 &#39;신&#39;씨를 가진 데이터가 몇 개인지</p>
<pre><code>SELECT name, COUNT(*) FROM users
WHERE name = &#39;신**&#39;
GROUP by name </code></pre><p>*<em>쿼리가 실행되는 순서: from → where → select → group by *</em></p>
<blockquote>
</blockquote>
<h4 id="퀴즈">퀴즈</h4>
<ol>
<li>앱개발 종합반의 결제수단별 주문건수 세어보기<pre><code>SELECT payment_method, count(*) FROM orders
group by payment_method </code></pre></li>
<li>Gmail 을 사용하는 성씨별 회원수 세어보기<pre><code>SELECT name, count(*) FROM users
where email LIKE &#39;%@gmail.com&#39;
group by name</code></pre></li>
<li>course_id별 &#39;오늘의 다짐&#39;에 달린 평균 like 개수 구해보기<pre><code>SELECT course_id, ROUND(avg(likes),1) FROM checkins
group by course_id </code></pre><blockquote>
</blockquote>
</li>
</ol>
<h2 id="2-order-by">2. order by</h2>
<p>: 깔끔한 정렬이 필요할때 사용</p>
<h3 id="2-1-오름차순-정렬-asc">2-1 오름차순 정렬 (asc)</h3>
<h4 id="step1--전체데이터를-먼저-불러본다-1">step1 : 전체데이터를 먼저 불러본다</h4>
<pre><code> SELECT * FROM users
group by name </code></pre><h4 id="step2--동일한-범주의-데이터를-어떻게-묶을건지-고려후-데이터-선택-수정">step2 : 동일한 범주의 데이터를 어떻게 묶을건지 고려후 데이터 선택 수정</h4>
<pre><code> SELECT name, COUNT(*) FROM users
group by name </code></pre><h4 id="step3--결과값을-보기좋게-정렬">step3 : 결과값을 보기좋게 정렬</h4>
<p> 아무것도 적지 않으면 기본적으로 오름차순</p>
<pre><code> SELECT name, COUNT(*) FROM users
group by name 
order by count(*) </code></pre><p>  <strong>쿼리가 실행되는 순서: from → group by → select → order by</strong></p>
<h3 id="2-2-내림차순-정렬-desc">2-2 내림차순 정렬 (desc)</h3>
<p> step1
 step2</p>
<h4 id="step3--결과값을-내림차순-정렬">step3 : 결과값을 내림차순 정렬</h4>
<p>  영단어 descending의 약자</p>
<pre><code> SELECT name, COUNT(*) FROM users
group by name 
order by count(*) desc</code></pre><h3 id="2-3-문자열-정렬">2-3 문자열 정렬</h3>
<h4 id="--알파벳으로-정렬">- 알파벳으로 정렬</h4>
<pre><code>select * from users
order by email</code></pre><h4 id="--가나다순으로-정렬">- 가나다순으로 정렬</h4>
<pre><code>select * from users
order by name;</code></pre><h4 id="--시간기준으로-정렬">- 시간기준으로 정렬</h4>
<pre><code>select * from users
order by created_at desc;</code></pre><h2 id="3-where와-함께-group-by--order-by-쓰기">3. Where와 함께 group by + order by 쓰기</h2>
<p> <em>*<em>Where절로 조건이 하나 추가되고, 그 이후에 Group by, Order by가 실행되는 것!
 *</em></em></p>
<h4 id="step1-테이블-전체-불러보기">step1 테이블 전체 불러보기</h4>
<pre><code>select*from oreders</code></pre><h4 id="step2-잘라서">step2 잘라서</h4>
<pre><code>select*from oreders
where course_title= &#39;웹개발 종합반&#39;
</code></pre><h4 id="step3-묶어서">step3 묶어서</h4>
<pre><code> select*from oreders
 where course_title= &#39;웹개발 종합반&#39;
 group by payment_method</code></pre><h4 id="step4-통계내고">step4 통계내고</h4>
<pre><code>select payment_method, count(*) from orders
 where course_title= &#39;웹개발 종합반&#39;
 group by payment_method
</code></pre><h4 id="step5-정렬한다">step5 정렬한다</h4>
<pre><code> select payment_method, count(*) from orders
 where course_title= &#39;웹개발 종합반&#39;
 group by payment_method
 order by count(*)</code></pre><h2 id="4-alias">4. Alias</h2>
<p>: 별칭붙여주기 (길어지는 쿼리를 짧게)</p>
<p>orders 테이블을 o &gt; 테이블 o 안에 코스타이틀(o.course_title)
count(*) 를 as cnt &gt; cnt 필드명으로 출력</p>
<pre><code>SELECT payment_method, count(*) as cnt FROM orders o 
where o.course_title =&#39;앱개발 종합반&#39;
group by payment_method</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[스파르타코딩 - SQL 1주차]]></title>
            <link>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@kyra_c/%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80%EC%BD%94%EB%94%A9-SQL-1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Mon, 26 Jul 2021 01:49:43 GMT</pubDate>
            <description><![CDATA[<p>*<em>맥의 실행 단축키 : control + enter *</em></p>
<h3 id="1-select">1. select</h3>
<p> : 데이터베이스에서 &#39;데이터를 선택해서 가져오겠다&#39;는 의미
  ㄴ 1. 어떤 테이블에서 2. 어떤 필드의 데이터를 가져올지 로 구성</p>
<ul>
<li>시작 전 show tables로 모든 데이터베이스 테이블을 확인</li>
</ul>
<pre><code>show tables</code></pre><ul>
<li>특정 테이블 데이터를 가져와보기</li>
</ul>
<pre><code>select * from orders;</code></pre><h3 id="2-where">2. where</h3>
<p> : select 데이터에 가져올 데이터에 조건을 걸어주는 것</p>
<pre><code>select * from orders
where payment_method = &quot;kakaopay&quot;;</code></pre><ul>
<li>~이상인 데이터 뽑기</li>
</ul>
<pre><code>select * from point_users
where point &gt; 20000;</code></pre><ul>
<li>특정 문자열의 데이터 뽑기</li>
</ul>
<pre><code>select * from users
where name = &quot;황**&quot;;</code></pre><ul>
<li>여러 조건의 데이터 합성(?) 해서 뽑기</li>
</ul>
<pre><code>select * from orders
where course_title = &quot;웹개발 종합반&quot; and payment_method = &quot;CARD&quot;;</code></pre><blockquote>
<p><strong>쿼리 작성하는 tip</strong></p>
<p>1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 조건을 걸 필드를 찾기
5) select * from 테이블명 where 조건 이렇게 쿼리 완성!</p>
</blockquote>
<h3 id="3-where-절과-자구-같이-쓰는-문법">3. where 절과 자구 같이 쓰는 문법</h3>
<p>3-1) 같지 않음 <strong>!=</strong></p>
<pre><code>select * from orders
where course_title != &quot;웹개발 종합반&quot;;</code></pre><p>3-2) 범위 조건 <strong>between ~ and ~</strong></p>
<pre><code>select * from orders
where created_at between &quot;2020-07-13&quot; and &quot;2020-07-15&quot;;</code></pre><p>3-3) 포함 조건 <strong>in (~, ~, )</strong></p>
<pre><code>select * from checkins 
where week in (1, 3);</code></pre><p>3-4) 패턴 조건 like &#39;%~~&#39;</p>
<blockquote>
<p><strong>Like의 다양한 사용법</strong>
Like는 패턴으로 조건을 거는 문법으로, 사용법이 아주 다양하답니다! 
     - where email like &#39;a%&#39;: email 필드값이 a로 시작하는 모든 데이터
    - where email like &#39;%a&#39; email 필드값이 a로 끝나는 모든 데이터
    - where email like &#39;%co%&#39; email 필드값에 co를 포함하는 모든 데이터
    - where email like &#39;a%o&#39; email 필드값이 a로 시작하고 o로 끝나는 모든 데이터
    이외에도 여러 문법이 있는데, 그때그때 필요한 것을 찾아서 쓰면 됩니다!
    같이 한번 찾아볼까요? (&#39;how to use like in sql&#39; 구글링!)  </p>
</blockquote>
<pre><code>select * from users 
where email like &#39;%daum.net&#39;;</code></pre><h3 id="4-이외-문법">4. 이외 문법</h3>
<p>4-1) 일부 데이터만 가져오기 <strong>Limit</strong>
: 데이터를 모두 불러오기에는 너무 크고, 데이터 구성방식만 보고싶을때 사용하면 좋음</p>
<pre><code>select * from orders 
where payment_method = &quot;kakaopay&quot;
limit 5;</code></pre><p>4-2) 중복 데이터 제외하고 가져오기 <strong>Distinct</strong></p>
<pre><code>select distinct(payment_method) from orders;</code></pre><p>4-3) <strong>Count</strong></p>
<pre><code>select count(*) from orders</code></pre><ul>
<li>중복을 제외한 값 세기</li>
</ul>
<pre><code>select distinct(name) from users;</code></pre>]]></description>
        </item>
    </channel>
</rss>