{"componentChunkName":"component---src-templates-blog-post-js","path":"/Database/2020-03-17-데이터베이스-SQL기본문법/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"95b68566-f62a-5e8d-b047-4b00ce4527d7","excerpt":"SQL? SQL은 relation database 를 관리하기 위해 만들어진 언어이다. SQL은 다음과 같은 두 가지 sublanguage 를 포함하고 있다. Data-Defining sublanguage(DDL): 데이터베이스 schema를 선언하기 위한 언어 Data-Manipulation sunlanguage(DML): 데이터베이스를 수정하기위한 언어이고, 데이터베이스의 수정을 위해 데이터베이스에게 요청하는 과정을 querying 이라고 한다. Relations in SQL SQL…","html":"<h2 id=\"sql\" style=\"position:relative;\"><a href=\"#sql\" aria-label=\"sql permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SQL?</h2>\n<p>SQL은 relation database 를 관리하기 위해 만들어진 언어이다. SQL은 다음과 같은 두 가지 sublanguage 를 포함하고 있다.</p>\n<ol>\n<li>Data-Defining sublanguage(DDL): 데이터베이스 schema를 선언하기 위한 언어</li>\n<li>Data-Manipulation sunlanguage(DML): 데이터베이스를 수정하기위한 언어이고, 데이터베이스의 수정을 위해 데이터베이스에게 요청하는 과정을 querying 이라고 한다.</li>\n</ol>\n<h2 id=\"relations-in-sql\" style=\"position:relative;\"><a href=\"#relations-in-sql\" aria-label=\"relations in sql permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Relations in SQL</h2>\n<p>SQL은 세 종류의 relation을 만들 수 있다.</p>\n<ol>\n<li>Table: 일반적으로 우리가 말하는 relation의 형태를 띄는 종류이다. 데이터들이 tuple로 묶여서 relation 안으로 들어가고 query를 통해서 수정되고 추가될 수 있다.</li>\n<li>View: 연산의 결과로 만들어지는 relation이다. 실제 물리적으로는 저장되어있지 않지만 가상의 테이블을 만들어 연산을 돕는 기능이다.</li>\n<li>Temporary table: query를 통해 데이터베이스가 수정될 때 임시적으로 만들어지는 relation이다. 오로지 연산을 위해서만 사용되고 사용이 끝나면 곧바로 버려진다.</li>\n</ol>\n<h2 id=\"data-types-in-sql\" style=\"position:relative;\"><a href=\"#data-types-in-sql\" aria-label=\"data types in sql permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data Types in SQL</h2>\n<p>SQL 은 대부분의 primitive datatype을 지원한다.</p>\n<h3 id=\"string\" style=\"position:relative;\"><a href=\"#string\" aria-label=\"string permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>String</h3>\n<p>String 은 고정되거나 변위하는 char형의 배열로 만들어진다</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">CHAR</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span> <span class=\"token comment\">-- 고정된 길이 n 만큼의 문자열</span>\n<span class=\"token keyword\">VARCHAR</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span> <span class=\"token comment\">-- 고정된 길이 n 만큼의 문자열</span></code></pre></div>\n<h4 id=\"char-vs-varchar\" style=\"position:relative;\"><a href=\"#char-vs-varchar\" aria-label=\"char vs varchar permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CHAR vs. VARCHAR</h4>\n<p>두 자료형이 별로 차이가 없어보인다. 두 자료형의 차이는 빈공간을 어떻게 채우는지에 따라 다르다. 만약에 CHAR(4) 안에 길이가 2인 ‘AB’ 를 넣고 AB 뒤에 공백 두개가 더 추가된 ‘AB ’ 와 비교하면 두 문자열은 같다는 결과가 나올 것이다. 왜냐하면 CHAR는 입력되는 문자열의 길이와 상관없이 초기에 지정한 길이를 반드시 채우기 때문이다. 따라서 실제로 사용자는 ‘AB’ 를 넣었지만 변수 안에는 ‘AB ’ 이렇게 공백까지 들어가있는 셈이 된다. 하지만 VARCHAR는 공백도 문자로 취급한다. 따라서 VARCHAR(4) 안에 ‘AB ’ 를 넣고 ‘AB ’ 와 비교하면 VARCHAR에는 공백이 하나밖에 없기 때문에 둘은 다르다는 결과를 얻게 될 것이다. 따라서 일반적으로 길이가 항상 고정되어 있는 데이터를 다룰 때에는 CHAR, 길이가 변할 수 있는 데이터를 다룰 때에는 VARCHAR를 사용한다.</p>\n<h3 id=\"bit\" style=\"position:relative;\"><a href=\"#bit\" aria-label=\"bit permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Bit</h3>\n<p>단순히 비트들도 연속성 있게 표현할 수 있는데, 이떄 역시 고정 크기인 BIT로 표현하거나 가변크기인 BIT VARYING 으로 표현할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">BIT</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">BIT</span> <span class=\"token keyword\">VARYING</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"boolean\" style=\"position:relative;\"><a href=\"#boolean\" aria-label=\"boolean permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Boolean</h3>\n<p>우리가 잘 아는 TRUE/FALSE 를 가지는 자료형이다. SQL은 특이하게 TRUE/FALSE 와 함께 UNKNOWN 값이 존재한다. UNKNOWN은 null이라고 생각하자.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">BOOLEAN</span>\n<span class=\"token boolean\">FALSE</span>\n<span class=\"token boolean\">TRUE</span>\n<span class=\"token boolean\">NULL</span> <span class=\"token comment\">-- UNKNOWN</span></code></pre></div>\n<h3 id=\"integer\" style=\"position:relative;\"><a href=\"#integer\" aria-label=\"integer permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Integer</h3>\n<p>정수는 INT 혹은 INTEGER로 나타낸다. 더 작은 크기의 정수를 나타내기 위한 SHORTINT 도 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">INT</span>\n<span class=\"token keyword\">INTEGER</span> <span class=\"token comment\">-- INT와 같은 의미이다.</span>\nSHORTINT</code></pre></div>\n<h3 id=\"floating-point\" style=\"position:relative;\"><a href=\"#floating-point\" aria-label=\"floating point permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Floating Point</h3>\n<p>실수는 다양한 방법으로 나타낼 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">FLOAT</span>\n<span class=\"token keyword\">REAL</span> <span class=\"token comment\">-- FLOAT과 같은 의미이다.</span>\n\n<span class=\"token keyword\">DOUBLE</span> <span class=\"token keyword\">PRECISION</span> <span class=\"token comment\">-- 더 긴 소수점 자리수를 표현할 때</span>\n<span class=\"token keyword\">DECIMAL</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span> <span class=\"token comment\">-- n 은 소수를 포함한 총 자리수, d는 소수점의 자리수</span>\n<span class=\"token keyword\">NUMERIC</span> <span class=\"token comment\">-- DECIMAL과 같은 의미이다.</span></code></pre></div>\n<h3 id=\"data-and-time\" style=\"position:relative;\"><a href=\"#data-and-time\" aria-label=\"data and time permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data and Time</h3>\n<p>다른 프로그래밍 언어와 조금 다르게 시간과 날짜에 대한 자료형이 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">DATE</span>\n<span class=\"token keyword\">TIME</span></code></pre></div>\n<h2 id=\"lets-dive-into-sql\" style=\"position:relative;\"><a href=\"#lets-dive-into-sql\" aria-label=\"lets dive into sql permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Let’s Dive into SQL!</h2>\n<p>기본적인 SQL에 대한 지식은 보았으니, SQL로 데이터베이스를 조작해보자.</p>\n<h3 id=\"table-declaration\" style=\"position:relative;\"><a href=\"#table-declaration\" aria-label=\"table declaration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Table Declaration</h3>\n<p>먼저, 테이블을 만들어보자. relation schema는 CREATE TABLE 이라는 명령어를 통해 만들 수 있다. 테이블을 만들면서 attribute 와 domain 까지 지정할 수 있는데 다음 과 같이 만들면 된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">TABLE</span> Department<span class=\"token punctuation\">(</span>\n    Dep<span class=\"token punctuation\">.</span>Name    <span class=\"token keyword\">CHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>Stu     <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>prof    <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>alum    <span class=\"token keyword\">INT</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>이렇게 하면 Department라는 이름의, attribute를 네 개 가지고 있는 테이블이 만들어진다.</p>\n<h3 id=\"modifying-relation\" style=\"position:relative;\"><a href=\"#modifying-relation\" aria-label=\"modifying relation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Modifying Relation</h3>\n<h3 id=\"remove-table\" style=\"position:relative;\"><a href=\"#remove-table\" aria-label=\"remove table permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Remove table</h3>\n<p>만약에 만들어진 테이블을 지우고 싶다면 어떻게 해야할까. DROP 키워드를 사용해서 삭제해보자.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">DROP</span> <span class=\"token keyword\">TABLE</span> Department</code></pre></div>\n<p>이렇게 명령어를 입력하면 Department 라는 이름을 가진 테이블이 데이터베이스에서 삭제된다.</p>\n<h3 id=\"modify-table\" style=\"position:relative;\"><a href=\"#modify-table\" aria-label=\"modify table permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Modify table</h3>\n<p>사실 테이블 잔체를 삭제하는 경우는 잘 없다. 삭제나 수정은 보통 부분적으로 일어나는 경우가 많은데 다음과 같은 명령어로 처리하게 된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">ALTER</span> <span class=\"token keyword\">TABLE</span> Departmet <span class=\"token keyword\">ADD</span> Foundyear <span class=\"token comment\">-- Department 테이블에 Foundyear라는 attribute 를 추가한다.</span>\n<span class=\"token keyword\">ALTER</span> <span class=\"token keyword\">TABLE</span> Department <span class=\"token keyword\">DROP</span> Foundyear <span class=\"token comment\">-- Department 테이블에 Foundyear라는 attribute 를 삭제한다.</span></code></pre></div>\n<p>위의 두 명령어를 사용하면 relation 안에 들어있는 attribute들을 삭제하거나 추가할 수 있다.</p>\n<h3 id=\"default-value\" style=\"position:relative;\"><a href=\"#default-value\" aria-label=\"default value permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Default Value</h3>\n<p>우리는 tuple에 있는 모든 component에 데이터를 넣을 수 있지만, 데이터를 방금 만들어서 집어넣거나 ADD 명령어를 통해서 새로운 attribute를 만들었을 때와 같은 경우에서는 component 안에 데이터가 없을 수도 있다. 기본적으로 사용자가 입력하지 않은 데이터들은 모두 NULL로 초기화가 된다. 하지만 특정한 attribute에 대해서 기본값을 정해줄 수 있는데, 그 키워드가 DEFAULT 이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\">Name <span class=\"token keyword\">CHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">DEFAULT</span> <span class=\"token string\">'?'</span> <span class=\"token comment\">-- Name attribute의 기본값을 ?로 설정</span></code></pre></div>\n<p>Default와 table alter를 함께 사용해서 새로운 attribute를 생성하면서 동시에 기본값을 정의해주는 방법도 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">ALTER</span> <span class=\"token keyword\">TABLE</span> professor <span class=\"token keyword\">ADD</span> phonenum <span class=\"token keyword\">CHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">11</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">DEFAULT</span> <span class=\"token string\">'unknown'</span></code></pre></div>\n<p>이렇게 하면 professor 라는 테이블에 phonenum이라는 attribute 를 추가하고 그 기본값이 unknown이 되도록 할 수 있다.</p>\n<h3 id=\"declaring-keys\" style=\"position:relative;\"><a href=\"#declaring-keys\" aria-label=\"declaring keys permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Declaring Keys</h3>\n<p>CREATE KEY 를 하면서 한 개 이상의 attribute를 key로 지정해주는 것이 가능하다. KEY를 지정할 때는 PRIMARY KEY, 혹은 UNIQUE를 사용해서 지정해주면 된다. PRIMARY KEY 와 UNIQUE의 차이점은 PRIMARY KEY로 설정된 attribute 안에서는 모든 component들이 NULL을 가질 수 없고, 동일한 값을 가질 수도 없다. 하지만 UNIQUE에서는 동일한 값은 역시 가질 수 없지만 여러개의 NULL을 component가 가지는 것은 허용한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">TABLE</span> Department<span class=\"token punctuation\">(</span>\n    Dep<span class=\"token punctuation\">.</span>Name    <span class=\"token keyword\">CHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">PRIMARY</span> <span class=\"token keyword\">KEY</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>Stu     <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>prof    <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>alum    <span class=\"token keyword\">INT</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>이렇게도 가능하고</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">CREATE</span> <span class=\"token keyword\">TABLE</span> Department<span class=\"token punctuation\">(</span>\n    Dep<span class=\"token punctuation\">.</span>Name    <span class=\"token keyword\">CHAR</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>Stu     <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>prof    <span class=\"token keyword\">INT</span><span class=\"token punctuation\">,</span>\n    Num<span class=\"token punctuation\">.</span>alum    <span class=\"token keyword\">INT</span>\n\n    <span class=\"token keyword\">PRIMARY</span> <span class=\"token keyword\">KEY</span><span class=\"token punctuation\">(</span>Dep<span class=\"token punctuation\">.</span>Name<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>이렇게 attribute를 먼저 만들고 key를 지정해주는 것도 가능하다.</p>","frontmatter":{"title":"[데이터베이스] SQL 기본문법과 자료형","date":"March 17, 2020"}}},"pageContext":{"slug":"/Database/2020-03-17-데이터베이스-SQL기본문법/","previous":{"fields":{"slug":"/Database/2020-03-15-데이터베이스-관계형데이터모델/"},"frontmatter":{"title":"[데이터베이스] 관계형 데이터 모델(Relational Model of Data)","category":"Database","draft":false}},"next":{"fields":{"slug":"/Operating-Systems/2020-03-21-운영체제-시스템콜/"},"frontmatter":{"title":"[운영체제] 시스템 콜(System Call)","category":"Operating-Systems","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}