#keywords SQL,MySQL,MariaDB,PostgreSQL,MSSQL,DB,table,database,query,oracle #title SQL [wiki:Home 대문] / [wiki:CategoryProgramming 프로그래밍] / [wiki:SQL SQL] ---- == [wiki:SQL SQL] == * 작성자 조재혁([mailto:minzkn@minzkn.com]) * 고친과정 2011년 4월 23일 : 처음씀 [[TableOfContents]] === 시작하기전에 === 구조화된 어떠한 일련의 Data를 Database라고 합니다. 이 문서는 이러한 Database를 다루기 위해서 특별하게 고안된 언어인 SQL(Structured Query Language, 구조적 질의 언어)에 대하여 가장 기초적인 부분을 간단히 요약하는 형태가 될겁니다. 여기서는 MySQL 을 기준으로 내용을 정리하였습니다. MySQL은? - 오라클의 무료(부분유료) 오픈소스 RDBMS(관계형 데이터 베이스 시스템) * [^http://www.mysql.com] * Sun MicroSystems가 MySQL 인수 * 오라클이 Sun MicroSystems 같이 인수 * 비슷한 MariaDB도 있음 ([^https://mariadb.org/]) * MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스입니다. * 오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 반발하여 만들어졌습니다. === 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)에 들어 있을 경우 === SQL의 종류 === ==== DML (Data Manipulation Language) ==== * 테이블(Table)의 Data를 CRUD(Create, Retrieve, Update, Delete) 하는 기능 * 예) INSERT, SELECT, UPDATE, DELETE * INSERT {{{#!enscript sql INSERT INTO ([, ...]) VALUES (<값>[, ...]); }}} * SELECT {{{#!enscript sql SELECT [, ...] FROM WHERE <조건절>; }}} * UPDATE {{{#!enscript sql UPDATE SET =<값>[, ...] WHERE <조건절>; }}} * DELETE {{{#!enscript sql DELETE FROM WHERE <조건절>; }}} ==== DDL (Data Definition Language) ==== * DB, 테이블(Table)의 스키마(Schema)를 정의(Define), 수정(Modify)하는 기능 * 테이블(Table)의 생성, 컬럼(Column) 추가, 타입변경, 각종 제약조건 지정, 수정 등 * 예) CREATE, DROP, ALTER ==== DCL (Data Control Language) ==== * DB(Database)나 테이블(Table)의 접근권한이나 CRUD(Create, Retrieve, Update, Delete) 권한을 정의하는 기능 * 특정 사용자에게 테이블(Table)의 조회권한 허가/금지 등 * 예) GRANT, REVOKE === 기초 명령 === 특별히 명령에 대소문자를 구분하지는 않으나 Data 내용을 지칭하는 부분은 대소문자를 구분합니다. * Database들의 목록 확인 {{{#!enscript sql SHOW DATABASES; }}} * 지정한 Database를 사용함을 지정 {{{#!enscript sql USE ; }}} * Table들의 목록 확인 {{{#!enscript sql SHOW [FULL] TABLES [{FROM | IN} ] [LIKE '' | WHERE ]; }}} * 지정한 Table의 구조를 확인 {{{#!enscript sql DESCRIBE [ | ]; 또는 SHOW CREATE TABLE ; }}} * 지정한 Table의 내용을 확인 {{{#!enscript sql SELECT * FROM ; }}} === 간단한 상황에 따른 SQL구문정리 === * Database 선택 {{{#!enscript sql USE ; }}} * 지정한 사용자에 대한 접속 가능한 Host 목록을 확인 {{{#!enscript sql SELECT Host FROM mysql.user WHERE user=''; }}} * Database로의 접근가능한 사용자 생성 {{{#!enscript sql GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON .* TO @localhost identified by ''; }}} * Database에 기존사용자의 사용권한 부여 {{{#!enscript sql GRANT ALL ON .* TO ; }}} * 모든 IP로부터 접속 가능한 사용자 생성 {{{#!enscript sql INSERT INTO mysql.user (host,user,password) VALUES ('%','',password('')); GRANT ALL PRIVILEGES ON *.* TO ''@'%'; 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.* ) {{{#!enscript sql INSERT INTO mysql.user (host,user,password) VALUES ('111.222.%','',password('')); GRANT ALL PRIVILEGES ON *.* TO ''@'111.222.%'; FLUSH PRIVILEGES; }}} * Database 만들기 {{{#!enscript sql CREATE DATABASE [IF NOT EXIST] ; }}} * Database 삭제 {{{#!enscript sql DROP DATABASE [IF EXISTS] ; }}} * Database 선택 {{{#!enscript sql USE ; }}} * Table with Schema 만들기 {{{#!enscript sql CREATE [TEMPORARY] TABLE [IF NOT EXISTS] (<정의>) [
[,
...] [RESTRICT | CASCADE]; }}} * 하나의 Table에서 특정 Field목록 또는 모두 가져오기 {{{#!enscript sql SELECT [,<...>] FROM
; SELECT * FROM
; }}} * 특정 Field들을 (오름차순 기준으로) 정렬하여 가져오기 {{{#!enscript sql SELECT [,<...>] FROM
ORDER BY [,<...>]; SELECT [,<...>] FROM
ORDER BY [,<...>] ASC; SELECT [,<...>] FROM
ORDER BY [,<...>] ASCENDING; }}} * 특정 Field들을 (내림차순 기준으로) 정렬하여 가져오기 {{{#!enscript sql SELECT [,<...>] FROM
ORDER BY [,<...>] DESC; SELECT [,<...>] FROM
ORDER BY [,<...>] DESCENDING; }}} * 특정 조건에 맞는 Field목록 가져오기 (=,<>,!=,<,<=,!<,>,>=,!>,BETWEEN,IS NULL) {{{#!enscript sql SELECT [,<...>] FROM
WHERE =; SELECT [,<...>] FROM
WHERE NOT =; SELECT [,<...>] FROM
WHERE = [AND =]; SELECT [,<...>] FROM
WHERE = [OR =]; SELECT [,<...>] FROM
WHERE IN (''[,<...>]); SELECT [,<...>] FROM
WHERE BETWEEN AND ; SELECT [,<...>] FROM
WHERE IS NULL; SELECT [,<...>] FROM
WHERE LIKE ''; }}} === 참고자료 === * [^http://www.mysql.com/] * [^https://mariadb.org/] * "오라클로 배우는 데이터베이스 개론과 실습 - 2판" - ([^http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=9791156645023 도서정보 관련링크]) * [[ISBN(9791156645023,K,noimg)]]