SQL에 대해

SQL(Structure Query Language)는 말 그대로 구조화된 질문 언어로 데이터베이스 내의 데이터를 액세스하는 언어입니다.

예를 들면 데이터베이스에서 데이터를 검색, 추가, 삭제, 업데이트하고 컬럼을 바꾸거나 테이블에 컬럼을 추가하고 지울 때 SQL을 사용할 수 있습니다.

이 같은 SQL의 가장 기본이 되는 명령은 다음과 같습니다.

예약어 설명

명령

설명

SELECT

데이터베이스에 질문(query), 정보를 찾아 가져오는 명령

INSERT

데이터베이스에 기록을 추가하는 명령

UPDATE

데이터베이스의 정보를 업데이트하는 명령

DELETE

데이터베이스의 정보를 제거하는 명령

 

SELECT

테이블에서 데이터의 레코드를 얻어옵니다.

 

문법

SELECT [ALL|DISTINCT] column[,column]

FROM table_name[,table_name]

[WHERE where_expression]

[GROUP BY column [HAVING where_expression]]

[ORDER BY column]

GROUP BY column[,column]

ORDER BY column[,column]

 

매개변수

table_name                      행을 선택하는 테이블 이름

column                             컬럼 이름

where_expression           데이터 레코드를 비교하여 가져오는 조건식

 

expression이 오는 자리는 SELECT한 레코드의 컬럼 이름이 올 수 있으며, 수식 등이 올 수 있습니다. 컬럼이 오는 곳에 SQL구문에서 지원하는 함수 등을 사용할 수도 있다. 대표적으로 쓰이는 함수는 max(), min(), sum(), avg(), count()등이 있다. 만약 모든 컬럼을 다 출력하고 싶을 경우는 *를 사용하면 된다. 그리고 셀렉션 된 컬럼의 이름을 변경하고 싶다면 AS를 사용하면 변경 시킬 수 있다.

 

SELECT명령은 데이터베이스의 테이블에서 데이터를 선택하는 SQL의 가장 기본적인 명령어입니다.

문법적인 기본구성은 SELECT의 다음에 선택 컬럼의 목록을 써서 해당 컬럼의 결과를 얻어옵니다. 테이블의 모든 컬럼을 얻을 경우에는 메타문자인 *를 사용합니다.

FROM에 뒤에 오는 테이블 명을 선택하여 그 부분을 FROM 구문이라고 부릅니다. 컴마를 사용하여 복수의 테이블 이름을 지정하면 복수의 테이블에서 데이터를 빼오는 것이 가능합니다.

 

>

SELECT * FROM foo

 

WHERE절은 조건에 맞는 레코드를 선택할 수 있습니다. 조건식은 일반적으로 컬럼과 연산자, 함수, 정수에 의해 구성됩니다. 테이블 foo에 컬럼 a가 하나만 선택하는 것은 다음과 같습니다.

 

>

SELECT * FROM foo WHERE a=1

 

FROM

FROM절은 복수의 테이블 이름을 사용할 때는 복수의 테이블에서 결과를 얻을 수 있습니다. 이경우 테이블 끼리 함수를 WHERE에 조건으로서 사용할 수 있습니다. 이런 테크닉을 결합 이라고 부릅니다. 결합에는 보통 합집합, 교집합, 차집합 등의 테크닉이 있습니다.

 

>

SELECT * FROM foo, bar WHERE foo.a=bar.a

 

GROUP BY

SELECT에는 GROUP BY절을 사용하여 계산을 할 수 있습니다. GROUP BY에는 컬럼 이름 또는 식을 지정합니다. 지정된 컬럼 또는 식의 내용이 공동으로 하나의 그룹으로 그룹별 합계나 평균의 계산을 할 수 있습니다.

테이블 foo를 컬럼a에 의해 그룹화 하여 컬럼 b의 합계를 계산하는 것은 다음과 같습니다.

 

>

SELECT SUM(b) FROM foo GROUP BY a

 

ORDER BY

ORDER BY절은 선택된 결과값에서 특정 컬럼을 기준으로 소팅을 하여서 출력합니다. ORDER BY는 뒤에 입력되는 ASC는 오름차순, DESC는 내림차순으로 정렬을 합니다. 아무것도 지정하지 않으면 기본적으로 ASC가 적용됩니다.

 

>

SELECT * FROM foo ORDER BY a DESC;

