티스토리 뷰




데이터베이스를 처리하기 위한 언어는 DDL, DML, DCL이 있습니다. 이 부분에 대해서 명확히 알고자 하시는 분은 아래의 링크를 참고하시기 바랍니다. 



이 글에서는 DDL과 DML에서 자주 사용되는 명령어에 대해서 알아보도록 하겠습니다. 이 글에서 설명드릴 명령어는 아래와 같습니다. 

  • 데이터 베이스 생성 : Create Database 구문
  • 테이터 베이스 이용 : Use 구문
  • 테이블 생성 : Create Table 구문
  • 테이블 정보 확인 : sp_columns 구문
  • 테이블에 데이터 입력 : Insert Into 구문
  • 테이블에서 데이터 가져오기 : Select 구문
  • 테이블 삭제 : Drop Table 구문

1) 데이터베이스 생성하기 - Create Database 


데이터베이스를 생성하기 위해서는 Create Database 명령어가 사용됩니다. Create Database 명령어의 구문은 아래와 같습니다. []내의 내용은 필수항목이 아닙니다. 관련된 내용은 아래의 링크를 참조하시기 바랍니다.



Create a database

CREATE DATABASE database_name 

[ CONTAINMENT = { NONE | PARTIAL } ]

[ ON 

      [ PRIMARY ] <filespec> [ ,...n ] 

      [ , <filegroup> [ ,...n ] ] 

      [ LOG ON <filespec> [ ,...n ] ] 

[ COLLATE collation_name ]

[ WITH  <option> [,...n ] ]

[;]


<option> ::=

{

      FILESTREAM ( <filestream_option> [,...n ] )

    | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias }

    | DEFAULT_LANGUAGE = { lcid | language_name | language_alias }

    | NESTED_TRIGGERS = { OFF | ON }

    | TRANSFORM_NOISE_WORDS = { OFF | ON}

    | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> 

    | DB_CHAINING { OFF | ON }

    | TRUSTWORTHY { OFF | ON }

}


<filestream_option> ::=

{

      NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL }

    | DIRECTORY_NAME = 'directory_name' 

}


<filespec> ::= 

{

(

    NAME = logical_file_name ,

    FILENAME = { 'os_file_name' | 'filestream_path' } 

    [ , SIZE = size [ KB | MB | GB | TB ] ] 

    [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 

    [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]

)

}


<filegroup> ::= 

{

FILEGROUP filegroup name [ [ CONTAINS FILESTREAM ] [ DEFAULT ] | CONTAINS MEMORY_OPTIMIZED_DATA ]

    <filespec> [ ,...n ]

}


<service_broker_option> ::=

{

    ENABLE_BROKER

  | NEW_BROKER

  | ERROR_BROKER_CONVERSATIONS

}


아래는 MSSQL에서 Create Database를 한 결과입니다. 



2) 데이터베이스 사용하기 - Use 


데이터베이스를 사용하기 위해서는 Use 명령어가 사용됩니다. Use 명령어의 구문은 아래와 같습니다. []내의 내용은 필수항목이 아닙니다. 관련된 내용은 아래의 링크를 참조하시기 바랍니다.



USE { database }


아래는 MSSQL에서 Use 를 한 결과입니다. 




3) 데이터베이스 테이블 생성하기 - Create Table 


데이터베이스를 본격적으로 사용하기 위해서 알아야 할 개념은 Table입니다. Table은 데이터를 가진 집합이라고 볼 수 있습니다. Table의 Column은 각 데이터의 특성에 맞게 정의가 되고, 설정된 Column에 따라 데이터를 삽입합니다. 삽입된 데이터는 Row로 구분이 되게 됩니다. 이를 사용하기 위해서는 Create Table 명령어가 사용됩니다. 


Create Table 명령어의 구문은 아래와 같습니다. []내의 내용은 필수항목이 아닙니다. 관련된 내용은 아래의 링크를 참조하시기 바랍니다.



--Disk-Based CREATE TABLE Syntax

