SQL


Structured Query Language

안산대학교 인터넷정보과

WebDB(II) by 오윤상

DDL


  • 정의

    Data Definition Language

    데이터베이스나 테이블 등의 생성, 수정 및 삭제 등 전체 구조를 정의하는 SQL

  • 종류
    • CREATE
    • ALTER
    • DROP

CREATE


  • 정의

    데이터베이스 또는 테이블을 생성하기 위한 SQL

  • 형식
    CREATE DATABASE `데이터베이스명`;
    CREATE TABLE `테이블명` (
      `필드명1` 데이터타입(size) [속성],
      `필드명2` 데이터타입(size) [속성],
      `필드명3` 데이터타입(size) [속성]
    );

CREATE


  • 예제

    userid, passwd, name, email 4개의 필드를 가진 user 테이블을 생성한다.

    CREATE TABLE `user` (
     `userid` varchar(20) NOT NULL,
     `passwd` varchar(128) NOT NULL,
     `name` varchar(20) NOT NULL,
     `email` varchar(50) NOT NULL,
     PRIMARY KEY (`userid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER


  • 정의

    테이블의 구조 또는 필드의 속성을 변경하기 위한 SQL

  • 형식
    ALTER TABLE `테이블명`
    속성변경을위한명령;

ALTER


  • 예제

    user 테이블의 마지막에 타입이 3자리 정수인 age 필드를 추가한다.

    ALTER TABLE  `user` 
    ADD  `age` INT(3) NOT NULL ;

DROP


  • 정의

    데이터베이스 또는 테이블을 삭제하기 위한 SQL

  • 형식
    DROP DATABASE `데이터베이스명`;
    DROP TABLE `테이블명`;

DROP


  • 예제

    CREATE TABE 문으로 생성된 user 테이블을 삭제한다.

    DROP TABLE `user`;

DML


  • 정의

    Data Manipulation Language

    데이터의 추가, 검색, 수정, 삭제 등과 같이 레코드를 조작할 수 있도록 하는 SQL

  • 종류
    • INSERT
    • SELECT
    • UPDATE
    • DELETE

INSERT


  • 정의

    테이블에 데이터를 추가할 때 사용하는 SQL

  • 형식
    INSERT INTO `테이블명` 
    (`필드명1`, `필드명2`, `필드명3`, ...)
    VALUES
    (값1, 값2, 값3, ...);

INSERT


  • 예제

    필드명을 나열함으로써 특정 필드값만을 가진 데이터를 추가하는 형식으로, 주어진 VALUES 이후에 값이 테이블 명 이후에 나열된 필드 순서와 개수가 일치해야 한다.

    INSERT INTO `user`
    (`userid`, `name`)
    VALUES
    ('test01', '홍길동');

INSERT


  • 예제

    테이블명 뒤에 필드명 나열을 생략한 형태로 VALUES 이후에 값들은 테이블의 기본 필드순서에 따르고 또한 개수가 일치해야 한다.

    INSERT INTO `user`
    VALUES
    ('test01', '1111', '홍길동', 'test01@test.com');

INSERT


  • 예제

    필드명이 나열된 경우 VALUES 이후의 값들은 나열된 필드순에 따른다.

    INSERT INTO `user`
    (`userid`, `name`, `passwd`, `email`)
    VALUES
    ('test02', '김철수', password('1234'), 'test02@test.com');

INSERT


  • 예제

    하나의 INSERT 문으로 여러개의 레코드를 추가하기 위한 형식으로 VALUES 이후 각 레코드를 ','로 구분한다.

    INSERT INTO `user`
    VALUES
    ('test03', '3333', '김철수', 'test03@daum.net'),
    ('test04', '4444', '홍명보', 'test04@daum.net');

INSERT


  • 예제

    하나의 INSERT 문으로 여러개의 레코드를 추가하기 위한 또다른 형식으로 필드명이 나열된 형태이며 각 레코드의 값은 나열된 필드명 순서에 따른다.

    INSERT INTO `user`
    (`userid`, `passwd`, `name`, `email`)
    VALUES
    ('test05', password('3333'), '김대중', 'test05@naver.com'), 
    ('test06', password('4444'), '김영삼', 'test06@naver.com');

SELECT


  • 정의

    테이블에 저장된 값을 검색할 때 사용하는 SQL

  • 형식
    SELECT `필드명`, ...
    FROM `테이블명` 
    WHERE 조건식;

SELECT


  • 예제

    user 테이블에 저장된 모든 레코드를 대상으로 사용자 아이디와 이름을 검색하고 출력한다.

    SELECT  `userid`,  `name`
    FROM  `user`;

SELECT


  • 예제

    user 테이블에 저장된 모든 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *
    FROM  `user`;

SELECT


  • 예제

    user 테이블의 레코드 중 이름(name)이 '홍길동'인 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `name` = '홍길동';

SELECT


  • 예제

    user 테이블의 레코드 중 나이(age)가 20살 이상 30살 이하인 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `age`  BETWEEN  20  AND  30;

SELECT


  • 예제

    user 테이블의 레코드 중 나이(age)가 20살 이상 30살 이하인 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `age`  >=  20  
    AND  `age`  <=  30;

SELECT


  • 예제

    user 테이블의 레코드 중 이름(name)이 '홍길동'이거나 '김철수'이거나 '전우치'인 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `name`  IN  ( '홍길동',  '김철수',  '전우치' );

SELECT


  • 예제

    user 테이블의 레코드 중 이름(name)이 '홍길동'이거나 '김철수'이거나 '전우치'인 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `name`  =  '홍길동'  
    OR  `name`  =  '김철수'  
    OR  `name`  =  '전우치';

SELECT


  • 예제

    user 테이블의 레코드 중 이름(name)이 '홍'으로 시작하는 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `name`  LIKE  '홍%';

SELECT


  • 예제

    user 테이블의 레코드 중 아이디(userid)가 6글자이며 't'로 시작하는 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `userid`  LIKE  't_____';

SELECT


  • 예제

    user 테이블의 레코드 중 이메일(email)이 '.com'으로 끝나는 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `email`  LIKE  '%.com';

SELECT


  • 예제

    user 테이블의 레코드 중 이메일(email)에 'naver'가 있는 레코드를 대상으로 모든 필드를 검색하고 출력한다.

    SELECT  *  
    FROM  `user`  
    WHERE  `email`  LIKE  '%naver%';

SELECT


  • 예제

    user 테이블에 저장된 모든 레코드를 대상으로 모든 필드를 검색하고 이름순(올림차순)으로 출력한다. 만약 중복된 이름이 있으면 아이디순(올림차순)으로 출력한다.

    SELECT  *  
    FROM  `user`  
    ORDER  BY  `name` ,  `userid`;

SELECT


  • 예제

    user 테이블에 저장된 모든 레코드를 대상으로 이름과 이메일을 검색하고 출력한다. 이때 중복된 출력은 한 번만 출력된다.

    SELECT  DISTINCT  `name`,  `email`
    FROM  `user`;

SELECT


  • 예제

    user 테이블에 저장된 모든 레코드를 대상으로 이름별로 그룹지고 인원수와 이름을 검색하고 출력한다.

    SELECT  COUNT(*),  `name`  
    FROM  `user`  
    GROUP  BY  `name`;

SELECT


  • 예제

    user 테이블에 저장된 모든 레코드를 대상으로 이름과 이메일을 검색하되 두번째 레코드부터 세개의 레코드를 검색하고 출력한다.

    SELECT  * 
    FROM  `user`  
    LIMIT  1,  3;

UPDATE


  • 정의

    테이블에 저장된 값을 수정할 때 사용하는 SQL

  • 형식
    UPDATE `테이블명`
    SET `필드명1`=값1, `필드명2`=값2, ...
    WHERE 조건식;

UPDATE


  • 예제

    user 테이블에서 사용자아이디(userid)가 'test05'인 레코드에 대해 사용자이름(name)을 '고길동'으로 수정한다.

    UPDATE  `user`  
    SET  `name`  =  '고길동'  
    WHERE  `userid`  =  'test05';

UPDATE


  • 예제

    user 테이블의 모든 레코드에 대해 나이(age)를 한 살 증가시킨다.

    UPDATE `user`
    SET `age` = `age` + 1;

UPDATE


  • 예제

    user 테이블에서 사용자아이디(userid)가 'test05'인 레코드에 대해 사용자이름(name)을 '홍길동'으로 수정하고 나이(age)를 한 살 증가시킨다.

    UPDATE `user`
    SET `name` =  '홍길동', `age` = `age` + 1
    WHERE  `userid`  =  'test05';

DELETE


  • 정의

    테이블에 저장된 값을 삭제할 때 사용하는 SQL

  • 형식
    DELETE
    FROM `테이블명`
    WHERE 조건식;

DELETE


  • 예제

    user 테이블에서 사용자아이디(userid)가 'test05'인 레코드를 삭제한다.

    DELETE  
    FROM  `user`  
    WHERE  `userid`  =  'test05';

DELETE


  • 예제

    user 테이블의 모든 레코드를 삭제한다.

    DELETE
    FROM  `user`;

DCL


  • 정의

    Data Control Language

    데이터의 보안, 무결성, 회복, 병행 등을 제어 하는데 사용하는 SQL

  • 종류
    • COMMIT
    • ROLLBACK
    • GRANT
    • REVOKE