2007년 8월 1일 수요일

기본적인 sql 문

1. 행의 삽입 - INSERT

1)INSERT문의 기본 구성
형식
INSERT [INTO] {table_name view_name}[(column_list)] {VALUES values_list select_statement}
- INSERT 절
행을 삽입할 테이블 또는 뷰를 지정한다.
전체 행이 아닌 특정 컬럼들을 지정하는 컬럼 리스트를 사용할 수 있다
- VALUES절
삽입할 데이터를 지정한다.
모든 자료형들은 각각의 입력 형식을 가진다
VALUES('123-45-6789', 'Chen', 'Sue', '900 555-1221', '214 Main St. ' , 'Kent' , 'WA' , '98000', 0)

**********사용 예제************
디폴트 옵션
DEFAULT VALUES
INSERT table_name DEFAULT VALUES
- 모든 컬럼에 대해 디폴트 값을 가지는 행을 삽입한다.


DEFAULT
INSERT table_name
VALUES( ..., DEFAULT, .....)
- 지정된 컬럼에 디폴트 값을 삽입한다.
- 변수가 values_list에 나타날 수 있다.

고려사항
- 해당 컬럼에 대한 디폴트나 사용자정의 자료형에 대한 디폴트 값이 존재하는 경우에 그 값이 삽입된다.
- 컬럼이 IDENTITY 속성을 가지거나 timestamp자료형인 경우에는 적절한 값이 삽입된다.
- DEFAULT의 경우에는 IDENTITY속성을 가지는 컬럼에 대해서는 유효하지 않다.
- 컬럼에 디폴트가 없고 NULL이 허용되는 경우에는 NULL 이 삽입된다.
- 컬럼에 디폴트가 없고 NULL이 허용되지 않는 경우에는 에러를 반환하고 INSERT는 실패한다.


부분 데이터의 삽입
NULL이나 디폴트 값을 허용하는 컬럼에 대해서는 데이터를 지정하지 않을 수 있다.
INSERT [INTO] {table_name view_name} (column_list) {VALUES vlaues_list select_statement}
- INSERT 절에 컬럼 이름을 명시한다.
- VALUES 절의 값들은 각각 column_list의 컬럼들에 대응된다.
- 열거 되지 않은 컬럼들에 대해서는 DEAFULT와 같이 처리된다.

INSERT publishers (pub_id, pub_name)VALUES ('9975', 'Unbound Press')
=>publishers라는 테이블에 pub_id, pub_name이라는 칼럼에다가 각각 '9975', 'Unbound Press'라는
값을 넣어라.


2)SELECT를 사용한 행의 삽입

SELECT 문을 사용하여 하나 이상의 다른 테이블로부터 이미 존재하는 테이블로 행을 삽입할 수 있다.
INSERT table_name
SELECT column_list FROM table_list WHERE search_conditions

고려사항
- 같은 테이블에서도 가능하다.
- 삽입할 테이블과 SELECT 결과 집합은 컬럼의 개수, 컬럼의 순서, 자료형 등에 호환성이 있어야 한다.
- 완전히 같은 자료형이거나 SQL서버가 자동적으로 호환성이 있도록 변화 할 수 있는자료형이어야 한다.
- INSERT만을 사용하는 경우와는 달리 한번에 여러 행을 삽입한다.
- 생략된 컬럼에 대해서는 해당 컬럼에 디폴트가 존재하는지 또는 NULL이 허용되는지를 확인해야 한다.

저장 프로시져를 사용한 삽입
저장 프로시져에 의해 반환되는 결과 값을 사용하여 테이블을 조작할 수 있다.
INSERT [INTO] table_name
EXECUTE {procedure_name @procedure_name_var}
[[@parameter_name=]{value @variable [OUTPUT] DEFAULT }
{,[@parameter_name=]{value @variable[OUTPUT] DEFAULT}]...]
- 저장 프로시져는 로컬 또는 원격 시스템에 있을 수 있다.
- 결과 정보를 로컬 테이블에 저장하는데 주로 이용한다.

고려사항
- 삽입할 테이블은 반드시 미리 생성 되어 있어야 한다.
- 테이블에는 저장 프로시져 내의 SELECT 문장에 의한 결과 데이터들이 삽입된다.
- 저장 프로시져에서의 PRINT, RAISERROR, FETCH등의 결과는 테이블에 삽입되지 않는다.
- SELECT문의 결과로 반환되는 데이터들은 반드시 테이블의 컬럼들과 자료형이 일치해야 한다.




2. SELECT 문의 기본구성

- SELECT
- 검색할 컬럼들을 지정
- FROM
- 검색할 테이블을 지정
- WHERE
- 검색할 테이블 내의 행을 결정
- WHERE절이 없는 경우에는 해당 테이블의 모든 행들을 검색한다.


SELECT select_list [INTO new_table_] FROM table_source [WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC DESC] ]
// 참고 : [ ] = 생략가능 { } = 중복가능 = 선택가능
// 잘 모르겠으면 Books Online을 100% 활용하자.


이장 까지의 이 글의 출처를 다음과 같이 밝힙니다.
http://sqler.pe.kr/



3. Alter 명령어 사용법

컬럼 추가 mysql> alter table 테이블명 add 컬럼명 varchar(50);

추가할 필드를 기존 테이블의 제일 마지막에 위치 mysql>alter table 테이블명 add 추가할필드명 필드타입;

추가할 필드를 기존 테이블의 제일 첫번째에 위치 mysql>alter table 테이블명 add 추가할필드명 필드타입 first;

추가할 필드를 기존 테이블의 중간에 위치 mysql>alter table 테이블명 add 추가할필드명 필드타입 after 생성될필드가 위치할 앞 필드명;

컬럼 삭제 mysql> alter table 테이블명 drop 컬럼명;

컬럼명,타입 변경 mysql> alter table 테이블명 change 컬럼명 컬럼명1 varchar(12);

컬럼 타입 수정 mysql> alter table 테이블명 modify 컬럼명 varchar(14);

마지막으로 테이블명 수정 mysql> alter table 테이블명 rename 테이블명1;

테이블의 필드명을 다른 이름으로 변경 mysql>alter table 테이블명 change 기존필드명 바꿀필드명 바뀐필드타입;

테이블명 변경 mysql>alter table 테이블명 rename 바뀔테이블명;

4. Auto_increment된 걸 리셋

TRUNCATE TABLE tbl_name;

이때 tbl_name 내의 모든 data는 사라지지만, entry나 entry 속성은 그대로 남는다. (리셋과 같다고 보면됨)




댓글 없음: