[SQLD] 2과목 SQL 기본및 활용 - 1장 3절 DML


1. INSERT

- 테이블에 데이터를 입력하는 방법은 두 가지 유형이 있으며 한 번에 한 건만 입력된다.

* 컬럼명리스트와 입력되는 값은 서로 1:1로 매핑해서 입력하면된다. 해당 칼럼의 데이터유형이 문자형일 경우 ' '로 묶어주며 숫자일 경우 ' '를 붙이지 않는다.


1) INSERT INTO 테이블명 (COLUMN_LIST)

VALUES(COLUMN_LIST에 넣을 VALUE_LIST);

* 테이블의 칼럼을 정으할 수 있는데, 이때 칼럼의 순서는 테이블의 칼럼순서와 매치할 필요는 없으며 정의하지 않은 칼럼은 DEFAULT로 NULL값이 입력된다. NOT NULL제약조건이나 PK 지정된 컬럼은 NULL이 허락되지 않는다.


2) INSERT INTO 테이블명

VALUES (전체 COLUMN에 넣을 VALUE_LIST);

* 모든 칼럼에 데이터를 입력하는 경우 굳이 COLUM_LIST를 언급하지 않아도 되지만 칼럼의 순서대로 빠짐없이 데이터가 입력되어야한다.


ex) player 테이블에 값 추가.

1)

INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO)

VALUES ('2002007','박지성','K07','MF',178,73,7);

2)

INSERT INTO PLAYER

VALUES('200207','이청용','','BLUEDRAGON',2002',MF',17,NULL,NULL,'1',180,69);


2. UPDATE

-입력한 정보 중 잘못 입력되거나 변경이 발생하여 정보를 수정할 경우 

- 구문

UPDATE 테이블명

SET 수정해야될 컬럼명 = 수정되기 원하는 새로운 값 ;

ex

1) 숫자타입.

UPDATE PLAYER

SET BACK_NO = 99;

2)문자타입

UPDATE PLAYER

SET POSITION = 'MF';


3. DELETE

- 테이블의 정보가 필요없게 될 경우 데이터 삭제를 수행한다.

- 구문

DELETE [FROM] 삭제를 원하는 테이블명;

* FROM은 생략 가능하며, WHERE절 없을 경우 테이블의 전체 데이터가 삭제된다.


* DDL명령어와 DML 명령어를 처리하는 방식에 있어서 데이터베이스는 차이가있다.

DDL 명령어의 경우 직접 데이터베이스 테이블에 영향을 미치기 때문에 AUTO COMMIT이 된다.

DML 명령어의 경우 조작하는 테이블을 메모리 버퍼에 올려놓고 작업을 하기 때문에 테이블에 영향을 실시간으로 주지않는다. 실제 반영되기 위해서는 COMMIT명령이 필요하다.

( SQL server경우에는 DML의 경우도 Auto commit으로 처리가된다.)

* TRUNCATE는 삭제된 데이터의 로그가 없으므로 ROLLBACK이 불가능하다.

SQL Server에서는 임의적으로 트랜잭션을 시작한 후 Truncate table을 이용하여 데이터를 삭제한 이후 오류가 발견되어 복구를 원할 경우 ROLLBACK문을 이용하여 데이터를 원상태로 돌릴 수 있다.


4. SELECT 

- 사용자가 입력한 데이터를 조회하는 쿼리.

SELECT [ALL/DISTINCT] 칼럼명 ....

FROM 테이블명

* ALL은 DEFAULT 옵션이므로 표시하지 않아도 된다. 중복된 데이터가 있어도 모두 출력한다.

 DISTINCT 중복된 컬럼은 제거하고 1건으로 표시한다.


ex) 

SELECT PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, WEIGHT, HEIGHT, BACK_NO

FROM PLAYER;


ex) DISTINCT

SELECT DISTINCT ALL_POSITION

FROM PLAYER;


POSITION

---------------

GK

DF

FW

MF


* WILD CARD 사용하기

SELECT * 

FROM PLAYER;

- 조회결과는 기본적으로 대문자로 보이고, 좌측정렬은 문자 및 날짜데이터 우측 정렬은 숫자데이터이다.


* ALIAS 부여하기

- 조회된 결과에 별명을 부여하여 칼럼 레이블을 변경할 수 있다.

- 컬럼바로뒤에 온다. 컬럼과 ALIAS 사이에 AS, as 키워드를 사용할 수 있다.(옵션)

- 이중부호는 ALIAS가 공백, 특수문자를 포함할 경우 대소문자 구분이 필요할 경우 사용한다.


ex)

SELECT  PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS 키, WEIGHT AS 몸무게

FROM PLAYER;


* AS는 사용하지 않아도 같은 결과가 출력된다.

SELECT  PLAYER_NAME  선수명, POSITION 위치, HEIGHT 키, WEIGHT 몸무게

FROM PLAYER;


5. 산술 연산자와 합성 연산자.
산술연산자
- NUMBER, DATE 자료형에 대해 적용된다. 우선순위를 위한 괄호 적용이 가능함.

 산술연산자

설명 

 (  ) 

연산자 우선순위를 변경하기 위한 괄호 

 * 

곱하기 

 /

나누기 

 +

더하기 

 - 

빼기 

 


합성연산자

- 문자와 문자를 연결하는 합성 연산자를 이용하면 별도의 프로그램 도움 없이 SQL 만으로 유용한 리포트를 출력할 수 있다.

- 문자와 문자를 연결하는 경우 2개의 수직바 || 를 통해 이루어진다.(ORACLE)

- 문자와 문자를 연결하는 경우 + 표시에 의해 이루어진다 (SQL SERVER)

- 두 벤더는 모두 공통적으로 CONCAT(STRING1, STRING2) 함수를 사용할 수 있다.

- 칼럼과 문자ㄴ 또는 다른 칼럼과 연결시킨다

- 문자 표현식의 결과에 의해 새로운 칼럼을 생성한다.


ex) 출력형태 선수명 선수, 키 cm 몸무게 kg

- 오라클

SELECT PLAYER_NAME || '선수,' || HEIGHT || 'CM ,' || WEIGHT || 'KG' 체격정보

FROM PLAYER;

- SQL server

SELECT PLAYER_NAME + '선수 ,' + HEIGHT + 'CM ,' + WEIGHT + 'KG ' 체격정보