CREATE TABLE 

    [ database_name . [ schema_name ] . | schema_name . ] table_name 

    [ AS FileTable ]

    ( { <column_definition> | <computed_column_definition> 

        | <column_set_definition> | [ <table_constraint> ] 

| [ <table_index> ] [ ,...n ] } )

    [ ON { partition_scheme_name ( partition_column_name ) | filegroup 

        | "default" } ] 

    [ { TEXTIMAGE_ON { filegroup | "default" } ] 

    [ FILESTREAM_ON { partition_scheme_name | filegroup 

        | "default" } ]

    [ WITH ( <table_option> [ ,...n ] ) ]

[ ; ]


<column_definition> ::= 

column_name <data_type>

    [ FILESTREAM ]

    [ COLLATE collation_name ] 

    [ SPARSE ]

    [ NULL | NOT NULL ]

    [ 

        [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] 

      | [ IDENTITY [ ( seed,increment ) ] [ NOT FOR REPLICATION ] 

    ]

    [ ROWGUIDCOL ]

    [ <column_constraint> [ ...n ] ] 

    [ <column_index> ]


<data type> ::= 

[ type_schema_name . ] type_name 

    [ ( precision [ , scale ] | max | 

        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ] 


<column_constraint> ::= 

[ CONSTRAINT constraint_name ] 

{     { PRIMARY KEY | UNIQUE } 

        [ CLUSTERED | NONCLUSTERED ] 

        [ 

            WITH FILLFACTOR = fillfactor  

          | WITH ( < index_option > [ , ...n ] ) 

        ] 

        [ ON { partition_scheme_name ( partition_column_name ) 

            | filegroup | "default" } ]


  | [ FOREIGN KEY ] 

        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ] 

        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 

        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 

        [ NOT FOR REPLICATION ] 


  | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 


<column_index> ::= 

 INDEX index_name [ CLUSTERED | NONCLUSTERED ]

    [ WITH ( <index_option> [ ,... n ] ) ]

    [ ON { partition_scheme_name (column_name ) 

         | filegroup_name

         | default 

         }

    ] 

    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]


<computed_column_definition> ::= 

column_name AS computed_column_expression 

[ PERSISTED [ NOT NULL ] ]

    [ CONSTRAINT constraint_name ]

    { PRIMARY KEY | UNIQUE }

        [ CLUSTERED | NONCLUSTERED ]

        [ 

            WITH FILLFACTOR = fillfactor 

          | WITH ( <index_option> [ , ...n ] )

        ]

        [ ON { partition_scheme_name ( partition_column_name ) 

        | filegroup | "default" } ]


    | [ FOREIGN KEY ] 

        REFERENCES referenced_table_name [ ( ref_column ) ] 

        [ ON DELETE { NO ACTION | CASCADE } ] 

        [ ON UPDATE { NO ACTION } ] 

        [ NOT FOR REPLICATION ] 


    | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 


<column_set_definition> ::= 

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS


< table_constraint > ::=

[ CONSTRAINT constraint_name ] 

    { PRIMARY KEY | UNIQUE } 

        [ CLUSTERED | NONCLUSTERED ] 

        (column [ ASC | DESC ] [ ,...n ] ) 

        [ 

            WITH FILLFACTOR = fillfactor 

           |WITH ( <index_option> [ , ...n ] ) 

        ]

        [ ON { partition_scheme_name (partition_column_name)

            | filegroup | "default" } ] 

    | FOREIGN KEY 

        ( column [ ,...n ] ) 

        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ] 

        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 

        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 

        [ NOT FOR REPLICATION ] 

    | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 


< table_index > ::= 

INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] ) 

    

    [ WITH ( <index_option> [ ,... n ] ) ] 

    [ ON { partition_scheme_name (column_name ) 

         | filegroup_name

         | default 

         }

    ] 

    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]


<table_option> ::=

{

    [DATA_COMPRESSION = { NONE | ROW | PAGE }

      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 

      [ , ...n ] ) ]]

    [ FILETABLE_DIRECTORY = <directory_name> ] 

    [ FILETABLE_COLLATE_FILENAME = { <collation_name> | database_default } ]

    [ FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <constraint_name> ]

    [ FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]

    [ FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]

}


<index_option> ::=

    PAD_INDEX = { ON | OFF } 

  | FILLFACTOR = fillfactor 

  | IGNORE_DUP_KEY = { ON | OFF } 

  | STATISTICS_NORECOMPUTE = { ON | OFF } 

  | ALLOW_ROW_LOCKS = { ON | OFF} 

  | ALLOW_PAGE_LOCKS ={ ON | OFF} 

  | DATA_COMPRESSION = { NONE | ROW | PAGE }

       [ ON PARTITIONS ( { <partition_number_expression> | <range> } 

       [ , ...n ] ) ]

}

<range> ::= 

<partition_number_expression> TO <partition_number_expression>


아래는 MSSQL에서 Create Table을 한  결과입니다. 2개의 String 값을 넣는 Column(ColumnName1, ColumnName2)를 생성하였습니다. 뒤에 붙은 not null은 이 Column에 Null값이 들어갈 수 없게끔 설정하는 방법입니다. 이렇게 설정을 하게 되면 데이터를 삽입할 때 절대 비워서 데이터를 넣을 수 없습니다.



