IT 지식 개발

SQL 정의 및 SQL 특징

▶유유님 2019. 8. 21. 16:00

 

안녕하세요! 

오늘은 SQL 이 무엇인지, 특징과 표준을 알아보겠습니다.

 

SQL이란?

Structured Query Language SQL의 약자로 데이터베이스에서 데이터를 조회하고 입력하고 수정하고 삭제하고 저장하는데 사용되는 질의 언어 입니다.

SQL은 구조화된 언어로서 구조화되었다 라는 것은 어느 일정한 틀, 패턴이 있다는 뜻입니다.

그리고 이 패턴에 맞게 조건들을 선언한다라는 의미에서 선언적 언어라고도 합니다.

 

SQL 특징

1. 배우고 사용하기 쉬운 언어입니다.

2. 프로그래밍 언어들처럼 절차적인 개별 단위로 처리되기보다는 데이터의 집합(set) 단위로 처리됩니다. 또한 실제 데이터들이 어떻게 처리되는지에 대한 세부적인 과정은 SQL 문장을 작성하는 사람은 신경 쓰지 않아도 된다는 장점이 있습니다.

3. 공인된 기관의 표준 SQL 문법이 존재하는데, DBMS 종류에 얽매이지 않고 사용할 수 있는 장점이 있습니다.

 

DBMS에는 Oracle 외에도 MSSQL, MySQL, Sybase, DB2 등 여러 회사의 제품이 존재합니다.

구조, 특성 면에서 모두 다르나, 사용되는 SQL은 거의 동일하다고 보시면 됩니다.

오라클에서 SQL을 자유자재로 사용했던 사람은 MSSQL을 사용하더라도 SQL의 사용법을 처음부터 새로 배울 필요가 없습니다. 표준문법에 맞게 작성한다면 대부분의 DBMS에서는 통용됩니다. 따라서 툴이 바뀌었다고 해도 걱정할 필요가 없습니다.

 

 

그리고, 

 

SQL 표준이 따로 있습니다.

SQL은 1986년에 ANSI(미국표준협회), 1987년에 ISO(국제표준화 기구)에 의해 만들어졌는데요,

표준이 만들어졌다 라는 의미는 SQL 작성 시 표준에 따르기만 하면 여러회사의 RDBMS에서 동일한 문장을 오류없이 동일한 결과를 얻을 수 있음을 의미합니다.

 

처음에 SQL은 조회, 저장, 삭제하는 기본적인 작업이 있다고 했는데요,

그 역할에 따라 크게 DML과 DDL 등 2가지로 구분될 수 있습니다.

 

그럼 DML과 DDL이란 무엇일까요?

 

먼저 DML부터 알아보겠습니다.

 

DML은 Data Manipulation Language 의 약자인데요, 데이터를 추출하고 저장하고 삭제하는 등의 데이터를 조작하는 것을 말합니다.

 

DML의 기본패턴에는 4가지로 구성됩니다.

1. 데이터 조회 : SELECT

2. 데이터 입력(저장) : INSERT (신규데이터 입력)

3. 데이터 수정(저장) : UPDATE (기존 데이터 수정)

4. 데이터 삭제 : DELETE

 

자, 그럼 이 4가지를 어떻게 작성하는지 알아봅시다~!

 

첫번째로 SELECT 문입니다.

 SELECT 영어로 선택한다라는 의미로 데이터를 조회할 때 사용한다고 짐작할 수 있겠죠?

다음은 구문형식입니다

 

SELECT 컬럼A, 컬럼B, ...

 FROM 테이블 A, 테이블 B, ...

WHERE 조건들;

 

해석한다면 테이블 A와 테이블 B 에 조건에 맞는 것들을 뽑아 컬럼A, 컬럼B를 보여준다라고 볼 수 있는데요,

무슨말인지 모르시겠다고요?

 

한가지 예를 들어보겠습니다.

 

직원 이라는 테이블이 있다고 가정하고, 직원들의 이름, 입사일, 직원번호 등의 정보가 직원 테이블에 들어 있습니다.

여기서 이름, 입사일, 직원번호는 컬럼이 되는 것이죠

조건은 직원의 입사일이 2019년 이후인 직원의 이름과 입사일을 조회하고 싶다 라고 한다면 아래와 같이 SQL 구문을 작성할 수 있겠습니다.

 

SELECT 이름, 입사일

  FROM 직원

WHERE 입사일 >= '2019-01-01';

 

 

두번째는 INSERT 문입니다.

테이블에 새로운 데이터를 넣을 때 사용하는 것입니다.  INSERT에는 기본적으로 2가지로 유형이 있습니다.

 

1. 테이블의 특정 컬럼만 값을 넣고 싶을 때

 

INSERT INTO 테이블A ( 컬럼A, 컬럼B, ...)

VALUES ( 컬럼A 값, 컬럼B 값, ...);

 

2. 테이블의 전체 컬럼에 값을 넣고 싶을 때

 

INSERT INTO 테이블B

VALUES(컬럼A 값, 컬럼B 값, ...);

 

2가지의 유형 차이점을 아시겠죠?

그리고 주의할 사항이 있습니다. 컬럼 리스트와 들어갈 컬럼 값 순서는 일치해야 하구요, 1의 유형은 컬럼과 컬럼값 수가 맞아야 합니다!

 

그리고 보너스로..

SELECT문을 이용하여 INSERT 하는 방법입니다.

작성법은 다음과 같습니다.

 

INSERT INTO 테이블A (테이블A.컬럼A, 테이블A.컬럼B, ...)

SELECT 테이블B.컬럼C, 테이블B.컬럼D, ...)

 FROM 테이블B

WHERE ... ; 

 

여기서도 유의할 점은 테이블A에 들어갈 컬럼 갯수와 SELECT한 테이블B의 컬럼 갯수가 맞아야하고 순서도 같아야겠죠?

 

