SQL

대문 / 프로그래밍 / SQL

SQL

1.1. 시작하기전에

구조화된 어떠한 일련의 Data를 Database라고 합니다.

이 문서는 이러한 Database를 다루기 위해서 특별하게 고안된 언어인 SQL(Structured Query Language, 구조적 질의 언어)에 대하여 가장 기초적인 부분을 간단히 요약하는 형태가 될겁니다.

여기서는 MySQL 을 기준으로 내용을 정리하였습니다.

MySQL은? - 오라클의 무료(부분유료) 오픈소스 RDBMS(관계형 데이터 베이스 시스템)

1.2. Database 용어정리

  • DB (Database)
    구조화된 방식으로 저장된 일련의 Data들의 집합

  • DBMS (Database Management System)
    Data를 추가/변경/삭제/검색/트랜잭션(Transaction)등을 효과적으로 관리해주는 Software package들

    데이터를 저장하고 유지보수(수정, 삭제, 추가)하고 이를 검색하는 시스템

    CRUD(Create, Retrieve, Update, Delete)

  • RDBMS (Relational Database Management System)
    관계형(Relational) 데이터베이스 시스템

    테이블(Table based)기반의 DBMS

  • 트랜젝션 (Transaction)
    Data의 무결성을 보장하기 위하여 필요한 일련의 작업들을 하나의 기본작업단위로 처리하는 것

  • 테이블 (Table)
    특정한 주제를 기반으로 Data를 저장할수 있는 구조적으로 만든것

  • 스키마 (Schema)
    Data의 구조를 정의하기 위한 논리구조

  • 레코드(Record) 또는 행(Row)
    하나의 논리적 Data단위

  • 컬럼(Column) 또는 필드(Field)
    Row(행)를 구성하는 항목

  • 도메인값 (Domain Value)
    각 컬럼(Column)에서 나올 수 있는 후보값

  • SQL쿼리 (SQL Query)
    관계형 DBMS를 사용하는 전용 질의언어

  • 기본키 (Primary Key, PK)
    테이블(Table)에서 하나의 레코드(Record)를 지정할 수 있는 하나 이상의 컬럼집합

  • 외래키 (Foreign Key, FK)
    어떤 테이블(Table)의 기본키가 다른 테이블(Table)의 컬럼(Column)에 들어 있을 경우

1.3. SQL의 종류

1.3.1. DML (Data Manipulation Language)

  • 테이블(Table)의 Data를 CRUD(Create, Retrieve, Update, Delete) 하는 기능
  • 예) INSERT, SELECT, UPDATE, DELETE

  • INSERT
    INSERT INTO <Table-name>(<Column-name>[, ...]) VALUES (<값>[, ...]);
    
  • SELECT
    SELECT <Column-name>[, ...] FROM <Table-name> WHERE <조건절>;
    
  • UPDATE
    UPDATE <Table-name> SET <Column-name>=<값>[, ...] WHERE <조건절>;
    
  • DELETE
    DELETE FROM <Table-name> WHERE <조건절>;
    

1.3.2. DDL (Data Definition Language)

  • DB, 테이블(Table)의 스키마(Schema)를 정의(Define), 수정(Modify)하는 기능
  • 테이블(Table)의 생성, 컬럼(Column) 추가, 타입변경, 각종 제약조건 지정, 수정 등
  • 예) CREATE, DROP, ALTER

1.3.3. DCL (Data Control Language)

  • DB(Database)나 테이블(Table)의 접근권한이나 CRUD(Create, Retrieve, Update, Delete) 권한을 정의하는 기능
  • 특정 사용자에게 테이블(Table)의 조회권한 허가/금지 등
  • 예) GRANT, REVOKE

1.4. 기초 명령

특별히 명령에 대소문자를 구분하지는 않으나 Data 내용을 지칭하는 부분은 대소문자를 구분합니다.

  • Database들의 목록 확인
    SHOW DATABASES;
    
  • 지정한 Database를 사용함을 지정
    USE <Database-name>;
    
  • Table들의 목록 확인
    SHOW [FULL] TABLES [{FROM | IN} <Database-name>] [LIKE '<pattern>' | WHERE <expression>];
    
  • 지정한 Table의 구조를 확인
    DESCRIBE <Table-name> [<Column-name> | <Wild>];
    
    또는
    
    SHOW CREATE TABLE <Table-name>;
    
  • 지정한 Table의 내용을 확인
    SELECT * FROM <Table-name>;
    

