SQL 데이터 조작어(DML)

데이터 조작어(DATA MANIPULATION LANGUAGE)는 SQL의 핵심 요소로서 데이터베이스에 데이터 추가, 수정, 삭제할 때 사용하는 명령어입니다.

대표적인 데이터 조작어

SELECT

INSERT

예)

INSERT INTO 테이블명 (컬럼1, 컬럼2…)

VALUES(값1, 값2….)

 

UPDATE

예)

UPDATE 테이블명

SET 변경내용

WHERE 조건

 

DELETE

SQL VIEW 정의 및 생성

뷰(VIEW)란 하나 이상의 테이블로부터 데이터를 논리적으로 표현한 데이터베이스 객체입니다.

뷰는 CREATE VIEW문에 서브쿼리를 포함시켜 생성할 수 있습니다.

뷰 생성 예제

CREATE VIEW 뷰이름

AS (서브쿼리)

 

SQL DDL 제약 조건

데이터베이스는 제약 조건을 사용하여 데이터를 일관성 없는 조작으로부터 보호합니다.

 

제약 조건

NOT NULL

열에 NULL값을 허용하지 않음

NOTNULL의 경우 CREATE시 옆에 적어주면 됨.

 

UNIQUE

중복을 허용하지 않음

사용방법

CONSTRAINT 제약조건이름 UNIQUE(컬럼명)

 

PRIMARY KEY

NOT NULL + UNIQUE

사용방법

CONSTRAINT 제약조건이름 PRIMARY KEY(컬럼명)

 

FOREIGN KEY

자신 또는 다른 테이블의 열 또는 열 조합을 참조하도록 관계 설정

사용방법

CONSTRAINT 제약조건이름 FOREIGN KEY(컬럼명)

REFERENCES 테이블명(컬럼명)

SQL 열 추가, 수정 및 삭제

ALTER TABLE문을 ADD절과 함께 사용하여 열 추가 가능

ALTER TABLE 테이블명

ADD (컬럼명 데이터타입);

 

ALTER TABLE문과 MODIFY절을 함께 사용하면 열을 수정할 수 있습니다.

ALTER TABLE 테이블명

MODIFY (컬럼명 데이터타입);

 

MODIFY문 사용시 유의점

기존의 데이터크기를 고려하여 수정해야 함.

기존의 데이터크기보다 작게 줄이면 오류 메시지 표시

 

ALTER TABLE문과 DROP절을 함께 사용하면 열을 삭제할 수 있음.

ALTER TABLE 테이블명

DROP 컬럼명

 

열 삭제 시 고려 사항

열의 데이터 유무와 관계 없이 삭제

삭제된 열은 복구할 수 없음.

열을 삭제한 후 최소 하나 이상의 열이 존재해야 함.

SQL 데이터 정의어(DDL)

데이터베이스 구조의 생성, 수정, 삭제에 사용되는 SQL문의 일부입니다.

데이터베이스에 직접 영향을 주고, 데이터 딕셔녀리에 정보를 기록합니다.

CREATE

객체 생성

ALTER

객체 변경

DROP

객체의 모든 데이터 및 구조 삭제

RENAME

이름 변경

TRUNCATE

모든 행 제거, 저장 공간 해제

 

데이터베이스 객체로는

TABLE

행과 열로 구성된 기본 단위

VIEW

하나 이상의 테이블에 있는 논리적인 집합 (가상테이블)

SEQUENCE

순차적으로 숫자 값 생성

SYNONYM

객체 이름에 대한 동의어 (테이블 별칭??)

Java HashKey를 이용한 예제

HashKey를 이용하여 학생 정보를 입력, 출력하는 예제입니다.

package tue160607; 
 
import java.util.HashMap; 
import java.util.Scanner; 
 
/** 
 * Created on 2016-06-07. 
 */ 