세번째는 UPDATE 문입니다. 

UPDATE문은 기존 테이블에 저장되어 있는 데이터를 새로운 값으로 변경할 때 사용됩니다.

 

UPDATE 테이블명

      SET 변경컬럼A = 변경하고자 하는 값,

            변경컬럼B = 변경하고자 하는 값,

            ...

 WHERE 조건절 ... ; 

 

개발하실 때 UPDATE 시 유의할 점은 WHERE 절을 생략해버리면 데이터 전체가 적용되기 때문에 꼭!! 조건절을 확인해주세요.

 

마지막으로 DELETE 문입니다.

데이터를 삭제할 때 사용되면 작성법은 아래와 같습니다.

 

DELETE [FROM] 테이블

WHERE 조건 ...;

 

FROM은 생략이 가능하구요, 특정 조건에 맞는 데이터만 삭제하고자 할 경우는 WHERE 절을 추가합니다. 

DELETE 역시, WHERE 절을 생략하면 테이블 전체 데이터가 삭제되니 항상 주의를 기울여야 합니다!

 

이제 SELECT, INSERT, UPDATE, DELETE 작성법을 알아보았는데요,

다음은 위 구문을 작성하여 실행하더라도 곧바로 테이블에 적용되지 않습니다. 

다음 해야할 작업은 COMMIT (커밋) 을 해야하는데요, 

 

COMMIT 작성법은 쉽습니다.

COMMIT; 

작성하시고 실행하시면 테이블에 반영됩니다.

 

그럼 COMMIT; 을 했는데 다시 돌아가고 싶다! 라고 하실 때는 COMMIT과 반대개념으로 ROLLBACK(롤백)을 하시면 됩니다.

ROLLBACK문은 변경된 데이터들을 변경 전 상태로 되돌리는 역할을 합니다.

ROLLBACK 작성법은 COMMIT과 마찬가지로

ROLLBACK; 

작성하시고 실행하시면 됩니다.

 

DDL에 대해 알아보겠습니다.

Data Definition Language 의 약자로 데이터베이스 객체들을 생성하는데 사용되는 SQL문입니다. 데이터베이스 객체에는 데이터베이스, 테이블, 인덱스, 뷰, 트리거 등이 있고 이를 생성하는 데도 SQL문이 작성되는데 이 때 사용되는 SQL 문장들을 DDL이라고 합니다. 

 

DDL에는 대표적은 CREATE, DROP, ALTER, TRUNCAE 등 4개의 문장이 있습니다.

 

1. CREATE 문

데이터베이스 객체들을 생성할 때 사용합니다. CREATE문은 생성하는 데이터베이스 객체가 무엇이냐에 따라 그 용법이 다릅니다.

기본적인 구조는 "CREATE 객체종류 객체명 ..." 으로 동일합니다.

인덱스를 생성할 경우에는 "CREATE INDEX 인덱스명 ..." 처럼 사용합니다.

 

2. DROP 문

CREATE문과 반대로 이미 생성된 객체들을 삭제할 때 사용합니다. 삭제한다고 해서 DELETE 와 혼동하면 안됩니다!

DELETE는 테이블 상의 데이터를 삭제할 때 사용하는 것이고 DROP은 객체 자체를 데이터베이스에서 영구히 없앨 때 사용하는 문장입니다. 즉 객체를 소멸시킨다고 할 수 있습니다.

DROP문 역시 CREATE 문과 마찬가지로 대상 개게에 따라 용법이 다르지만 기본 골격은 "DROP 객체종류 객체명" 형태를 가집니다.

 

3. ALTER문

기존에 생성된 객체를 변경할 때 사용되는 문장입니다. 예를 들어, 테이블을 하나 생성해서 사용하고 있는데 갑자기 컬럼을 추가하는 것처럼 테이블 구조를 변경해야만 하는 경우가 있습니다. 이런 경우, 기존 테이블을 DROP 시키고 다시 생성하는 것은 무책임한 일입니다. 왜냐하면 기존 테이블에 이미 많은 양의 데이터가 저장되어 있을 경우에는 DROP하는 동시에 모든 데이터들이 사라지기 때문입니다. 이러한 경우에는 ALTER문을 사용합니다. ALTER문 역시 대상 객체에 따라 용법이 다르지만 CREATE 와 DROP 과 비슷합니다.

 

4. TRUNCATE문

TRUNCATE문은 DELETE문과 동일한 역할을 합니다. 즉, 테이블에 있는 데이터들을 삭제할 때 사용됩니다. 차이점이 있습니다. TRUNCATE문을 사용하여 데이터를 삭제했을 경우에 ROLLBACK을 사용하여 데이터를 복구할 수 없습니다!

TRUNCATE가 실행되면서 자동 COMMIT이 되기 떄문인데요, 그래서 TRUNCATE문은 DML이 아닌 DDL에 속하게 됩니다. 

 

 

* TRUNCATE 특징

- DELETE보다 수행속도가 빠르고 수행비용이 적다.

- 테이블에 있는 인덱스나 트리거에 영향을 주지 않고 데이터만 삭제된다.

- DROP은 테이블에 있는 데이터를 삭제함은 물론 테이블 구조까지 소멸시키는 반면에 DELETE는 메모리상에 존재하는 테이블의 데이터를 삭제한다. TRUNCATE 테이블 구조는 그대로 두고 메모뿐만 아니라 데이터 파일에 있는 데이터까지 삭제하지만 테이블 구조는 그대로 보존한다.

 

TRUNCATE 구문형식은 아래와 같습니다.

 

TRUNCATE TABLE 테이블명 ...

 

 

도움이 되셨나요?  다음 포스팅에서 뵙겠습니다^^