SELECT * FROM foo ORDER BY a ASC;

 

DISTINCT/ALL지정

DISTINCT SELECT된 레코드 중에서 중복되는 레코드를 제거합니다. 반대로 ALL은 중복에 관계없이 모든 레코드를 다 가져옵니다. DISTICT ALL을 사용하지 않으면 기본적으로 ALL을 적용시키며 DISTINCT ON은 특정 컬럼에 대해서만 DISTINCT를 적용합니다.

 

컬럼의 알리아스(Alias)

선택 컬럼 목록에 알리아스(Alias)를 허가합니다. 선택 컬럼 목록에 알리아스를 넣는 것은 다음과 같습니다.

 

>

SELECT a*c AS mulval,

a-c AS Subval FROM foo

 

HAVING

HAVING절은 GROUP BY절에서의 WHERE를 실행한 것이라고 생각하면 됩니다. 이는 어떠한 그룹을 출력하게 될 것인지 정하게 되는데 이때 조건에 오는 조건문 역시 양식으로 표현합니다.

 

>

SELECT x, SUM(i) FROM foo GROUP BY x HAVING SUM(i)>100

 

INSERT

테이블에 데이터를 추가합니다.

 

문법

INSERT [INTO] table_name VALUES(value[,value])

INSERT [INTO] table_name (column[,column]) VALUES(value[,value])

INSERT [INTO] table_name select_statement

 

매개변수

table_name                                    레코드를 추가하는 테이블 이름

value                                             입력되는 컬럼의 값

column                                          컬럼 이름

select_statement                          SELECT 명령

 

INSERT명령은 테이블에 레코드를 추가합니다. 값은 VALUE에 계속하여 사용하고 그 때 추가되는 테이블의 정의된 순차대로 입력합니다. 문자열 스타일에는 string data와 같이 입력하고 NULL값을 추가하는 경우에는 NULL로 입력합니다.

>

INSERT INTO foo VALUE(1, 2, ABC)

 

컬럼을 지정하면 그 컬럼의 값만을 추가할 수 있습니다. 지정하지 않은 컬럼의 값은 디폴트로 정의된 값이 지정하지 않은 경우에는 NULL값이 됩니다. 또는 NOT NULL이라고 지정되있는 컬럼에는 반드시 값을 지정하지 않으면 안됩니다.

 

>

INSERT INTO foo(a, b, c) VALUE(1, 2, ABC)

 

SELECT로 얻은 결과를 그대로 테이블에 INSERT할 수 있습니다. 필요에 의해 INSERT하는 테이블에 컬럼을 지정할 수 있습니다. INSERT SELECT의 컬럼 수는 같아야 합니다.

 

>

INSERT INTO foo(a, b, c) SELECT a, b, c FROM bar

 

UPDATE

테이블의 데이터를 업데이트합니다.

 

문법

UPDATE table_name SET column=expression

[,column=expression...][FROM table_name][WHERE expression]

 

매개변수

table_name                                    변경하는 테이블 이름

column                                          컬럼 이름

expression                                    표현식

 

레코드의 내용을 새롭게 업데이트하기 위해 UPDATE명령을 사용합니다. UPDATE에 계속되어 갱신되는 테이블 이름을 입력합니다. SET으로 읽어서 변경하는 컬럼과 그 값이 같으면 갱신합니다.

WHERE절을 사용하여 테이블의 모든 레코드를 갱신대상으로 적용할 수 있습니다.

 

>

UPDATE foo SET a=1

UPDATE foo SET a=1 WHWRE b=2

UPDATE foo SET a=1, b=1 WHWRE b=2

 

DELETE

테이블의 데이터를 삭제합니다.

 

문법

DELETE [FROM] table_name[FROM table_name]

[WHERE expression]

 

매개변수

table_name                                    변경하는 테이블 이름

expression                                    표현식

 

FROM절에 입력한 테이블 이름 내에 포함되어 있는 레코드를 WHERE절에 의해 조건을 찾아 삭제합니다.

모든 레코드를 삭제하려면 DELETE보다 TRUNCATE TABLE을 사용합니다.

 

>

DELETE FROM foo

 

조건에 맞는 레코드를 소거하려면 DELETE WHERE절을 입력하여 WHERE조건에 맞는 경우에만 레코드를 소거합니다.

 

>

DELETE FROM foo WHERE a=1