Not Null로 지정된 상태에서 아래와 같이 Insert 구문을 사용하게 되면 사진과 같이 Error가 발생을 하게됩니다. 반드시 넣어야 되는 자료라고 하면 Not Null로 지정을 하는게 좋습니다. 



아래의 그림은 기본값으로 어떤값을 넣을지를 설정하는 방법입니다. 기본적으로 데이터를 삽입할 때 각 Column의 값에 대한 기본값을 설정해 놓았습니다. 



기본값을 지정한 상태에서 Insert 구문에서 columnName2를 넣지 않고, columnName1에만 값을 넣어 보았습니다. Not Null만 지정을 하게 되면 에러가 발생을 하지만 기본값이 지정이 되어 있으면 에러 없이 삽입이 됩니다. 



위에서 삽입한 데이터를 확인하게 되면 columnName2에는 자동적으로 Default2라는 값이 들어간것을 확인할 수 있습니다. 




4) 테이블 정보를 확인하기 - sp_columns


데이터를 원활한 삽입을 위해서나, 외부에서 디자인된 데이터베이스를 사용하기 위해서는 이미 생성된 테이블의 정보를 확인할 방법이 필요합니다. MySQL과는 다르게 MSSQL에서는 sp_columns라는 명령어를 사용할 수 있습니다. 이 명령어를 사용하게 되면 현재 환경에서 쿼리할 수 있는 지정된 개체에 대한 열 정보를 반환합니다. 관련된 내용은 아래의 링크를 참조하시기 바랍니다.



sp_columns [ @table_name = ] object  [ , [ @table_owner = ] owner ] 

     [ , [ @table_qualifier = ] qualifier ] 

     [ , [ @column_name = ] column ] 

     [ , [ @ODBCVer = ] ODBCVer ]


아래는 MSSQL에서 sp_columns 를 한 결과입니다. 




5) 데이터베이스에 데이터 삽입 및 가져오기 - Insert & Select


데이터베이스에 생성된 테이블에 데이터를 넣기 위해서는 Insert 명령어가 사용됩니다. Insert 명령어의 구문은 아래와 같습니다. []내의 내용은 필수항목이 아닙니다. 관련된 내용은 아래의 링크를 참조하시기 바랍니다.



[ WITH <common_table_expression> [ ,...n ] ]

INSERT 

{

        [ TOP ( expression ) [ PERCENT ] ] 

        [ INTO ] 

        { <object> | rowset_function_limited 

          [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]

        }

    {

        [ ( column_list ) ] 

        [ <OUTPUT Clause> ]

        { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n     ] 

        | derived_table 

        | execute_statement

        | <dml_table_source>

        | DEFAULT VALUES 

        }

    }

}

[;]


데이터를 삽입하면, 가져오는 방법도 알아야 합니다. 데이터를 가져오기 위해서는 Select 명령어가 사용됩니다. Insert 명령어의 구문은 아래와 같습니다. []내의 내용은 필수항목이 아닙니다. 관련된 내용은 아래의 링크를 참조하시기 바랍니다.



<SELECT statement> ::=  

    [WITH <common_table_expression> [,...n]]

    <query_expression> 

    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 

  [ ,...n ] ] 

    [ <FOR Clause>] 

    [ OPTION ( <query_hint> [ ,...n ] ) ] 

<query_expression> ::= 

    { <query_specification> | ( <query_expression> ) } 

    [  { UNION [ ALL ] | EXCEPT | INTERSECT }

        <query_specification> | ( <query_expression> ) [...n ] ] 

<query_specification> ::= 

SELECT [ ALL | DISTINCT ] 

    [TOP ( expression ) [PERCENT] [ WITH TIES ] ] 

    < select_list > 

    [ INTO new_table ] 

    [ FROM { <table_source> } [ ,...n ] ] 

    [ WHERE <search_condition> ] 

    [ <GROUP BY> ] 

    [ HAVING < search_condition > ] 


아래는 MSSQL에서 Insert와 Select 를 한 결과입니다. 



6) 테이블을 삭제하기 - Drop


데이터베이스에서 사용하고 있는 테이블을 지워야 할 때는 Drop 명령어가 사용됩니다. Drop명령어의 구문은 아래와 같습니다. []내의 내용은 필수항목이 아닙니다. 관련된 내용은 아래의 링크를 참조하시기 바랍니다.



DROP TABLE [ database_name . [ schema_name ] . | schema_name . ]

table_name [ ,...n ]

 [ ; ]


아래는 MSSQL에서 Drop를 한 결과입니다. 



이 글에서는 데이터베이스에서 사용하는 SQL 기초 명령어 및 사용에 대한 결과를 알아보았습니다. 


이 글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.



댓글