<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>최익필의 이름없는 블로그</title>
		<link>http://ikpil.com/</link>
		<description>공부할 때 정리 장소로 쓰거나 웹서핑할때 메모 할 때 쓰거나, 개인적인 생각을 기록하기 위해서 사용 되는 블로그 입니다.</description>
		<language>ko</language>
		<pubDate>Sun, 07 Feb 2010 02:32:40 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>최익필의 이름없는 블로그</title>
		<url><![CDATA[http://cfs2.tistory.com/upload_control/download.blog?fhandle=YmxvZzU4Mzk1QGZzMi50aXN0b3J5LmNvbTovYXR0YWNoLzAvMTYuSlBH]]></url>
		<link>http://ikpil.com/</link>
		<description>공부할 때 정리 장소로 쓰거나 웹서핑할때 메모 할 때 쓰거나, 개인적인 생각을 기록하기 위해서 사용 되는 블로그 입니다.</description>
		</image>
		<item>
			<title>18장, 뷰 사용 : CREATE VIEW ~ DROP VIEW</title>
			<link>http://ikpil.com/1108</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;뷰 에 대해서 설명하는 장이다. 뷰를 알고 나면, 테이블 조인이 조금 편해진다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 무엇을 뷰 - VIEW 라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;SQL 세계에서 뷰 - VIEW 는 가상 테이블을 뜻한다. 여기서 말하는 가상 테이블은 실제로 테이블이 있는것이 아니라, 필요할 때마다 테이블이 생겼다가 없어졌다가 하는 테이블을 뜻한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 어디에 뷰 - VIEW 를 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;뷰는 다음의 상황을 위해서 사용 된다.&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;만들었던 SELECT 문을 재사용 하기 위해서&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;일부만 엑세스 하도록 만들어, 테이블에 있는 데이터를 보호하기 위해서&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;아직 나는 경험이 없어서, 보안을 위해서 VIEW를 사용 하는 형태를 본적이 없다. 현재로썬 사용 할 수도 있겠다. 라고 넘겨짚는다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 어떻게 뷰 - VIEW 를 만드는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;뷰 - VIEW 를 만들기 위해선 몇가지 규칙을 지켜야 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;규칙&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;뷰 이름은 고유해야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;뷰에 보안 등급을 설정해야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;뷰에 ORDER BY 를 사용 하는 것은 DBMS마다 다르므로, 메뉴얼을 숙지해야 한다.(언제 메뉴얼을 봐, 일단 쓰고 안되면, 메뉴얼 보자.)&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;뷰는 가상 테이블이기 때문에, 성능저하가 발생하는지 테스트 해 보아야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;일부 DBMS 는 VIEW 사용시 모든 열에 이름을 지정해야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;뷰에는 인덱스, 기본값을 연계할 수 없다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;뷰에 데이터를 삽입하거나 업데이트를 하는 것은 가능할 수도 있고, 불가능할 수도 있다. 각 DBMS 설명서를 보라..&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이제 무엇인지 알았으므로, 실제로 만들어 보자.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;뷰는 CREATE VIEW 문으로 만든다. 삭제할 땐 DROP VIEW viewname; 으로 한다. 어떻게 VIEW를 만드는지 실제 SQL 예제를 보고 알아보자.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;CREATE VIEW
    ProductCustomers
AS
    SELECT
        cust_name,
        cust_contact,
        prod_id
    FROM
        Customers,
        Orders,
        OrderItems   
    WHERE
        Customers.cust_id = Orders.cust_id
    AND
        OrderItems.order_num = Orders.order_num
;
&lt;/textarea&gt;&lt;br /&gt;
이렇게 만들면 된다. 이렇게 만들어진 뷰 - VIEW는 해당 DB에 있는 뷰에 등록되어 있다. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. 어떻게 만들어진 뷰 - VIEW를 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;사용 할 때는 진짜 테이블이 있는 것 처럼 다음과 같이 할 수 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT
    *
FROM
    ProductCustomers
;
&lt;/textarea&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;5. 관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://gomty.tistory.com/220]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://gomty.tistory.com/220&quot;&gt;http://gomty.tistory.com/220&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://211.47.127.69:1010/ArticleView.screen?mid=3&amp;amp;bbs=bbs30&amp;amp;type=3&amp;amp;event=view&amp;amp;oid=1059&amp;amp;curpg=21]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://211.47.127.69:1010/ArticleView.screen?mid=3&amp;amp;bbs=bbs30&amp;amp;type=3&amp;amp;event=view&amp;amp;oid=1059&amp;amp;curpg=21&quot;&gt;http://211.47.127.69:1010/ArticleView.screen?mid=3&amp;amp;bbs=bbs30&amp;amp;type=3&amp;amp;event=view&amp;amp;oid=1059&amp;amp;curpg=21&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-create-view.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-create-view.php&quot;&gt;http://sql.1keydata.com/kr/sql-create-view.php&lt;/a&gt;&lt;a title=&quot;[http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&amp;amp;wr_id=760&amp;amp;sca=MS-SQL]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&amp;amp;wr_id=760&amp;amp;sca=MS-SQL&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.itmembers.net/board/view.php?id=oracle&amp;amp;no=45]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.itmembers.net/board/view.php?id=oracle&amp;amp;no=45&quot;&gt;http://www.itmembers.net/board/view.php?id=oracle&amp;amp;no=45&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&amp;amp;wr_id=760&amp;amp;sca=MS-SQL]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&amp;amp;wr_id=760&amp;amp;sca=MS-SQL&quot;&gt;http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&amp;amp;wr_id=760&amp;amp;sca=MS-SQL&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.w3schools.com/SQl/sql_view.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQl/sql_view.asp&quot;&gt;http://www.w3schools.com/SQl/sql_view.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.sql-tutorial.com/sql-views-sql-tutorial/]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.sql-tutorial.com/sql-views-sql-tutorial/&quot;&gt;http://www.sql-tutorial.com/sql-views-sql-tutorial/&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;
Dirgression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;졸리다..&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1108-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>CREATE VIEW</category>
			<category>View</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1108</guid>
			<comments>http://ikpil.com/1108#entry1108comment</comments>
			<pubDate>Sun, 07 Feb 2010 02:27:44 +0900</pubDate>
		</item>
		<item>
			<title>17장, 테이블의 생성과 제어 : CREATE TABLE ~ ALTER TABLE</title>
			<link>http://ikpil.com/1107</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이 장에서는 테이블을 생성하는 방법과 이미 생성된 테이블을 변경하는 방법에 대해서 알려 준다. 이미 생성된 테이블을 변경한다는 의미는 테이블 이름을 바꾼다거나, 테이블 칼럼 위치, 칼럽 유형, 기본키, 유니크 설정 등을 생성 뒤에 테이블에 적용 시킨다는 것을 의미한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 무엇을 CREATE TABLE 이라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;SQL 절 중 CERATE TABLE 로 테이블을 만든다. 만들 때 테이블 이름, 테이블 칼럼명 및 데이터 형, 그리고 킬럼에 부수적인 옵션을 주면서 만들어야 한다. DBMS 를 이용하면, 실제로 SQL 를 날려 만들지 않고, 마우스로 뚝딱 뚝딱 만들 수 있다. PostgreSQL 은 pgadmin 으로 만들 수 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;2. 어떻게 CREATE TABLE 을 사용 하는가?&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;CREATE TABLE films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute
);

CREATE TABLE distributors (
     did    integer PRIMARY KEY DEFAULT nextval(&#039;serial&#039;),
     name   varchar(40) NOT NULL CHECK (name &amp;lt;&amp;gt; &#039;&#039;)
);
&lt;/textarea&gt;&lt;br /&gt;
이 예제는 &lt;a title=&quot;[http://www.postgresql.org/docs/current/static/sql-createtable.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.postgresql.org/docs/current/static/sql-createtable.html&quot;&gt;PostgreSQL 8.4 CREATE TABLE 항목&lt;/a&gt;에서 가져 왔다. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;CREATE TABLE 분석 / 가이드 라인&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: upper-alpha;&quot;&gt;
&lt;li&gt;동일한 DB에 동일한 테이블 이름이 있으면 테이블을 만들 수 없다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;CREATE TABLE 뒤에 &#039;테이블 이름&#039; 을 정해야 한다. 여기선 films 이다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;테이블 이름 뒤에 () 를 묶어 주고, 그 사이에 칼럼명과 칼럼이 갖을 데이터형, 그리고 옵션을 선택 해야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;각 칼럼과 칼럼 사이는 &#039; , &#039; 로 이어 주며, 칼럼명, 데이터형, 옵션은 띄어쓰기로 구분 지어 주면 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;NULL 값을 사용 하고 싶을 땐 NULL 로 지정해 주고, NULL 을 허용 하고 싶지 않을 떈 NOT NULL 을 지정해 주면 된다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;NULL 은 값이 없음을 의미한다. 그렇다고 이것이 0 을 의미하지 않는다. 없음을 의미한다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;NULL 이나 기본값을 지정하면 INSERT INTO 를 사용 할 때, 값을 넣지 않아도 된다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;DEFAULT 키워드는 기본값을 지정하는 의미이다. 기본값을 지정하면, INSERT INTO 를 사용 할때, 갚을 넣지 않아도 되며, 값을 넣지 않았을 때, 자동으로 기본값이 들어 간다.( C++ 이나 php 를 사용한 경험이 있다면, 이 의미를 바로 알 것이다.)&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;CONSTRAINT 는 칼럼에 제한을 주는 것을 말한다. 주키를 준다거나, 유니크로 한다거나 등등&lt;br /&gt;
링크 : &lt;a title=&quot;[http://www.allinterview.com/showanswers/76119.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.allinterview.com/showanswers/76119.html&quot;&gt;http://www.allinterview.com/showanswers/76119.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;집계 함수 나 그룹화를 사용하는 열 일 경우, NULL 보다는 DEFAULT 를 사용하는게 개발자가 많다고 한다.(P.155 Tip 참조)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;보다 자세한 규칙은 각 DBMS 설명서를 보고 결정 하는게 좋다. PostgreSQL 은 &lt;a title=&quot;[http://www.postgresql.org/docs/current/static/sql-createtable.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.postgresql.org/docs/current/static/sql-createtable.html&quot;&gt;http://www.postgresql.org/docs/current/static/sql-createtable.html&lt;/a&gt; 에서 확인 가능하다.&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.postgresql.org/docs/current/static/sql-createtable.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.postgresql.org/docs/current/static/sql-createtable.html&quot;&gt;http://www.postgresql.org/docs/current/static/sql-createtable.html&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-create-table.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-create-table.php&quot;&gt;http://sql.1keydata.com/kr/sql-create-table.php&lt;/a&gt; &amp;lt;-- 여기선 테이블을 도표라고 번역했다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql-info.de/mysql/examples/CREATE-TABLE-examples.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql-info.de/mysql/examples/CREATE-TABLE-examples.html&quot;&gt;http://sql-info.de/mysql/examples/CREATE-TABLE-examples.html&lt;/a&gt; &amp;lt;-- 기본값을 함수로 설정하는 예제가 있다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://laputa1231.egloos.com/1267878]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://laputa1231.egloos.com/1267878&quot;&gt;http://laputa1231.egloos.com/1267878&lt;/a&gt; &amp;lt;-- 예제와 설명이 있다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://xorange83.springnote.com/pages/4271997]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://xorange83.springnote.com/pages/4271997&quot;&gt;http://xorange83.springnote.com/pages/4271997&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.postgresplus.co.kr/man/ddl-basics.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.postgresplus.co.kr/man/ddl-basics.html&quot;&gt;http://www.postgresplus.co.kr/man/ddl-basics.html&lt;/a&gt; &amp;lt;-- 대략적 구조를 잡을 수 있는 한글 문서! 럭키!&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://translate.google.com/translate?hl=ko&amp;amp;ie=UTF-8&amp;amp;sl=ja&amp;amp;tl=ko&amp;amp;u=http://www.postgresql.jp/document/pg836doc/html/tutorial-agg.html&amp;amp;prev=_t]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://translate.google.com/translate?hl=ko&amp;amp;ie=UTF-8&amp;amp;sl=ja&amp;amp;tl=ko&amp;amp;u=http://www.postgresql.jp/document/pg836doc/html/tutorial-agg.html&amp;amp;prev=_t&quot;&gt;http://translate.google.com/translate?hl=ko&amp;amp;ie=UTF-8&amp;amp;sl=ja&amp;amp;tl=ko&amp;amp;u=http://www.postgresql.jp/document/pg836doc/html/tutorial-agg.html&amp;amp;prev=_t&lt;/a&gt; &amp;lt;-- PostgreSQL 8.3.6 일어를 구글로 번역한 문서&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 무엇을 ALTER TABLE 이라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;SQL 절 중 하나이며, &#039;테이블 정의&#039;를 변경 하는 것을 의미한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. 어떻게 ALTER TABLE 을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;변경 작업을 하기 전에, 먼저 주의해야 할 사항 부터 알아야 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;주의 사항&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;데이터가 포함된 테이블 구조는 되도록 변경하지 않도록 한다. 이는 테이블에 값을 넣고, 변경을 하는 것은 에러가 날 소지가 무척 많이 있기 때문이다.(응용프로그램 수정 중 실수 할 수 있거나, 컨버팅 중 안되는게 생긴다거나 ...) 그러므로 최초 테이블 생성시 충분히 고민하고 생성해야 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;기존 테이블에 칼럼을 추가 하는 것은 허용 되나, 제한 사항이 있을 수 있으므로 DBMS 설명서를 참조 해야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;테이블에 있는 열을 제거하거나 변경 하는 것을 허용하지 않는 DBMS 도 있으므로, 설명서 참조 해라.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;열 이름을 변경하는 것은 많은 DBMS가 지원한다.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;ALTER TABLE distributors ADD COLUMN address varchar(30);
ALTER TABLE distributors DROP COLUMN address RESTRICT;
&lt;/textarea&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;테이블에 칼럼을 추가하거, 삭제 한다. 이런 개념이 있다고만 알고 있고, 나머지는 전부 검색을 통해서 알아 가는게 더 좋을듯 싶다.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.postgresql.org/docs/current/static/sql-altertable.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.postgresql.org/docs/current/static/sql-altertable.html&quot;&gt;http://www.postgresql.org/docs/current/static/sql-altertable.html&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://www.postgresplus.co.kr/man/ddl-alter.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.postgresplus.co.kr/man/ddl-alter.html&quot;&gt;http://www.postgresplus.co.kr/man/ddl-alter.html&lt;/a&gt; &amp;lt;-- 한글!!!!!&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-alter-table.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-alter-table.php&quot;&gt;http://sql.1keydata.com/kr/sql-alter-table.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://www.techonthenet.com/sql/tables/alter_table.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.techonthenet.com/sql/tables/alter_table.php&quot;&gt;http://www.techonthenet.com/sql/tables/alter_table.php&lt;/a&gt; &amp;lt;-- 예제만 본다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://artistofdb.tistory.com/entry/%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B4%80%EB%A6%AC-alter-table%EB%AC%B8%EC%9D%98-%EC%82%AC%EC%9A%A9]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://artistofdb.tistory.com/entry/%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B4%80%EB%A6%AC-alter-table%EB%AC%B8%EC%9D%98-%EC%82%AC%EC%9A%A9&quot;&gt;http://artistofdb.tistory.com/entry/%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B4%80%EB%A6%AC-alter-table%EB%AC%B8%EC%9D%98-%EC%82%AC%EC%9A%A9&lt;/a&gt; &amp;lt;-- 한글!!!&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;추가&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt; - DROP TABLE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;테이블을 삭제 할 때 사용한다. 삭제 후 취소 하는 것이 없으므로, 다른 테이블과 연결하여, 연결된 테이블일 경우 함부로 삭제 할 수 없게 만드는 규칙을 만들어서 사용하는게 좋다고 책에 나와 있다.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;PostgreSQL 문서 라고 검색하면, 표준 SQL 에 대한 정보를 얻을 순 없어도, 구조를 잡을 수 있는 문서가 많이 나온다. 이것으로도 충분히 만족한다.&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1107-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>alter table</category>
			<category>CREATE TABLE</category>
			<category>drop table</category>
			<category>PostgreSQL</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1107</guid>
			<comments>http://ikpil.com/1107#entry1107comment</comments>
			<pubDate>Fri, 05 Feb 2010 01:34:49 +0900</pubDate>
		</item>
		<item>
			<title>16장, 데이터의 업데이트와 삭제 : UPDATE DELETE</title>
			<link>http://ikpil.com/1106</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이번 장에선 테이블에 있는 레코드를 SQL을 이용하여, 변경/삭제 에 대해서 다룬다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 무엇을 업데이트 : UPDATE 라 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이 업데이트는 SQL 절 중 하나를 말한다. 이 UPDATE는 테이블에 있는 레코드를 변경할 때 사용 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 어떻게 UPDATE를 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;SQL을 보자.&lt;/p&gt;
&lt;p&gt;
&lt;textarea class=&quot;brush:sql&quot;&gt;UPDATE
    Customers
SET
    cust_email = &#039;kim@thetoystore.com&#039;
WHERE
    cust_id = &#039;1000000005&#039;;
&lt;/textarea&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;UPDATE 분석&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: upper-alpha;&quot;&gt;
&lt;li&gt;UPDATE 뒤에 &#039;테이블 이름&#039; 을 붙이고 SET 을 붙인다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;SET 뒤에 바꿀 칼럼 이름(열 이름)과 값 을 넣는다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;B 뒤에 WHERE 절이 놓이고, 바꿀 대상이 누군지 결정 짖는다.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이렇게 하면, cust_id = &#039;1000000005&#039;; 인 레코드만 이메일이 바뀔 것이다. &lt;span style=&quot;text-decoration: underline; font-weight: bold;&quot;&gt;UPDATE 절도 FROM 을 사용 할 수 있으며, 이것은 다른 테이블 레코드를 가져와 업데이트 할때 사용한다. &lt;/span&gt;지원여부는 DBMS 마다 다르므로 설명서를 참조 하란다. 또한 서브 쿼리를 사용 하여, 선택된 레코드에만 UPDATE 를 할 수 있다. 이때 WHERE 절에 SELECT 절을 넣으면 된다. 11장 서브 쿼리를 보면 이해가 갈 것이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; font-size: 14pt;&quot;&gt;&lt;span&gt;3. UPDATE 를 잘 쓰기 위한 가이드 라인이 있는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;UPDATE를 사용 할 때, WHERE 을 함께 쓰자. &lt;/span&gt;함께 쓰지 않으면, 해당 테이블에 있는 모든 레코드가 변경 된다. UPDATE는 한번 실행 된 후, 되돌릴 수 없으므로, 주의 해서 사용 해야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;UPDATE는 레코드 변경 이라는 역활 때문에, 보안 권한 설정을 해 두는 것이 좋다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;UPDATE 할 때, 먼저 SELECT 해 보아, 어떤 것들에 적용 될지 확인해 보는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. UPDATE 에 대한 관련링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-update.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-update.php&quot;&gt;http://sql.1keydata.com/kr/sql-update.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.w3schools.com/Sql/sql_update.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/Sql/sql_update.asp&quot;&gt;http://www.w3schools.com/Sql/sql_update.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.techonthenet.com/sql/update.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.techonthenet.com/sql/update.php&quot;&gt;http://www.techonthenet.com/sql/update.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.sql-tutorial.net/SQL-UPDATE.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.sql-tutorial.net/SQL-UPDATE.asp&quot;&gt;http://www.sql-tutorial.net/SQL-UPDATE.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;5. 무엇을 DELETE 라 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;DELETE는 SQL 절 중 하나이다. DELETE 는 테이블에 있는 레코드를 삭제 할 때 사용 한다. 그러므로 레코드를 삭제하는 절을 DELETE 라고 할 수 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;6. 어떻게 DELETE 를 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;SQL 을 보자.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;DELETE FROM
    Customers
WHERE
    cust_id = &#039;1000000006&#039;;
&lt;/textarea&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;DELETE 분석&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: upper-alpha;&quot;&gt;
&lt;li&gt;DELETE FROM 뒤에 &#039;테이블 이름&#039;을 정한다. 이는 어떤 테이블에서 작업할지 명령 내리는 것이다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;A 뒤에 WHERE 을 두어 지울 레코드를 고른다. 이는 &#039;cust_id = 1000000006&#039;&amp;nbsp; 레코드만 삭제 하겠다고 명령 내리는 것이다.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;7. DELETE 를 위한 가이드 라인이 있는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;DELETE FROM 은 테이블이 아니라, 테이블이 관리하는 레코드를 삭제 하는 것이다. 그러므로 모든 레코드를 삭제 할 땐, TRUNCATE TABLE 을 사용 하는게 더 빠르다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;DELETE 는 삭제 하는 것이기 때문에, DB 접근 유저마다 권한설정을 해 주는 것이 좋다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;DELETE 뒤에 FROM 절을 쓰는것을 습관화 하자.&lt;/span&gt; 이렇게 하면 모든 DBMS에서 사용 할 수 있기 때문이다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;DELETE 는 취소 할 수 없는 작업이니, 항상 주의를 갖고 작업해야 한다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;WHERE 을 필수적으로 넣어야 한다. &lt;/span&gt;넣지 않을 경우 모든 레코드가 지워지기 떄문이다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;DELETE 할 때, 먼저 SELECT 를 해 보아, 어떤것들이 선택되는지 확인해 보는 것이 좋다.&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;8. DELETE 에 대한 관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-delete.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-delete.php&quot;&gt;http://sql.1keydata.com/kr/sql-delete.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://www.w3schools.com/Sql/sql_delete.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/Sql/sql_delete.asp&quot;&gt;http://www.w3schools.com/Sql/sql_delete.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://www.sql-tutorial.net/SQL-DELETE.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.sql-tutorial.net/SQL-DELETE.asp&quot;&gt;http://www.sql-tutorial.net/SQL-DELETE.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://sir.co.kr/bbs/board.php?bo_table=tip_mysql&amp;amp;wr_id=253&amp;amp;page=2]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sir.co.kr/bbs/board.php?bo_table=tip_mysql&amp;amp;wr_id=253&amp;amp;page=2&quot;&gt;http://sir.co.kr/bbs/board.php?bo_table=tip_mysql&amp;amp;wr_id=253&amp;amp;page=2&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이번 장은 딱히 ... 정리 할게 없다. 가이드 라이만 읽어도 충분하다.&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1106-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>SQL DELETE</category>
			<category>SQL UPDATE</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1106</guid>
			<comments>http://ikpil.com/1106#entry1106comment</comments>
			<pubDate>Fri, 05 Feb 2010 00:08:29 +0900</pubDate>
		</item>
		<item>
			<title>15장, 데이터 삽입 : INSERT INTO ~ SELECT INTO</title>
			<link>http://ikpil.com/1105</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;지금까지 SELECT 만 다루었다. SELECT는 여기까지만 보면 되고, 지금부터는 테이블에 데이터를 삽입하는 방법에 대해서 알아 본다. (데이터를 삽입하기 위해선 DB접근자가 INSERT가 가능한 상태 로 바꾸어야 한다.)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 어떻게 데이터를 테이블에 삽입 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;SQL 절 중 INSERT 절을 이용한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 어떻게 INSERT 절을 이용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;INSERT는 크게 2가지 이용 방법이 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2-1 테이블에 행 삽입하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;행을 삽입하는 방법으로는, 테이블에 나열된 열 순으로 삽입하는 방법과 열 이름을 지정하여 삽입하는 방법이 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;- 테이블에 나열된 열 순으로 삽입하는 방법&lt;/span&gt;&lt;br /&gt;
&lt;textarea class=&quot;brush:sql&quot;&gt;INSERT INTO
    Customers
VALUES
(
    &#039;1000000006&#039;,
    &#039;Toy Land&#039;,
    &#039;123 Any Street&#039;,
    &#039;New York&#039;,
    &#039;NY&#039;,
    &#039;11111&#039;,
    &#039;USA&#039;,
    NULL,
    NULL
 );
&lt;/textarea&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;- 테이블에 있는 열 이름을 지정하여 삽입하는 방법&lt;/span&gt;&lt;br /&gt;
&lt;textarea class=&quot;brush:sql&quot;&gt;INSERT INTO
    Customers
(
    cust_id,
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country,
    cust_contact,
    cust_email
)
VALUES
(
    &#039;1000000007&#039;,
    &#039;Toy Land&#039;,
    &#039;123 Any Street&#039;,
    &#039;New York&#039;,
    &#039;NY&#039;,
    &#039;11111&#039;,
    &#039;USA&#039;,
    NULL,
    NULL
 );
&lt;/textarea&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2-1-1 두 사용법 중 어느 것이 더 좋은가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;책에선 두번째 &quot;테이블에 있는 열 이름을 지정하여 삽입하는 방법&quot;을 선호하라고 한다. 그 이유가 테이블의 순서가 바뀌거나, 새로운 열이 추가 될때, 기존 SQL 쿼리를 가장 적게 손을 대기 때문이라고 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2-1-2 주의해야 할 사항이 테이블 행 삽입에 있는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;INSERT 로 행 삽입시 특정 열 값을 넣지 않고, 삽입이 가능하다. 이 때는 해당 열에 &quot;기본값&quot; 설정 이나 &quot;NULL값&quot; 허용을 했기 때문이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2-2 테이블에 쿼리 결과 입력하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;INSERT를 이용하면, SELECT 로 나온 결과를 테이블에 넣을 수 있다. 그 방법은 다음과 같다.&lt;br /&gt;
&lt;textarea class=&quot;brush:sql&quot;&gt;INSERT INTO Customers
    (
     cust_id,
     cust_email,
     cust_name,
     cust_address,
     cust_city,
     cust_state,
     cust_zip,
     cust_country
    )
SELECT
    cust_id,   
    cust_contract,
    cust_email,
    custname,
    cust_adress,
    cust_city,
    cust_state,
    cust_zip,
    cust_country
FROM CustNew;
&lt;/textarea&gt;&lt;br /&gt;
주의 사항으로는 나열된 열 이름이 아닌, 순서로 복사가 됨을 알아야 한다.&lt;br /&gt;
INSERT + SELECT 방식 말고, SELCT + INSERT를 이용하여, 테이블에 행을 넣을 수도 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT *
INTO CustCopy
FROM Customers;
&lt;/textarea&gt;&lt;br /&gt;
이 방법은 테이블 복사 할 때 많이 쓰이며, CustCopy 라는 테이블을 만들 면서, customers 의 모든 데이터를 CustCopy 에 넣는다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;INSERT SELECT은 SELECT 로 값을 가져 와서 INSERT 하는것이고, SELECT INTO는 SELECT로 가져온것을 INTO 다 내보내는 것을 의미한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.w3schools.com/SQL/sql_insert.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQL/sql_insert.asp&quot;&gt;http://www.w3schools.com/SQL/sql_insert.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-insert-into.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-insert-into.php&quot;&gt;http://sql.1keydata.com/kr/sql-insert-into.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://tit99hds.egloos.com/928582]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://tit99hds.egloos.com/928582&quot;&gt;http://tit99hds.egloos.com/928582&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://blog.outsider.ne.kr/263]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://blog.outsider.ne.kr/263&quot;&gt;http://blog.outsider.ne.kr/263&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;졸려서 더 이상 못 보겠다.&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1105-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>INSERT</category>
			<category>INSERT SELECT</category>
			<category>SELECT INTO</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1105</guid>
			<comments>http://ikpil.com/1105#entry1105comment</comments>
			<pubDate>Tue, 02 Feb 2010 03:55:44 +0900</pubDate>
		</item>
		<item>
			<title>14장, 쿼리의 결합 : UNION 으로 쿼리 결합하기</title>
			<link>http://ikpil.com/1104</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;쿼리 결합은 대개 &quot;서로 다른 테이블을 참조하기 위해서거나, 테이블 하나에서 여러 조건을 찾기 위해서&quot; 사용 한다. 이번 장은 UNION을 이용한 쿼리 결합을 다룬다. &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 무엇을 쿼리 결합 이라 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;쿼리가 질의 라는 것은 안다. 질의 라는 것은 DB에 질문을 하는 것이라는 것도 안다. 그렇다면, 쿼리 결합은 무엇을 의미할까? 이것은 쿼리 하나에  쿼리가 여러개 들어가 하나의 쿼리가 된 형태를 뜻한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 왜 쿼리 결합을 이용하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;쿼리 결합은 다른 테이블 참조나 테이블 하나에 여러 조건을 확인해야 할 때 많이 사용 한다. 쿼리 결합은 서브 쿼리를 이용한 결합과 UNION 을 통한 결합이 있으며, 이번장에선 UNION 을 통한 결합을 배운다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 어떻게 UNION을 사용하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;쉽다.&amp;nbsp; SELECT 문을 두개 준비하고, 그 사이에 UNION을 넣어주면 된다. 다음 코드를 보자&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT 
    cust_name, cust_contact, cust_email
FROM 
    Customers
WHERE 
    cust_state IN (&#039;IL&#039;, &#039;IN&#039;, &#039;MI&#039;)
UNION
SELECT 
    cust_name, cust_contact, cust_email
FROM 
    Customers
WHERE 
    cust_name = &#039;Fun4All&#039;;
&lt;/textarea&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/1612B6124B6715D3038CDA&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/1612B6124B6715D3038CDA&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;해석&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/2012BC124B6715D4037C9E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/2012BC124B6715D4037C9E&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;출력&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. 주의 사항이 UNION &lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;에 있는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;테이블이 두개 이상일 때, UNION을 사용 할 수 있다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;UNION으로 엮인 쿼리는 동일한 열을 선택해야 한다. 그렇다고 같은 순서로 나열해야 한다는 것을 의미하지는 않는다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;열 데이터 형식은 서로 호환되어야 한다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;기본적으로 UNION 을 사용 하면, 중복된 행은 출력하지 안하지 않는다. 이때 중복된 행이란 것은 UNION 으로 지정한 테이블 간 동일한 행을 의미한다. 만약 중복된 행이라도 출력해야 한다면 UNION ALL 을 사용 하면 된다.&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;5. 다른 사항이 더 있는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;UNION 과 WHERE 절에 여러 조건을 엮는 것은 서로 비슷하다. 그렇지만 UNION ALL 을 사용하면 다르다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;UNION 으로 결합 시킨 쿼리에 대해서 정렬 하고 싶다면, 제일 마지막 쿼리에 ORDER BY를 붙이면 된다.&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-union-all.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-union-all.php&quot;&gt;http://sql.1keydata.com/kr/sql-union-all.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;[http://www.w3schools.com/sql/sql_union.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/sql/sql_union.asp&quot;&gt;http://www.w3schools.com/sql/sql_union.asp&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;별거 없음. 단지 UNION 이란 것이 있고, UNION ALL 이 존재 한다는 것을 알았을 뿐&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1104-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>Union</category>
			<category>UNION ALL</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1104</guid>
			<comments>http://ikpil.com/1104#entry1104comment</comments>
			<pubDate>Tue, 02 Feb 2010 03:06:42 +0900</pubDate>
		</item>
		<item>
			<title>13장, 고급 조인 만들기 : SELF JOIN, NATURAL JOIN, OUTER JOIN</title>
			<link>http://ikpil.com/1103</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;12장에서 내부 조인만 다루었다. 13장에서 &lt;span style=&quot;font-weight: bold;&quot;&gt;자체 조인(Self JOIN), 자연 조인(Natural JOIN), 외부 조인(Outer JOIN)&lt;/span&gt; 을 다룬다. 여러 조인을 다루는 이유는 서로 다른 테이블을 조합하여, 결과를 찾기 위해서다. 이렇게 여러 테이블을 다루다 보면, 이름을 쓰는게 헷갈리거나, 어렵거나, 귀찮을 수 있는데, 이럴때 별칭을 사용 하면 된다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 왜 별명(alias)을 사용하고, 어떻게 별명(alias)을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;별명은 테이블 이름이 길거나, 이름 이해가 어렵거나, 특수문자를 사용 할 수 없는 환경에서 보다 쉽게 사용하기 위해서 사용 한다. 별명은 계산 필드, 칼럼(열), 테이블 이름에 붙일 수 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;사용 방법은 바꾸고자 하는 이름 뒤에 AS 를 붙이고, 별명을 기입하면 된다.(오라클에선 AS 없이 그냥 한칸 띄우고 별명을 지어 주면 된다.) 즉, 다음 예와 같다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT
    vend_id AS vi,
    vend_name AS vn,   
    vend_address AS va
FROM
    Vendors AS ven
&lt;/textarea&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.w3schools.com/SQl/sql_alias.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQl/sql_alias.asp&quot;&gt;http://www.w3schools.com/SQl/sql_alias.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-alias.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-alias.php&quot;&gt;http://sql.1keydata.com/kr/sql-alias.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ol&gt;
&lt;p&gt;별명이 끝났으니, 이제 각각의 조인들에 대해서 알아 보자.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 자체 조인 - Self JOIN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2-1 무엇을 &quot;자체 조인 - Self JOIN&quot;이라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;테이블 A 가 있다고 치면, 테이블 A가 테이블 A를 참조 하는, 즉, 자기 자신을 참조 하는 조인을 Self JOIN 라고 한다. 보통 &lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;테이블&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;에 한 컴럼이 자신에게 있는 다른 레코드를 참조할 경우&lt;/span&gt;&lt;/span&gt; 쓰인다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2-2 어떻게 &quot;자체 조인 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;- Self 
JOIN&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&quot;을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT
    c1.cust_id, c1.cust_name, c1.cust_contact
FROM
    Customers AS c1, Customers AS c2
WHERE
    c1.cust_name = c2.cust_name
    AND c2.cust_contact = &#039;Jim Jones&#039;;
&lt;/textarea&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/156FE10F4B654D4D94B02F&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/156FE10F4B654D4D94B02F&quot; alt=&quot;&quot; height=&quot;338&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;해석&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/1973540F4B654D4EA0101E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1973540F4B654D4EA0101E&quot; alt=&quot;&quot; height=&quot;338&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;출력&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;본능적으로 알 수 있으니, 별도의 설명이 필요 없다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://radiocom.kunsan.ac.kr/lecture/oracle/statement_join
/self_join.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://radiocom.kunsan.ac.kr/lecture/oracle/statement_join/self_join.html&quot;&gt;http://radiocom.kunsan.ac.kr/lecture/oracle/statement_join/self_join.html&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.sqltutorial.org/sqlselfjoin.aspx]로 
이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.sqltutorial.org/sqlselfjoin.aspx&quot;&gt;http://www.sqltutorial.org/sqlselfjoin.aspx&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.koug.net/xe/?document_srl=3282]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.koug.net/xe/?document_srl=3282&quot;&gt;http://www.koug.net/xe/?document_srl=3282&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://blog.naver.com/mavis5/10078360034]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://blog.naver.com/mavis5/10078360034&quot;&gt;http://blog.naver.com/mavis5/10078360034&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://kbckbc.com/tatter/kbckbc/entry/ProgOracle24]로
 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://kbckbc.com/tatter/kbckbc/entry/ProgOracle24&quot;&gt;http://kbckbc.com/tatter/kbckbc/entry/ProgOracle24&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 자연 조인 - Natural JOIN&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3-1. 무엇을 &quot;자연 조인 - Natural JOIN&quot; 이라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;테이블 조인 유형 중 한가지 이다. 테이블 간 중복된 열이 있다면, 한개만 표시하는 JOIN 을 뜻한다. 그렇다고 Natural JOIN 이 스스로 걸러낸다는 것을 의미하지는 않는다. 이것은 질의를 만드는 사람의 손으로 걸러내야 한다는 의미이다. (실제로 PostgreSQL 에서 해 보니, 중복된 열이라 할지라도, 지정해 주면 출력이 되더라. 결국 사람의 손을 거쳐야 하는 것.)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;곰곰히 생각해 보면, &quot;자연 조인 - Natural JOIN&quot; 을 따로 구분 짓지는 않을 것 같다. 왜냐하면, 인간이 가진 손으로 기입하는 것이기 때문이다. 이 의미는 &quot;내부 조인 - INNER JOIN&quot; 에 중복된 열을 제거 한 것뿐 이다. &quot;자연 조인 - Natural JOIN&quot;을 구분 한다 해도, 얻게 되는 이점이 무엇인가? 전혀 없다. 나는 이렇게 본다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3-2. 어떻게 &quot;자연 조인 - Natural JOIN&quot; 을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT   
    C.*, O.order_num, O.order_date, OI.prod_id,
    OI.quantity, OI.item_price
FROM
    Customers AS C, Orders AS O, OrderItems AS OI
WHERE
    C.cust_id = O.cust_id
    AND OI.order_num = O.order_num
    AND prod_id = &#039;RGAN01&#039;;
&lt;/textarea&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/original/172750134B6566825D2FFE&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/172750134B6566825D2FFE&quot; alt=&quot;&quot; height=&quot;331&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;해석&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/original/1820D7134B65668355AD8F&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/1820D7134B65668355AD8F&quot; alt=&quot;&quot; height=&quot;331&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;출력&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://jongrak.textcube.com/70]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://jongrak.textcube.com/70&quot;&gt;http://jongrak.textcube.com/70&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;

&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. &lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;외부 조인&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt; - OUTER JOIN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4-1. 무엇을 &quot;외부 조인 - OUTER JOIN&quot; 이라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;여러 JOIN 중 한 조인 형태이며, 크게 내부 조인과 외부 조인으로 나뉜다. &lt;span style=&quot;font-weight: bold;&quot;&gt;내부 조인은 엮을 대상이 있을 때만, 엮여 지지만, 외부 조인은 엮일 대상이 없다고 해도 엮인다. 이것이 차이다&lt;/span&gt;. 이러한 차이점 때문에 외부 조인은 기준이 될 테이블을 정해 주어야 한다. 기준이 된 테이블을 정해 준다는 것은 엮이는게 없더라도, 기본적으로 보여질 테이블을 정해 준다는 것을 의미한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;그러므로&lt;span style=&quot;font-weight: bold;&quot;&gt; 왼쪽을 기준으로 정한 외부 조인을 LEFT OUTER JOIN 이라고 하며, 오른쪽을 기준으로 정한 외부 조인을 RIGHT OUTER JOIN 이라고 한다.&lt;/span&gt; 이때 왼쪽과 오른쪽을 결정하는 기준은 JOIN 절 이다. JOIN 을 기준으로 왼쪽 과 오른쪽으로 나뉜다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 왼쪽과 오른쪽을 나눈것 외에&lt;span style=&quot;font-weight: bold;&quot;&gt; 둘 다 포함하는 조인이 있는데, 이를 FULL OUTER JOIN 이라고 한다.&lt;/span&gt; 이는 엮일 데이터가 있건 없건 모든 테이블을 보겠다는 의미이다. FULL JOIN 은 각 DBMS 마다 지원 여부를 확인해 봐야 한다. (PostgreSQL 은 된다.)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4-2. 어떻게 &quot;외부 조인 - OUTER JOIN&quot; 을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;모든 예를 다 찍기 어려우므로 사진과 링크로 대체 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/1773F5244B65708EAC5113&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/1773F5244B65708EAC5113&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;LEFT OUTER JOIN 해석&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/127F2D244B65708F8BC527&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/127F2D244B65708F8BC527&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;LEFT OUTER JOIN 출력&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/original/140D05244B657090414C37&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/140D05244B657090414C37&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;RIGHT OUTER JOIN 해석&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/14343B244B6570910E1131&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/14343B244B6570910E1131&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;RIGHT OUTER JOIN 출력&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/156704244B65708D78B712&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/156704244B65708D78B712&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;FULL OUTER JOIN 해석&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/17309F244B65708D19B8C7&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/17309F244B65708D19B8C7&quot; alt=&quot;&quot; height=&quot;438&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;FULL OUTER JOIN 출력&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://zend1003.springnote.com/pages/946880]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://zend1003.springnote.com/pages/946880&quot;&gt;http://zend1003.springnote.com/pages/946880&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://infogoal.com/sql/sql-outer-join.htm]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://infogoal.com/sql/sql-outer-join.htm&quot;&gt;http://infogoal.com/sql/sql-outer-join.htm&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://databaser.net/moniwiki/wiki.php/OuterJoin]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://databaser.net/moniwiki/wiki.php/OuterJoin&quot;&gt;http://databaser.net/moniwiki/wiki.php/OuterJoin&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.oracleclub.com/lecture/1021]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.oracleclub.com/lecture/1021&quot;&gt;http://www.oracleclub.com/lecture/1021&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://bearcho.tistory.com/38]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://bearcho.tistory.com/38&quot;&gt;http://bearcho.tistory.com/38&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://bearcho.tistory.com/40]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://bearcho.tistory.com/40&quot;&gt;http://bearcho.tistory.com/40&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;조인을 할 때 주의해야 할 사항&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;엮일 조건(WHERE a = b)(ON a = b)을 결정하지 않으면, 곱집합이 반한 된다. &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;여러 조인을 한 SQL 절에 사용 할 순 있으나, 복잡하므로, 충분히 테스트 하고 적용 시키도록 해야 한다.( .. 복잡한건 어딜 가나 문제다.)&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;조인은 내부 조인과 외부 조인만 구분 지으면 되지, &lt;span style=&quot;font-weight: bold;&quot;&gt;내부 조인엔 무엇이 있고 외부조인엔 무엇 있다고 상세히 구분 할 필요가 없다고 생각한다. &lt;/span&gt;그러므로 내부 조인과 외부 조인만 설명하면 더 쉽게 접할 수 있을 것 같다. 그렇다고 이 의미가 책에서 내용 자체를 빼라는 것을 의미하지 않는다. 설명을 할 때, &quot;이런 것도 있더라.&quot; 쯤으로 여기고 넘어가는게 좋다는 의미이다.&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1103-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>FULL OUTER JOIN</category>
			<category>INNER JOIN</category>
			<category>join</category>
			<category>LEFT OUTER JOIN</category>
			<category>PostgreSQL</category>
			<category>RIGHT OUTER JOIN</category>
			<category>SQL</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1103</guid>
			<comments>http://ikpil.com/1103#entry1103comment</comments>
			<pubDate>Sun, 31 Jan 2010 21:11:42 +0900</pubDate>
		</item>
		<item>
			<title>12장, 테이블 조인 : INNER JOIN</title>
			<link>http://ikpil.com/1102</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Intro&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;duction&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;다른 테이블의 참조는 서브쿼리 외로 테이블 조인이 있다. 성능상 어느 것이 더 좋은지 나는 쉽게 알 수 없으므로, 조인 쿼리와 서브 쿼리를 준비하여 성능을 테스트 해 보는게 좋다고 생각한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 왜 
테이블을 여러개로 관리하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;왜 A 테이블과 B 테이블로 쪼개서 관리 할까? 성능과 
관리 때문이다. A 테이블에는 회사 정보가 들어 있고, B 테이블에는 회사가 납품하는 정보가 들어 있다고 치자, A 테이블과 B 
테이블 모두 C 테이블에 넣는다면, 중복된 정보가 많이 들어가, 테이블 크기가 무척 커지게 된다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 되면,
 테이블에 접근하고 데이터를 뽑아 오는 비용이 크게 된다. 또한 회사 이름이 바뀌게 될 때, C 테이블에 있는 레코드를 모두 찾아
 이름을 바꾸어 주어야 한다. 이 의미는 비용이 높고 관리가 힘들다는 것을 의미한다. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;그러므로 &lt;span style=&quot;font-weight: bold;&quot;&gt;서로 독립적으로 유지될 수 있는 정보는 각각 테이블로 나누어 관리 비용과 성능 비용을 낮춘다. 이것이 이유 이다.&lt;/span&gt; (여기서 테이블 관계를 만드는 방법은 다루지 않는다.)&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 무엇을 테이블 조인 이라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;A 테이블과 B 테이블이 있을 때, 이것들을 합쳐 테이블 하나를 만드는 것을 테이블 조인이라고 한다. 이 만듬이 테이블을 실제(데이터로 저장 하는것이 실제이다.)로 만드는 것을 의미하지 않는다. 가상(메모리겠지..)공간에 올라와져 있다가 참조가 끝났다고 DBMS가 판단하면, 없어진다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 왜 테이블 조인을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;테이블이 여러개로 쪼개져 있을 때, 여러 테이블을 한번에 접근하기 위해서 테이블 조인을 사용 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. 어떻게 테이블 조인을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;FROM 에 테이블 두개를 지정하고, WHERE 절에 두 테이블이 같은 키를 엮어 주면 된다. 여기서 엮어 준다는 것은 A 에 1번이 있으면 B에 1번과 연결하라는 의미이다. SQL 문은 다음과 같다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT vend_name, prod_name, prod_price
FROM Vendors, Products
WHERE Products.vend_id = Vendors.vend_id;
&lt;/textarea&gt;&lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/18107D254B6522523A00D7&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/18107D254B6522523A00D7&quot; alt=&quot;&quot; height=&quot;410&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;해석&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/157A31254B65225351A403&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/157A31254B65225351A403&quot; alt=&quot;&quot; height=&quot;410&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;p class=&quot;cap1&quot;&gt;출력&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;해석에 그림이 나오는데, Products 를 해쉬로 만들고, Vendors 와 결합 시킨다.(여기에서 무엇을 해쉬라고 하는지 모르겠다. 단지 두개를 결합한다는 것은 알겠다.)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;FROM 절에서 테이블 두개를 결합한다고 지시했다.&lt;br /&gt;
WHERE 절에서 두 테이블이 같이 공유하는 vend_id를 엮으라고 지시했다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Tip 주의 해야 할 점&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;Vendors 와 Products 테이블에 같은 이름이 있을 경우, 완전한 이름을 적어 주어야만 한다. 이 말은 테이블명.열이름 으로 지정해 주라는 말 이다. 만약 지정하지 않으면, 에러가 발생하여, 쿼리 실행이 안될 것이다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;WHERE 절을 지정해 주지 않을 경우, Products 행 수 * Ventodrs 행 수 만큼 행을 읽으므로, 성능이 무척 내려간는 것을 알아야 한다.(실제로 이렇게 쓰는 경우는 못봤다.) 그러므로 특별한 이유가 없다면, WHERE 절을 반드시 추가해 주는 것이 좋다.&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ol&gt;
&lt;p&gt;이렇게 &lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;두 테이블에서 서로 동일한 것만 뽑아 오는 것을 &quot;내부 조인&quot; 이라고 한다.&lt;/span&gt;&lt;/span&gt; 내부 조인을 보다 명확하게 표현해 주는 방법(명확하게 표현해 주는게 좋다. 가독성을 높이기 때문이다.)이 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;5. 어떻게 내부 조인을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Products.vend_id = Vendors.vend_id;
&lt;/textarea&gt;&lt;br /&gt;
FROM 절에 INNER JOIN 을 넣고,&lt;br /&gt;
WHERE&amp;nbsp; 대신에 ON 절을 넣으면 된다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;ANSI SQL 에서는 INNER JOIN을 사용 하는 구문이 정식 구문이라고 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;관련 링크&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.statwith.pe.kr/TABLE_JOIN/functions003.htm]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.statwith.pe.kr/TABLE_JOIN/functions003.htm&quot;&gt;http://www.statwith.pe.kr/TABLE_JOIN/functions003.htm&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.setisigns.net/310]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.setisigns.net/310&quot;&gt;http://www.setisigns.net/310&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://subversion.assembla.com/svn/oraclesql/%EB%87%8C%EC%9E%90%EA%B7%B9-Oralce%20PLSQL/05_02_join.sql]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://subversion.assembla.com/svn/oraclesql/%EB%87%8C%EC%9E%90%EA%B7%B9-Oralce%20PLSQL/05_02_join.sql&quot;&gt;http://subversion.assembla.com/svn/oraclesql/뇌자극-Oralce PLSQL/05_02_join.sql&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://idealab.tistory.com/34]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://idealab.tistory.com/34&quot;&gt;http://idealab.tistory.com/34&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://office.microsoft.com/ko-kr/help/HA012314871042.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://office.microsoft.com/ko-kr/help/HA012314871042.aspx&quot;&gt;http://office.microsoft.com/ko-kr/help/HA012314871042.aspx&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;p&gt;엮다 라는 표현이 참 좋다. : ), 12장에서 외부 조인에 대한 언급이 없으므로, 뒷장에 있을 것이라고 생각한다.&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1102-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>INNER JOIN</category>
			<category>내부 조인</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1102</guid>
			<comments>http://ikpil.com/1102#entry1102comment</comments>
			<pubDate>Sun, 31 Jan 2010 15:25:46 +0900</pubDate>
		</item>
		<item>
			<title>11장, 하위 쿼리 사용 : 서브 쿼리 사용 : Sub Query, 두 쿼리의 결합</title>
			<link>http://ikpil.com/1101</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾는 방법을 이번 장에서 알아 본다. 책에선 하위 쿼리라고 하는데, 한글로 번역하지 않고, 그냥 서브 쿼리라고 부르는게 더 좋다고 생각한다.(하위 쿼리라고 검색하면 정보가 서브 쿼리보다 적기 때문이다.)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 무엇을 SQL 쿼리라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;사전전 의미로 쿼리는 질의인데, DB에 &quot;어떤 어떤 것 주세요~&quot; 라고 요청하는 SQL 절을 쿼리라고 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 무엇을 서브 쿼&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;리&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt; 라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;쿼리 안에 있는 쿼리를 서브 쿼리 라고 한다. 내가 본 시야가 아닌 다른 사람이 본 시야도 같이 참조 하면 더욱 확실해 질 것이다.(이런 여러 시야로 대상을 바라보면, 3D 처럼 구조화 된다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;관련 링크&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://kukuta.tistory.com/128]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://kukuta.tistory.com/128&quot;&gt;http://kukuta.tistory.com/128&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-subquery.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-subquery.php&quot;&gt;http://sql.1keydata.com/kr/sql-subquery.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 언제 서브 쿼리가 필요한가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;DB에 접근하는 속도를 높이기 위해서, 테이블을 다른 테이블과 관계를 맺어 만든다. 왜냐하면 한 테이블에 많은 정보가 들어 있으면, 속도가 느려지기 때문이다. 이 말은 중복 값을 다른 테이블에 빼고 테이블을 참조 한다는 뜻이다. 이렇게 만들어진 테이블들은 원하는 정보를 가져올 때, 원하는 정보를 찾을 수 있도록 해 주는 키워드가 다른 테이블에 저장되어 있다. &lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;그러므로 다른 테이블에 있는 정보를 가져와 현재 테이블에서 찾고자 할 때, 서브 쿼리가 필요하다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. 어떻게 서브 쿼리를 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;p&gt;서브쿼리는 SQL 절에서 계산필드, FROM, WHERE, HAVING에 들어갈 수 있으며, 대개 WHERE 절에서 많이 쓰인다. 사용 방법은 다음과 같다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4-1 WHERE 절에서 사용 하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT *
FROM Orders
WHERE order_num IN (SELECT order_num
                    FROM OrderItems
                    WHERE prod_id = &#039;RGAN01&#039;);
&lt;/textarea&gt;&lt;br /&gt;
여기서 보면, IN ( 이곳 ) 에 들어 간 것이 서브 쿼리이다. &lt;span style=&quot;font-weight: bold;&quot;&gt;OrderItems 테이블 에서 prod_id = &#039;RGAN01&#039; 인 것 중 order_num을 가져와 Orders 테이블에서 order_num 에 비교하여 참인것들만 보여라.&lt;/span&gt; 란 뜻이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/170811054B651354614121&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/170811054B651354614121&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;UES_SUB_QUERY.png&quot; height=&quot;375&quot; width=&quot;466&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; font-size: 14pt;&quot;&gt;&lt;span&gt;4-2 계산 필드에서 사용 하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;보여줄 열이 SELECT의 결과로 쓰이는 형태로, 다음과 같이 사용 한다.&lt;br /&gt;
&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT
cust_name,
cust_state,
(SELECT COUNT(*)
 FROM Orders
 WHERE Orders.cust_id = Customers.cust_id
) AS orders
FROM Customers
ORDER BY cust_name;
&lt;/textarea&gt;&lt;br /&gt;
결과는 다음과 같다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/18072D054B6515AC287807&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/18072D054B6515AC287807&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;USE_SUB_QUERY_2.png&quot; height=&quot;530&quot; width=&quot;479&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4-3 FROM 에서 사용 하기&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;FROM 에서 사용 할 경우(써본적은 없다.)는 대부분 VIEW 테이블이지 않을까 한다. FROM 절에 있는 서브 쿼리로 결과를 얻은 것이 &quot;테이블&quot; 이라고 생각하고 사용 하면 된다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;마땅히 예자가 떠오르지 않아, 사용하기 위한 코드로써 남겨 둔다.&lt;br /&gt;
&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT
cust_id
FROM ( SELECT cust_id
       FROM orders ) AS foo
ORDER BY cust_id;
&lt;/textarea&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;5. 서브 쿼리 사용 규칙&lt;br /&gt;
&lt;/p&gt;&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;서브쿼리를 WHERE 절에 사용 할 땐, 출력 결과가 한개 열만 된다. (SELECT * FROM .... 이 안된다는 뜻)&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;서브쿼리를 계산 필드에 사용 할 땐, (출력 레코드 갯수 * 서브쿼리) 만큼 쿼리 량이 증가 된다. 이는 성능 정하를 나타낸다.&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;서브쿼리 말고 JOIN 으로도 결과를 나타낼 수 있을 땐, 두개의 성능을 비교 해 보는 것이 좋다.&lt;br /&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;관련 링크를 찾는 습관을 길러야 겠다고 느낀 장이였다.&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1101-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>SQL</category>
			<category>SUB QUERY</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1101</guid>
			<comments>http://ikpil.com/1101#entry1101comment</comments>
			<pubDate>Sun, 31 Jan 2010 14:46:23 +0900</pubDate>
		</item>
		<item>
			<title>10장, 데이터 그룹화 : 테이터를 그룹화 한다는 것은 무슨 뜻인가? : GROUP BY</title>
			<link>http://ikpil.com/1100</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이번에는 데이터를 그룹화 하는 것을 배운다. 같은 종류로 평가되는 데이터를 하나의 그룹으로 묶을 수 있다. 이러한 그룹을 집계를 할 수 있다. 그룹화와 집계, 이 둘을 &quot;모으다&quot; 개념 안경을 끼고 본다면, 테이블 테이터를 묶어 가공한다는 이야기이다. 그러므로 이번 10장은 이러한 데이터 묶음에 대해서 배운다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 무엇을 데이터 그룹화 라고 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;그룹화 한다는 말은 &quot;끼리끼리 모아 틀에 놓는 것&quot;을 의미한다. SQL, DB 세계에서 그룹화란 끼리끼리 모아 놓는것을 집계하는 것을 의미한다. 그래서 9장에서 집계 함수에 대해서 공부한 것이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 왜 데이터 그룹화 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;삼성, LG 에서 생산해 내는 품목은 몇개인가? 10 종류 품목을 생산하는 업체는 어디인가? 를 찾을 때 사용 한다. 즉, 회사와 품목을 그룹화 시키면, 회사당 품목 갯수를 알 수 있다. 그러므로 그룹으로 묶은 것을 집계 할 필요가 있을 때, 데이터 그룹화를 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 어떻게 데이터를 그룹화 시키는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;SELECT 절에 GROUP BY 절을 결합시키면 되는데, 어떻게 결합시키고 무엇을 GROUP BY 절에 넣어야 하는지 알아보자. 결합은 FROM 절 뒤, ORDER BY 절 앞에 둘 수 있다. 곰곰히 생각해 보면, 무엇을 어디서 어떻게, 가저 올지 결정해야 하므로, 어떻게 부분에 넣을 수 있다. 참고로 SQL에 있는 SELECT는 무엇을 --&amp;gt; 어디서 --&amp;gt; 어떻게 식으로 문장을 구성 시킨다. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;무엇을 그룹화 시킬지 결정하기 위해선 GROUP BY 절 뒤에 칼럼(열)이름을 입력하면 된다. 여러개를 입력 할 수 있고, 이때 이 의미는 그룹속에 그룹화를 시키겠다는 뜻이다. 이게 &lt;a title=&quot;[http://ko.wikipedia.org/wiki/%ED%94%84%EB%9E%99%ED%83%88]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://ko.wikipedia.org/wiki/%ED%94%84%EB%9E%99%ED%83%88&quot;&gt;프랙탈 구조&lt;/a&gt;로 계속 이어진다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;-- vend_id를 그룹화 시켜 보여라
SELECT vend_id
FROM Products
GROUP BY vend_id;

-- 중복 안된 vend_id를 보여라
SELECT DISTINCT vend_id
FROM Products;
&lt;/textarea&gt;&lt;br /&gt;
두개의 SQL절은 동일한 결과를 내는데, GROUP BY를 실제로 이렇게 쓰지는 않는다. GROUP BY 는 위에서 언급했듯이 그룹 당 집계를 할 때 사용 한다. 결과는 다음과 같다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/2028C6114B63AE150997F6&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/2028C6114B63AE150997F6&quot; alt=&quot;&quot; height=&quot;282&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/165F03114B63AE15B2A887&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/165F03114B63AE15B2A887&quot; alt=&quot;&quot; height=&quot;282&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;GROUP BY 절 규칙&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;각 열의 정보를 가져 올 수 없다. 항상 집계된 정보만 가져 올 수 있다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;중첩된 그룹을 사용할 경우, 그룹속에 구릅을 정의 하는 것이며, 마지막에 입력된 칼럼(열)이 기준이 된다.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;SELECT 절로 선택한 열은 집계 함수로 만든 열이거나 그룹 시킬 열만 올 수 있다.&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. WHERE + GROUP BY 는 어떤 의미이며, 어떻게 사용 되는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;WHERE 은 전체 레코드에서 필터링을 하는 것을 의미하고, GROUP BY는 그룹화 하는 것을 의미한다. 즉, 전체 레코드를 필터링 하고 그룹화 하라는 의미이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;SELECT vend_id, COUNT(*) AS product
FROM Products
WHERE prod_price &amp;gt; 10
GROUP BY vend_id;
&lt;/textarea&gt;&lt;br /&gt;
이 의미는 vend_id와 product를 Products에서 prod_price &amp;gt; 10 조건에 맞는 레코드를 vend_id로 그룹화 하라는 의미이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/185F5E0B4B63B6CA0A7739&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/185F5E0B4B63B6CA0A7739&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;WEHN_IT_USE_GROUP_BY_WITH_WHERE.png&quot; height=&quot;466&quot; width=&quot;475&quot;/&gt;&lt;/a&gt;&lt;/div&gt;이렇게 전체 대상을 필터링 하여 그룹화를 시킬 수 있는데, 그룹화 순서를 바꾸어서, 그룹화를 만저한 후에 그룹화된 결과를 필터링 하는 방법은 없을까? 있다. 그것이 바로 HAVING 절이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;5. GROUP BY + HAVING&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;HAVING 은 WHERE 에서 사용 되는 모든 연산자를 지원한다. &amp;gt; = &amp;lt; 등등, 중요한 것은 그룹화된 결과만 HAVING 으로 필터링 할 수 있으며, 위치는 GROUP BY 뒤에 HAVING 을 놓아야 한다. 그래야 HAVING 이 그룹화 한 후에 결과를 필터링 할 수 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/143C54014B63B85B5B1192&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/143C54014B63B85B5B1192&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;WHEN_GROUP_BY_USE_WITH_HAVING.png&quot; height=&quot;375&quot; width=&quot;466&quot;/&gt;&lt;/a&gt;&lt;/div&gt;여기서 WHERE과 HAVING을 구별 못할 수 있는데, 차이점을 다시 정리하면, WHERE은 전체 레코드를 필터링 할 때 사용 하며, HAVING은 그룹화된 레코드를 필터링 할 때 사용 한다. 그러므로 혼동하지 말아야 할 것이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;6. GROUP BY + ORDER BY&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;그룹화 된 레코드들은 정렬되어서 나오는것이 아니므로, 정렬이 필요할 땐 ORDER BY를 사용 해야 한다. 정렬이라는 것은 정렬될 대상이 있어야만 가능하다. 그러므로 ORDER BY 절은 모든 대상을 다 고른 다음 제일 뒤에 ORDER BY 를 놓어야 한다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/original/153CA9014B63B97E3B91C3&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/153CA9014B63B97E3B91C3&quot; alt=&quot;&quot; filemime=&quot;image/png&quot; filename=&quot;WHEN_A_GROUP_BY_USE_WITH_A_ORDER_BY.png&quot; height=&quot;375&quot; width=&quot;466&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;마지막으로, 설명이 부실한 편이 많은데, 이것은 관련 링크로 대체 하는게 좋을것 같다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; font-size: 14pt;&quot;&gt;관련링크&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-group-by.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-group-by.php&quot;&gt;http://sql.1keydata.com/kr/sql-group-by.php&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://flashcafe.org/4387]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://flashcafe.org/4387&quot;&gt;http://flashcafe.org/4387&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.w3schools.com/sql/sql_groupby.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/sql/sql_groupby.asp&quot;&gt;http://www.w3schools.com/sql/sql_groupby.asp&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a title=&quot;[http://www.daniweb.com/forums/thread32342.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.daniweb.com/forums/thread32342.html&quot;&gt;http://www.daniweb.com/forums/thread32342.html&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;누구나 안경을 끼고 사물을 봐야 한다고 생각한다. 그래야 여러 안경을 끼고 사물을 볼 수 있기 때문이다. 여기서 말하는 안경이 편견이 될 수 있어도, 이것을 받아드려야 한다. 그리고 이 편견이 변한다는 것 까지 받아 드려야 한다. 이는 좋은 안경을 만드는 기술이 되기 때문이다.&amp;nbsp; 뭐~ 개인적인 생각이지만 : )&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1100-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>group by</category>
			<category>having</category>
			<category>order by</category>
			<category>PostgreSQL</category>
			<category>SQL</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1100</guid>
			<comments>http://ikpil.com/1100#entry1100comment</comments>
			<pubDate>Sat, 30 Jan 2010 12:10:36 +0900</pubDate>
		</item>
		<item>
			<title>9장, 데이터 요약 : 테이블을 요약하는 방법 : COUNT(*)</title>
			<link>http://ikpil.com/1099</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이번 장은 테이블에 있는 데이터를 집계하는 방법을 알려 준다. SQL 절은 어떤 데이터를 DB에서 뽑아 올건지 결정한다. 라는 맥락에서 이해 한다면, &quot;이번 장은 테이블 데이터를 요약해서 뽑아 오는 것이겠군.&quot; 이라고 쉽게 생각 할 수 있을 것이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;Content&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. 무엇을 테이블 집계라 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&quot;있는 것을 새는 것&quot;을 집계라 한다. 그러므로 테이블 집계란 테이블에 있는 것을 원하는 유형으로 새는 것을 뜻한다. 원하는 유형이란? 밑에서 설명한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 어디에 테이블 집계를 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;테이블의 전체 갯수는 몇개 일까? 테이블에 기록된 사람들 중 제일 수학 공부를 제일 잘하는 사람은 누구일까? 테이블에 기록된 수학 점수 평균은 얼마일까? 등, 여러 데이터를 사용한 계산 값이 필요할 때 테이블 집계를 사용 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 어떻게 테이블 집계을 사용 하는가?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;테이블 집계는 집계 함수를 사용 하여, 집계한다. 집계 함수는 기본적으로 평균, 개수, 최대값, 최소값, 열 값의 합계 등등 유형이 있고, 각각의 DBMS에 더 많은 집계 함수들이 있다. 나는 PostgreSQL 을 이용하므로, PostgreSQL 집계 함수 메뉴얼 페이지를 링크를 걸겠다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;검색어 : aggregate function PostgreSQL 8.4&lt;br /&gt;
관련링크 : &lt;a title=&quot;[http://www.postgresql.org/docs/8.4/static/functions-aggregate.html]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.postgresql.org/docs/8.4/static/functions-aggregate.html&quot;&gt;http://www.postgresql.org/docs/8.4/static/functions-aggregate.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3-1 AVG 함수 사용 방법&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;avg는 열의 평균을 구하기 위하여 사용 한다. 사용법은 다음과 같다. 주의 해야 할 점은 숫자 칼럼(열)만 입력 될 수 있으며, NULL 인 레코드는 계산하지 않고 넘어 간다는 것을 기억해야 한다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;검색어 : avg sql&lt;br /&gt;
관련링크 : &lt;a title=&quot;[http://www.w3schools.com/SQL/sql_func_avg.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQL/sql_func_avg.asp&quot;&gt;http://www.w3schools.com/SQL/sql_func_avg.asp&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3-2 COUNT 함수 사용 방법&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;count 함수는 열의 개수를 구하기 위하여 사용 한다. NULL 값이라도 개수로 포함해야 할 땐 count(*) 를 지정해 주면 된다. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;검색어 : sql count&lt;br /&gt;
관련링크&lt;br /&gt;
&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-count.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-count.php&quot;&gt;http://sql.1keydata.com/kr/sql-count.php&lt;/a&gt;&lt;br /&gt;
&lt;a title=&quot;[http://www.w3schools.com/SQL/sql_func_count.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQL/sql_func_count.asp&quot;&gt;http://www.w3schools.com/SQL/sql_func_count.asp&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3-3 MIN 함수 사용 방법&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;min 함수는 열에서 제일 작은 값을 구할 때 사용 한다. 마찬가지로 NULL은 무시되고, 문자, 숫자, 시간 등등을 인자로 넣을 수 있다. DBMS마다 다를 수 있으니, 메뉴얼을 살펴 보는게 좋겠다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;검색어 : sql min&lt;br /&gt;
관련링크 : &lt;a title=&quot;[http://www.w3schools.com/SQl/sql_func_min.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQl/sql_func_min.asp&quot;&gt;http://www.w3schools.com/SQl/sql_func_min.asp&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3-4 MAX 함수 사용 방법&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;min 과 동일하다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;검색어 : sql max&lt;br /&gt;
관련링크 : &lt;a title=&quot;[http://www.w3schools.com/SQl/sql_func_max.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQl/sql_func_max.asp&quot;&gt;http://www.w3schools.com/SQl/sql_func_max.asp&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3-5 SUM 함수 사용 방법&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;sum 함수는 열에 있는 모든 데이터를 더할 때 사용 한다. NULL은 무시된다. 정수만 된다. DBMS마다 다를 수 있으니 메뉴얼 참조하는게 좋겠다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;검색어 : sql sum&lt;br /&gt;
관련링크 : &lt;a title=&quot;[http://www.w3schools.com/SQl/sql_func_sum.asp]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.w3schools.com/SQl/sql_func_sum.asp&quot;&gt;http://www.w3schools.com/SQl/sql_func_sum.asp&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; font-size: 14pt;&quot;&gt;4. 이것 외로 더 알아야 할 사항이 있는가?&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;있다. 바로 DISTINCT 절이다. 고유한 값만 집계하고자 할 때 사용 한다. 어떻게 사용하는가? 다음 SQL 절을 보라.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;textarea class=&quot;brush:sql&quot;&gt;-- 고유한 값에서만 평균을 내고자 할 때.
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = &#039;DLL01&#039;;

-- 전체에 대해서 평균을 내고자 할 때
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vend_id = &#039;DLL01&#039;;

-- 전체를 한번 보기
SELECT prod_price
FROM products
WHERE vend_id = &#039;DLL01&#039;;
&lt;/textarea&gt;&lt;br /&gt;
각 SQL 절을 보고, 결과를 내면서 어떻게 변화 되는지 보면, &quot;고유한 값&quot;만 집계 할 수 있는 것을 알 수 있다. 이 밖에도 다양한 사용 방법이 있다. DISTINCT 절 뒤에 오는 칼럼(열)이 고유한 것만 걸러내며, 칼럼(열)이 여러개일 경우, 그 칼럼(열)들을 하나로 보고, 이것이 고유한지 평가하게 된다. 링크를 통해 어떻게 변화하는지 관찰하면 쉽게 알 수 있을 것이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;검색어 : sql DISTINCT&lt;br /&gt;
관련링크&lt;br /&gt;
&lt;a title=&quot;[http://sql.1keydata.com/kr/sql-distinct.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://sql.1keydata.com/kr/sql-distinct.php&quot;&gt;http://sql.1keydata.com/kr/sql-distinct.php&lt;/a&gt;&lt;br /&gt;
&lt;a title=&quot;[http://www.sql-tutorial.com/sql-distinct-sql-tutorial/]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.sql-tutorial.com/sql-distinct-sql-tutorial/&quot;&gt;http://www.sql-tutorial.com/sql-distinct-sql-tutorial/&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;팁&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;집계 함수나 기타 다른 이유로 새롭게 보이는 열에 별칭(별명)을 줄 경우, 기존 테이블에 없는 칼럼(열) 이름을 선택하는게 좋다. 예기치 않은 오류가 날 수 있기 때문이다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; font-size: 18pt;&quot;&gt;Digression&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;모든것을 다 정리할 필요는 없다. 정리되어 있는 것을 링크를 거는 것도(이) 필요하다.(편하다)&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1099-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://cfs.tistory.com/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>하루 10분씩 핵심만 골라 마스터하는 SQL</category>
			<category>aggregate function</category>
			<category>SQL</category>
			<category>집계함수</category>
			<author>농사를 짓는 게임 프로그래머 최익필</author>
			<guid>http://ikpil.com/1099</guid>
			<comments>http://ikpil.com/1099#entry1099comment</comments>
			<pubDate>Sat, 30 Jan 2010 01:16:48 +0900</pubDate>
		</item>
	</channel>
</rss>