1.5. 간단한 상황에 따른 SQL구문정리

  • Database 선택
    USE <Database name>;
    


  • 지정한 사용자에 대한 접속 가능한 Host 목록을 확인
    SELECT Host FROM mysql.user WHERE user='<Username>';
    


  • Database로의 접근가능한 사용자 생성
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON <Database name>.* TO <Username>@localhost identified by '<Password>';
    


  • Database에 기존사용자의 사용권한 부여
    GRANT ALL ON <Database name>.* TO <username>;
    


  • 모든 IP로부터 접속 가능한 사용자 생성
    INSERT INTO mysql.user (host,user,password) VALUES ('%','<Username>',password('<Password>'));
    GRANT ALL PRIVILEGES ON *.* TO '<Username>'@'%';
    FLUSH PRIVILEGES;
    // 기타: insert into db (host, db, user, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_priv, grant_priv, references_priv, index_priv, alter_priv) values ('%','{DataBase Name}','{User ID}', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y' );
    


  • 특정 IP대역으로부터 접속 가능한 사용자 생성 ( 예: 111.222.* )
    INSERT INTO mysql.user (host,user,password) VALUES ('111.222.%','<Username>',password('<Password>'));
    GRANT ALL PRIVILEGES ON *.* TO '<Username>'@'111.222.%';
    FLUSH PRIVILEGES;
    


  • Database 만들기
    CREATE DATABASE [IF NOT EXIST] <Database name>;
    


  • Database 삭제
    DROP DATABASE [IF EXISTS] <Database name>;
    


  • Database 선택
    USE <Database name>;
    


  • Table with Schema 만들기
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] <Table name> (<정의>) [<OPTION>];
    


  • Table 삭제
    DROP [TEMPORARY] TABLE [IF EXISTS] <Table name>  [,<Table name> ...] [RESTRICT | CASCADE];
    


  • 하나의 Table에서 특정 Field목록 또는 모두 가져오기
    SELECT <Field name>[,<...>] FROM <Table name>;
    SELECT * FROM <Table name>;
    


  • 특정 Field들을 (오름차순 기준으로) 정렬하여 가져오기
    SELECT <Field name>[,<...>] FROM <Table name> ORDER BY <Field name>[,<...>];
    SELECT <Field name>[,<...>] FROM <Table name> ORDER BY <Field name>[,<...>] ASC;
    SELECT <Field name>[,<...>] FROM <Table name> ORDER BY <Field name>[,<...>] ASCENDING;
    


  • 특정 Field들을 (내림차순 기준으로) 정렬하여 가져오기
    SELECT <Field name>[,<...>] FROM <Table name> ORDER BY <Field name>[,<...>] DESC;
    SELECT <Field name>[,<...>] FROM <Table name> ORDER BY <Field name>[,<...>] DESCENDING;
    


  • 특정 조건에 맞는 Field목록 가져오기 (=,<>,!=,<,<=,!<,>,>=,!>,BETWEEN,IS NULL)
    SELECT <Field name>[,<...>] FROM <Table name> WHERE <FieldName>=<Value>;
    SELECT <Field name>[,<...>] FROM <Table name> WHERE NOT <FieldName>=<Value>;
    SELECT <Field name>[,<...>] FROM <Table name> WHERE <FieldName>=<Value> [AND <FieldName>=<Value>];
    SELECT <Field name>[,<...>] FROM <Table name> WHERE <FieldName>=<Value> [OR <FieldName>=<Value>];
    SELECT <Field name>[,<...>] FROM <Table name> WHERE <FieldName> IN ('<Value>'[,<...>]);
    SELECT <Field name>[,<...>] FROM <Table name> WHERE <FieldName> BETWEEN <Value> AND <Value>;
    SELECT <Field name>[,<...>] FROM <Table name> WHERE <FieldName> IS NULL;
    SELECT <Field name>[,<...>] FROM <Table name> WHERE <FieldName> LIKE '<WildValue>';
    

1.6. 참고자료

Retrieved from https://www.minzkn.com:443/moniwiki/wiki.php/SQL
last modified 2024-05-17 23:26:16