<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>isnotnull.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 31 Dec 2023 12:55:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>isnotnull.log</title>
            <url>https://velog.velcdn.com/images/_hansohyun/profile/360a5908-ea9f-4d62-b9f0-4172f3f778d6/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. isnotnull.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/_hansohyun" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[프로그래머스] 보호소에서 중성화한 동물]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%B3%B4%ED%98%B8%EC%86%8C%EC%97%90%EC%84%9C-%EC%A4%91%EC%84%B1%ED%99%94%ED%95%9C-%EB%8F%99%EB%AC%BC</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%B3%B4%ED%98%B8%EC%86%8C%EC%97%90%EC%84%9C-%EC%A4%91%EC%84%B1%ED%99%94%ED%95%9C-%EB%8F%99%EB%AC%BC</guid>
            <pubDate>Sun, 31 Dec 2023 12:55:55 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/9d39b43b-55da-4004-ad3c-e028b8f5f920/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/75a3fb3a-56fa-4f98-b5e0-e4fb6441ff1d/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/39dc41d6-0095-47d3-97e6-a245732fcd31/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 그룹별 조건에 맞는 식당 목록 출력하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B7%B8%EB%A3%B9%EB%B3%84-%EC%A1%B0%EA%B1%B4%EC%97%90-%EB%A7%9E%EB%8A%94-%EC%8B%9D%EB%8B%B9-%EB%AA%A9%EB%A1%9D-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B7%B8%EB%A3%B9%EB%B3%84-%EC%A1%B0%EA%B1%B4%EC%97%90-%EB%A7%9E%EB%8A%94-%EC%8B%9D%EB%8B%B9-%EB%AA%A9%EB%A1%9D-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 31 Dec 2023 12:48:29 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/9f390796-0892-4197-b43a-570bb6c5780e/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/ee463e20-7652-4ca6-ab6c-9ec2cfd5501e/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/ab3dba9b-9f9b-46bb-bb77-2cfd8902e9a3/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 5월 식품들의 총매출 조회하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-5%EC%9B%94-%EC%8B%9D%ED%92%88%EB%93%A4%EC%9D%98-%EC%B4%9D%EB%A7%A4%EC%B6%9C-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-5%EC%9B%94-%EC%8B%9D%ED%92%88%EB%93%A4%EC%9D%98-%EC%B4%9D%EB%A7%A4%EC%B6%9C-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 31 Dec 2023 11:58:40 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/e28fe007-891a-4e22-ac92-ebed66cbcfd9/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/f4d1b244-be92-44c6-86bf-f3e71b692d2f/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/3fa1ce39-8192-4bd8-bded-ea262fe7852e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8A%B9%EC%A0%95-%EA%B8%B0%EA%B0%84%EB%8F%99%EC%95%88-%EB%8C%80%EC%97%AC-%EA%B0%80%EB%8A%A5%ED%95%9C-%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%A4%EC%9D%98-%EB%8C%80%EC%97%AC%EB%B9%84%EC%9A%A9-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8A%B9%EC%A0%95-%EA%B8%B0%EA%B0%84%EB%8F%99%EC%95%88-%EB%8C%80%EC%97%AC-%EA%B0%80%EB%8A%A5%ED%95%9C-%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%A4%EC%9D%98-%EB%8C%80%EC%97%AC%EB%B9%84%EC%9A%A9-%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 31 Dec 2023 11:51:30 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/a404a5f7-ce58-4490-82c8-cd064d303ac4/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/bca20eeb-e1d6-4784-9aed-33ee913bf96a/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/588f61a7-6ab1-43e2-9092-c570cc63f827/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p>미완</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 주문량이 많은 아이스크림들 조회하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A3%BC%EB%AC%B8%EB%9F%89%EC%9D%B4-%EB%A7%8E%EC%9D%80-%EC%95%84%EC%9D%B4%EC%8A%A4%ED%81%AC%EB%A6%BC%EB%93%A4-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A3%BC%EB%AC%B8%EB%9F%89%EC%9D%B4-%EB%A7%8E%EC%9D%80-%EC%95%84%EC%9D%B4%EC%8A%A4%ED%81%AC%EB%A6%BC%EB%93%A4-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 31 Dec 2023 11:44:04 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/1cb3e101-387a-48ce-aa0b-58367413dd3b/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/67c635e7-ba7b-45c5-97a9-f391272cc4f2/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/457680e1-93dd-4215-90c8-7d1afbd15a57/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%9D%ED%92%88%EB%B6%84%EB%A5%98%EB%B3%84-%EA%B0%80%EC%9E%A5-%EB%B9%84%EC%8B%BC-%EC%8B%9D%ED%92%88%EC%9D%98-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%9D%ED%92%88%EB%B6%84%EB%A5%98%EB%B3%84-%EA%B0%80%EC%9E%A5-%EB%B9%84%EC%8B%BC-%EC%8B%9D%ED%92%88%EC%9D%98-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 31 Dec 2023 11:37:04 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/c95702ab-bffe-4fc3-bffc-36ba82e062bc/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/0936bb8a-7d59-4303-a744-0b8c5897c682/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 저자 별 카테고리 별 매출액 집계하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%80%EC%9E%90-%EB%B3%84-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%B3%84-%EB%A7%A4%EC%B6%9C%EC%95%A1-%EC%A7%91%EA%B3%84%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%80%EC%9E%90-%EB%B3%84-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC-%EB%B3%84-%EB%A7%A4%EC%B6%9C%EC%95%A1-%EC%A7%91%EA%B3%84%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 31 Dec 2023 11:29:47 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/f6d081b9-6437-43ad-a7f7-1c297d48fd11/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/2f493467-8bec-47bc-8545-3eb0c0140b75/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/f0d7bb7e-1f4d-4906-8398-959787b7494c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8C%80%EC%97%AC-%ED%9A%9F%EC%88%98%EA%B0%80-%EB%A7%8E%EC%9D%80-%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%A4%EC%9D%98-%EC%9B%94%EB%B3%84-%EB%8C%80%EC%97%AC-%ED%9A%9F%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0-pfssd3ym</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8C%80%EC%97%AC-%ED%9A%9F%EC%88%98%EA%B0%80-%EB%A7%8E%EC%9D%80-%EC%9E%90%EB%8F%99%EC%B0%A8%EB%93%A4%EC%9D%98-%EC%9B%94%EB%B3%84-%EB%8C%80%EC%97%AC-%ED%9A%9F%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0-pfssd3ym</guid>
            <pubDate>Sat, 30 Dec 2023 11:06:24 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/14a211d9-80ee-4599-a7d6-88db39ce9ced/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/1b37fa17-da4c-4723-a215-d488c6f5be03/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 취소되지 않은 진료 예약 조회하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B7%A8%EC%86%8C%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EC%A7%84%EB%A3%8C-%EC%98%88%EC%95%BD-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B7%A8%EC%86%8C%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EC%A7%84%EB%A3%8C-%EC%98%88%EC%95%BD-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sat, 30 Dec 2023 10:59:30 GMT</pubDate>
            <description><![CDATA[<h1 id="문제설명">문제설명</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/def1af9d-f1f9-4f26-96ca-cb2ee531165c/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/99556fa6-a710-48df-8aa2-6e3870dd3279/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/86813726-1f3e-4899-9ad6-574ff9e52258/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%8F%99%EC%B0%A8-%EB%8C%80%EC%97%AC-%EA%B8%B0%EB%A1%9D-%EB%B3%84-%EB%8C%80%EC%97%AC-%EA%B8%88%EC%95%A1-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%8F%99%EC%B0%A8-%EB%8C%80%EC%97%AC-%EA%B8%B0%EB%A1%9D-%EB%B3%84-%EB%8C%80%EC%97%AC-%EA%B8%88%EC%95%A1-%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sat, 30 Dec 2023 10:49:27 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/e9c16663-d554-4abf-83d0-911cb3b0aeff/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/b661d007-0f29-4a01-b25e-97ff8f4a3310/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/d527096c-38a0-4ffa-b514-c1c5e27ae198/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p>미완</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 대여 기록이 존재하는 자동차 리스트 구하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8C%80%EC%97%AC-%EA%B8%B0%EB%A1%9D%EC%9D%B4-%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94-%EC%9E%90%EB%8F%99%EC%B0%A8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%95%98%EA%B8%B0-9p04e1l2</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8C%80%EC%97%AC-%EA%B8%B0%EB%A1%9D%EC%9D%B4-%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94-%EC%9E%90%EB%8F%99%EC%B0%A8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%95%98%EA%B8%B0-9p04e1l2</guid>
            <pubDate>Sat, 30 Dec 2023 10:36:38 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/a7333050-a6ac-41d8-8960-c0ed6b9a34c8/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/c3a84d5e-7259-41fc-b4fd-ab3018d9db69/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/5161a617-5803-4312-8648-cd96b54930ec/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 조건별로 분류하여 주문상태 출력하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A1%B0%EA%B1%B4%EB%B3%84%EB%A1%9C-%EB%B6%84%EB%A5%98%ED%95%98%EC%97%AC-%EC%A3%BC%EB%AC%B8%EC%83%81%ED%83%9C-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0-jd37uegm</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A1%B0%EA%B1%B4%EB%B3%84%EB%A1%9C-%EB%B6%84%EB%A5%98%ED%95%98%EC%97%AC-%EC%A3%BC%EB%AC%B8%EC%83%81%ED%83%9C-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0-jd37uegm</guid>
            <pubDate>Sat, 30 Dec 2023 10:23:04 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/ea112af2-c22a-4b4e-ac30-7987ec98fe6f/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/c20b9f10-f86b-46b8-b2f2-2782af758e76/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[25일차] SQL을 이용한 데이터 분석]]></title>
            <link>https://velog.io/@_hansohyun/25%EC%9D%BC%EC%B0%A8-SQL%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@_hansohyun/25%EC%9D%BC%EC%B0%A8-SQL%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Sun, 24 Dec 2023 02:33:02 GMT</pubDate>
            <description><![CDATA[<h1 id="트랜잭션">트랜잭션</h1>
<h2 id="트랜잭션이란-1">트랜잭션이란 (1)</h2>
<ul>
<li>Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는
방법<ul>
<li>이는 DDL이나 DML 중 레코드를 수정/추가/삭제한 것에만 의미가 있음<ul>
<li>SELECT에는 트랜잭션을 사용할 이유가 없음</li>
<li>BEGIN과 END 혹은 BEGIN과 COMMIT 사이에 해당 SQL들을 사용</li>
<li>ROLLBACK</li>
</ul>
</li>
</ul>
</li>
<li>은행계좌이체가아주좋은예<ul>
<li>계좌 이체: 인출과 입금의 두 과정으로 이뤄짐</li>
<li>만일 인출은 성공했는데 입금이 실패한다면?</li>
<li>이 두 과정은 동시에 성공하던지 실패해야함 ➡️ Atomic하다는 의미</li>
<li>이런 과정들을 트랜잭션으로 묶어주어야함</li>
<li>조회만 한다면 이는 트랜잭션으로 묶일 이유가 없음<h2 id="트랜잭션이란-2">트랜잭션이란 (2)</h2>
<pre><code>BEGIN;
A의 계좌로부터 인출; ➡️ 이 명령어들은 마치 하나의 명령어처럼 처리됨
B의 계좌로 입금; ➡️ 다 성공하던지, 다 실패하던지
END;</code></pre></li>
</ul>
</li>
<li>END와 COMMIT은 동일</li>
<li>만일 BEGIN전의 상태로 돌아가고 싶다면 ROLLBACK 실행</li>
<li>이 동작은 commit mode에 따라 달라짐<h2 id="트랜잭션-커밋-모드-autocommit">트랜잭션 커밋 모드: autocommit</h2>
</li>
<li>autocommit = True<ul>
<li>모든 레코드 수정/삭제/추가 작업이 기본적으로 바로 데이터베이스에 쓰여짐. 이를 커밋(Commit)된다고 함</li>
<li>만일 특정 작업을 트랜잭션으로 묶고 싶다면 BEGIN과 END(COMMIT)/ROLLBACK으로 처리</li>
</ul>
</li>
<li>autocommit = False<ul>
<li>모든 레코드 수정/삭제/추가 작업이 COMMIT 호출될 때까지 커밋되지 않음<h2 id="트랜잭션-방식">트랜잭션 방식</h2>
</li>
</ul>
</li>
<li>Google Colab의 트랜잭션<ul>
<li>기본적으로 모든 SQL statement가 바로 커밋됨 (autocommit=True)</li>
<li>이를 바꾸고 싶다면 BEGIN;END; 혹은 BEGIN;COMMIT을 사용 (혹은 ROLLBACK;)</li>
</ul>
</li>
<li>psycopg2의 트랜잭션<ul>
<li>autocommit이라는 파라미터로 조절가능</li>
<li>autocommit=True가 되면 기본적으로 PostgreSQL의 커밋 모드와 동일</li>
<li>autocommit=False가 되면 커넥션 객체의 .commit()과 .rollback()함수로 트랜잭션 조절 가능<h2 id="delete-from-vs-truncate">DELETE FROM vs TRUNCATE</h2>
</li>
</ul>
</li>
<li>DELETE FROM table_name (not DELETE * FROM)<ul>
<li>테이블에서 모든 레코드 삭제</li>
<li>vs DROP TABLE table_name</li>
<li>WHERE을 사용해 특정 레코드만 삭제 가능<ul>
<li>DELETE FROM raw_data.user_session_channel WHERE channel = ‘Google&#39;</li>
</ul>
</li>
</ul>
</li>
<li>TRUNCATE table_name도 테이블에서 모든 레코드 삭제<ul>
<li>DELETE FROM은 속도가 느림</li>
<li>TRUNCATE이 전체 테이블의 내용 삭제시에 유리</li>
<li>단점 존재<ul>
<li>TRUNCATE는 WHERE절을 지원하지 않음<ul>
<li>TRUNCATE는 Transaction을 지원하지 않음<h1 id="기타-고급-문법">기타 고급 문법</h1>
<h2 id="union-except-intersect">UNION, EXCEPT, INTERSECT</h2>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>UNION (합집합)<ul>
<li>여러개의 테이블들이나 SELECT 결과를 하나의 결과로 합쳐줌</li>
<li>UNION vs. UNION ALL<ul>
<li>UNION은 중복을 제거 </li>
</ul>
</li>
</ul>
</li>
<li>EXCEPT (MINUS)<ul>
<li>하나의 SELECT 결과에서 다른 SELECT 결과를 빼주는 것이 가능 </li>
</ul>
</li>
<li>INTERSECT (교집합)<ul>
<li>여러 개의 SELECT문에서 같은 레코드들만 찾아줌<h2 id="coalesce-nullif">COALESCE, NULLIF</h2>
</li>
</ul>
</li>
<li>COALESCE(Expression1, Expression2, ...):<ul>
<li>첫번째 Expression부터 값이 NULL이 아닌 것이 나오면 그 값을 리턴하고 모두 NULL이면 NULL을 리턴한다.</li>
<li>NULL값을 다른 값으로 바꾸고 싶을 때 사용한다.</li>
</ul>
</li>
<li>NULLIF(Expression1, Expression2):<ul>
<li>Expression1과 Expression2의 값이 같으면 NULL을 리턴한다<h2 id="listagg-1">LISTAGG (1)</h2>
</li>
</ul>
</li>
<li>GROUP BY에서 사용되는 Aggregate 함수 중의 하나</li>
<li>사용자 ID별로 채널 순서대로 리스트<pre><code>SELECT 
userid, LISTAGG(channel) WITHIN GROUP (ORDER BY ts) channels 
FROM raw_data.user_session_channel usc
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid GROUP BY 1
LIMIT 10;</code></pre>[결과] 
68YoutubeGoogleInstagramYoutubeInstagramInstagramInstagramOrganicInstagramYoutube...<h2 id="listagg-2">LISTAGG (2)</h2>
<pre><code>SELECT
userid,LISTAGG(channel, &#39;-&gt;&#39;) WITHIN GROUP (ORDER BY ts) channels 
FROM raw_data.user_session_channel usc
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid GROUP BY 1
LIMIT 10;</code></pre>[결과] 68 Youtube-&gt;Google-&gt;Instagram-&gt;Youtube-&gt;Instagram-&gt;Instagram-&gt;Instagram-&gt;...<h2 id="window">WINDOW</h2>
</li>
<li>Syntax:<ul>
<li>function(expression) OVER ( [ PARTITION BY expression] [ ORDER BY expression ] )</li>
</ul>
</li>
<li>Useful functions : <ul>
<li>ROW_NUMBER, FIRST_VALUE, LAST_VALUE, LAG</li>
<li>Math functions: AVG, SUM, COUNT, MAX, MIN, MEDIAN, NTH_VALUE<h2 id="window---lag-함수">WINDOW - LAG 함수</h2>
</li>
</ul>
</li>
<li>어떤 사용자 세션에서 시간순으로 봤을 때<ul>
<li>앞 세션의 채널이 무엇인지 알고 싶을 때</li>
<li>다음 세션의 채널이 무엇인지 알고 싶을 때</li>
<li>이전 채널 찾기<pre><code>SELECT usc.*, st.ts, LAG(channel,1) OVER (PARTITION BY userId ORDER BY ts) prev_channel 
FROM raw_data.user_session_channel usc
JOIN raw_data.session_timestamp st ON usc.sessionid = st.sessionid
ORDER BY usc.userid, st.ts </code></pre><h2 id="json-parsing-functions">JSON Parsing Functions</h2>
</li>
</ul>
</li>
<li><a href="https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html">https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html</a></li>
<li>JSON의 포맷을 이미 아는 상황에서만 사용 가능한 함수<ul>
<li>JSON String을 입력으로 받아 특정 필드의 값 추출 가능 (nested 구조 지원)</li>
</ul>
</li>
<li>예제<ul>
<li>SELECT JSON_EXTRACT_PATH_TEXT(&#39;{&quot;f2&quot;:{&quot;f3&quot;:&quot;1&quot;},&quot;f4&quot;:{&quot;f5&quot;:&quot;99&quot;,&quot;f6&quot;:&quot;star&quot;}}&#39;,&#39;f4&#39;, &#39;f6&#39;);<img src="https://velog.velcdn.com/images/_hansohyun/post/956ff4af-ca24-4a64-b285-a7d79d6a4fc5/image.png" alt=""><blockquote>
<p>이 글에서 소개된 내용은 프로그래머스 데이터분석1기에서 진행된 한기용 강사님의 온라인 강의를 참조하여 작성되었습니다.</p>
</blockquote>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[24일차] SQL을 이용한 데이터 분석]]></title>
            <link>https://velog.io/@_hansohyun/24%EC%9D%BC%EC%B0%A8-SQL%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@_hansohyun/24%EC%9D%BC%EC%B0%A8-SQL%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Fri, 22 Dec 2023 08:42:44 GMT</pubDate>
            <description><![CDATA[<h1 id="join">JOIN</h1>
<h2 id="join이란">JOIN이란</h2>
<p>SQL조인은두개혹은그이상의테이블들을공통필드를가지고머지하는데 사용된다. 이는 스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합하는데 사용된다.  </p>
<p>왼쪽 테이블을 LEFT라고 하고 오른쪽 테이블을 RIGHT이라고 하자. JOIN의 결과는 방식에 상관없이 양쪽의 필드를 모두 가진 새로운 테이블을 만들어내게 된다. </p>
<p>조인의 방식에 따라 다음 두 가지가 달라진다:</p>
<ol>
<li>어떤 레코드들이 선택되는지?</li>
<li>어떤 필드들이 채워지는지?</li>
</ol>
<img src=https://theartofpostgresql.com/img/SQL-JOINS-Example-0.png>

<h2 id="join-문법">JOIN 문법</h2>
<pre><code>SELECT A.*, B.*
FROM raw_data.table1 A
____ JOIN raw_data.table2 B ON A.key1 = B.key1 and A.key2 = B.key2 WHERE A.ts &gt;= &#39;2019-01-01&#39;;
INNER, FULL, LEFT, RIGHT, CROSS</code></pre><p>밑줄친 곳에 들어갈 코드 : INNER, FULL, LEFT, RIGHT, CROSS</p>
<h2 id="join시-고려해야할-점">JOIN시 고려해야할 점</h2>
<ul>
<li>먼저 중복 레코드가 없고 Primary Key의 uniqueness가 보장됨을 체크<ul>
<li>아주 중요함!!!</li>
</ul>
</li>
<li>조인하는 테이블들간의 관계를 명확하게 정의<ul>
<li>One to one<ul>
<li>완전한 one to one: user_session_channel &amp; session_timestamp</li>
<li>한쪽이 부분집합이 되는 one to one: user_session_channel &amp; session_transaction</li>
</ul>
</li>
<li>One to many? (order vs order_items)<ul>
<li>이 경우 중복이 더 큰 문제됨 -&gt; 증폭!!    </li>
</ul>
</li>
<li>Many to one?<ul>
<li>방향만 바꾸면 One to many로 보는 것과 사실상 동일.</li>
</ul>
</li>
<li>Many to many?<ul>
<li>이런 경우는 많지 않으며 이는 one to one이나 one to many로 바꾸는 것이 가능하다면 변환하여 조인하는 것이 덜 위험</li>
</ul>
</li>
</ul>
</li>
<li>어느 테이블을 베이스로 잡을지 (From에 사용할지) 결정해야함</li>
</ul>
<h1 id="다양한-종류의-join">다양한 종류의 JOIN</h1>
<h2 id="join의-종류">JOIN의 종류</h2>
<ul>
<li>INNER JOIN</li>
<li>LEFT JOIN</li>
<li>RIGHT JOIN</li>
<li>FULL OUTER JOIN</li>
<li>SELF JOIN</li>
<li>CROSS JOIN<h2 id="inner-join">INNER JOIN</h2>
</li>
</ul>
<ol>
<li>양쪽 테이블에서 매치가 되는 레코드들만 리턴함</li>
<li>양쪽 테이블의 필드가 모두 채워진 상태로 리턴됨<h2 id="left-join">LEFT JOIN</h2>
</li>
<li>왼쪽 테이블(Base)의 모든 레코드들을 리턴함</li>
<li>오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴됨<h2 id="full-join">FULL JOIN</h2>
</li>
<li>왼쪽 테이블과 오른쪽 테이블의 모든 레코드들을 리턴함</li>
<li>매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴됨<h2 id="cross-join">CROSS JOIN</h2>
</li>
<li>왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴함<h2 id="self-join">SELF JOIN</h2>
</li>
<li>동일한 테이블을 alias를 달리해서 자기 자신과 조인함</li>
</ol>
<blockquote>
<p>이 글에서 소개된 내용은 프로그래머스 데이터분석1기에서 진행된 한기용 강사님의 온라인 강의를 참조하여 작성되었습니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23일차] SQL을 이용한 데이터 분석]]></title>
            <link>https://velog.io/@_hansohyun/23%EC%9D%BC%EC%B0%A8-SQL%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@_hansohyun/23%EC%9D%BC%EC%B0%A8-SQL%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Fri, 22 Dec 2023 08:29:41 GMT</pubDate>
            <description><![CDATA[<h1 id="group-by와-aggregate-함수">GROUP BY와 AGGREGATE 함수</h1>
<h2 id="group-by--aggregate-함수">GROUP BY &amp; Aggregate 함수</h2>
<ul>
<li>테이블의 레코드를 그룹핑하여 그룹별로 다양한 정보를 계산</li>
<li>이는 두 단계로 이뤄짐<ul>
<li>먼저 그룹핑을 할 필드 결정 (하나 이상의 필드가 될 수 있음)<ul>
<li>GROUP BY로 지정 (필드 이름을 사용하거나 필드 일련번호를 사용)</li>
</ul>
</li>
<li>다음 그룹별로 계산할 내용 결정<ul>
<li>여기서 Aggregate함수 사용<ul>
<li>COUNT, SUM, AVG, MIN, MAX, LISTAGG, ...<ul>
<li>보통 필드 이름을 지정하는 것이 일반적 (alias)</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="ctas와-cte">CTAS와 CTE</h1>
<h2 id="ctas--select를-가지고-테이블-생성">CTAS : SELECT를 가지고 테이블 생성</h2>
<ul>
<li>간단하게 새로운 테이블을 만드는 방법</li>
<li>자주 조인하는 테이블들이 있다면 이를 CTAS를 사용해서 조인해두면 편리해짐</li>
</ul>
<h2 id="항상-시도해봐야하는-데이터-품질-확인-방법들">항상 시도해봐야하는 데이터 품질 확인 방법들</h2>
<ul>
<li>중복된 레코드들 체크하기</li>
<li>최근 데이터의 존재 여부 체크하기 (freshness)</li>
<li>Primary key uniqueness가 지켜지는지 체크하기</li>
<li>값이 비어있는 컬럼들이 있는지 체크하기</li>
</ul>
<blockquote>
<p>이 글에서 소개된 내용은 프로그래머스 데이터분석1기에서 진행된 한기용 강사님의 온라인 강의를 참조하여 작성되었습니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 대여 기록이 존재하는 자동차 리스트 구하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8C%80%EC%97%AC-%EA%B8%B0%EB%A1%9D%EC%9D%B4-%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94-%EC%9E%90%EB%8F%99%EC%B0%A8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8C%80%EC%97%AC-%EA%B8%B0%EB%A1%9D%EC%9D%B4-%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94-%EC%9E%90%EB%8F%99%EC%B0%A8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 21 Dec 2023 14:11:50 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/09b29578-0fcb-41ea-ad87-2da258c26c14/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/cd046389-fefb-404e-ad83-b2eed6e2499f/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A1%B0%ED%9A%8C%EC%88%98%EA%B0%80-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%80-%EC%A4%91%EA%B3%A0%EA%B1%B0%EB%9E%98-%EA%B2%8C%EC%8B%9C%ED%8C%90%EC%9D%98-%EC%B2%A8%EB%B6%80%ED%8C%8C%EC%9D%BC-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A1%B0%ED%9A%8C%EC%88%98%EA%B0%80-%EA%B0%80%EC%9E%A5-%EB%A7%8E%EC%9D%80-%EC%A4%91%EA%B3%A0%EA%B1%B0%EB%9E%98-%EA%B2%8C%EC%8B%9C%ED%8C%90%EC%9D%98-%EC%B2%A8%EB%B6%80%ED%8C%8C%EC%9D%BC-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 21 Dec 2023 13:56:37 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/dad0772e-69d7-48b5-b9c4-f08a775aed48/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/0ecf1e7b-aa83-4fb4-baca-ea05db30ff27/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/f1c7f1bf-9e29-46c4-b14a-122be93eb6b9/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 조건에 부합하는 중고거래 상태 조회하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A1%B0%EA%B1%B4%EC%97%90-%EB%B6%80%ED%95%A9%ED%95%98%EB%8A%94-%EC%A4%91%EA%B3%A0%EA%B1%B0%EB%9E%98-%EC%83%81%ED%83%9C-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A1%B0%EA%B1%B4%EC%97%90-%EB%B6%80%ED%95%A9%ED%95%98%EB%8A%94-%EC%A4%91%EA%B3%A0%EA%B1%B0%EB%9E%98-%EC%83%81%ED%83%9C-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 21 Dec 2023 13:48:39 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/85324947-9ff6-4e62-b490-8b0961dbc6fa/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/90b5eb53-05ad-4f85-9f78-d629dc202fef/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 오랜 기간 보호한 동물(2)]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%98%A4%EB%9E%9C-%EA%B8%B0%EA%B0%84-%EB%B3%B4%ED%98%B8%ED%95%9C-%EB%8F%99%EB%AC%BC2</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%98%A4%EB%9E%9C-%EA%B8%B0%EA%B0%84-%EB%B3%B4%ED%98%B8%ED%95%9C-%EB%8F%99%EB%AC%BC2</guid>
            <pubDate>Thu, 21 Dec 2023 13:44:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/1c23face-277b-45a3-85ba-35cd7349adae/image.png" alt=""><img src="https://velog.velcdn.com/images/_hansohyun/post/3a6e31ba-aa4c-4d61-bd69-19736e8a8869/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/f4032c31-9c25-4c01-9993-c78c3ef32861/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 자동차 평균 대여 기간 구하기]]></title>
            <link>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%8F%99%EC%B0%A8-%ED%8F%89%EA%B7%A0-%EB%8C%80%EC%97%AC-%EA%B8%B0%EA%B0%84-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@_hansohyun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%8F%99%EC%B0%A8-%ED%8F%89%EA%B7%A0-%EB%8C%80%EC%97%AC-%EA%B8%B0%EA%B0%84-%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 21 Dec 2023 13:40:13 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/_hansohyun/post/0a28e685-063a-4dbd-89fc-09cdd2a9f544/image.png" alt=""></p>
<h1 id="풀이">풀이</h1>
<p><img src="https://velog.velcdn.com/images/_hansohyun/post/a993123c-9bc7-43f1-a08e-8f3f3ce0afd7/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>