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