public class StudentInformation { 
    private static boolean flag = true; 
    public static void main(String[] args) { 
        Scanner scanner = new Scanner(System.in); 
        int select; 
        int sno; 
        String name; 
        String tell; 
        int snoSearch; 
        HashMap<Integer, StudentInform> st = new HashMap<Integer, StudentInform>(); 
        while(flag) { 
            //따로 flag가 아니라 그냥 true로 해둬도 될 것 같음. 
            System.out.println("<< 학생 정보 관리 >>"); 
            System.out.println("[1] 학생 정보 입력"); 
            System.out.println("[2] 학생 정보 검색"); 
            System.out.print("선택 : "); 
            select = scanner.nextInt(); //따로 예외처리가 되어있지 않음!!! 
            switch (select) { 
                //switch문을 사용하여.. 
                case 1: //입력 선택시 
                    System.out.println("<< 학생 정보 입력 >>"); 
                    System.out.print("학번: "); 
                    sno = scanner.nextInt(); 
                    //각각 하나씩 따로 변수에 저장 
                    System.out.print("이름: "); 
                    name = scanner.next(); 
                    System.out.print("전화번호: "); 
                    tell = scanner.next(); 
 
                    st.put(sno, new StudentInform(sno, name, tell)); 
                    //저장 후 키맵에 집어넣는다! 
                    System.out.println("입력이 완료 되었습니다."); 
                    break; 
                case 2: //출력 선택시 
                    System.out.println("<< 학생 정보 검색 >>"); 
                    System.out.print("학번: "); 
                    snoSearch = scanner.nextInt(); //검색에서 입력하는 학번은 따로 
                    //snoSearch라는 이름으로 지정하였음. 
                    if(st.get(snoSearch) != null) { //값이 있다면 null값을 반환하지 않을 것임. 
                        System.out.println(st.get(snoSearch)); 
                    } 
                    else { //null값을 반환했다는 뜻은 데이터가 없다는 뜻이므로.. 
                        System.out.println("해당 데이터 없음."); 
                    } 
                    break; 
 
                default: //default를 제외한 예외처리는 따로 지정하지 않음. 
                    System.out.println("잘못 입력함."); 
                    break; 
            } 
        } 
    } 
} 
 
class StudentInform { 
    protected int sno; 
    protected String name, tell; 
    protected StudentInform(int sno, String name, String tell) { 
        this.sno = sno; 
        this.name = name; 
        this.tell = tell; 
    } 
 
    @Override 
    public String toString() { //System.out.println을 불러올 때.... 
        return "이름: " + name + "
전화번호 : " + tell + "
"; 
    } 
} 

출력결과

<< 학생 정보 관리 >> 
[1] 학생 정보 입력 
[2] 학생 정보 검색 
선택 : 1 
<< 학생 정보 입력 >> 
학번: 130101 
이름: 손승기 
전화번호: 940-8282 
입력이 완료 되었습니다. 
<< 학생 정보 관리 >> 
[1] 학생 정보 입력 
[2] 학생 정보 검색 
선택 : 2 
<< 학생 정보 검색 >> 
학번: 130101 
이름: 손승기 
전화번호 : 940-8282 
 
<< 학생 정보 관리 >> 
[1] 학생 정보 입력 
[2] 학생 정보 검색 
선택 : 2 
<< 학생 정보 검색 >> 
학번: 130202 
해당 데이터 없음. 
<< 학생 정보 관리 >> 
[1] 학생 정보 입력 
[2] 학생 정보 검색 
선택 :

Java Generic

자바 Generic 기본 예제입니다.

package tue160607; 
 
/** 
 * Created on 2016-06-07. 
 */ 
public class GenericBaseFruitBox { 
    public static void main(String[] args) { 
        FruitBox<Orange> orBox = new FruitBox<Orange>(); 
        orBox.store(new Orange(10)); 
        Orange org = orBox.pullOut(); 
        org.showSugarContent(); 
 
        FruitBox<Apple> apBox = new FruitBox<Apple>(); 
        apBox.store(new Apple(20)); 
        Apple app = apBox.pullOut(); 
        app.showAppleWeight(); 
    } 
} 
 
class Orange  { 
    private int sugarContent; 
    protected Orange(int sugar) { 
        sugarContent = sugar; 
    } 
    protected void showSugarContent() { 
        System.out.println("당도 " + sugarContent); 
    } 
} 
 
class Apple { 
    private int weight; 
    protected Apple(int weight) { 
        this.weight = weight; 
    } 
    protected void showAppleWeight() { 
        System.out.println("무게 " + weight); 
    } 
} 
 
class FruitBox<T> { 
    T item; 
    protected void store(T item) { 
        this.item = item; 
    } 
    protected T pullOut() { 
        return item; 
    } 
}

Database truncate 명령어

테이블 절삭 명령어.

테이블에서 모든 행을 제거하고 해당 테이블이 사용하는 저장공간을 해제할 때 truncate table문을 사용합니다.

테이블 절삭 구문은

TRUNCATE TABLE table;

절삭할 때 다음과 같은 사항을 유의해야 한다.

  • 테이블에서 모든 행을 제거
  • 해당 테이블의 저장공간 해제
  • truncate문의 경우 DDL이기에 롤백이 불가능!
  • 비슷한 구문으로 DML문의 delete문이 있음.
    (이는 저장공간을 해제하진 않음)