출처 : http://www.dhtmldot.com

3. SQL의 기초 (I)

여기서는 SQL에 대한 기초 적인 내용을 소개합니다. 우선 SQL의 특성에 대해서 간단히 알아보죠.

1) 테이블은 행과 열이 다.

앞서 말씀드린 것 같이 관 계형 이론의 중심에는 테이블이란 개념이 있습니다. 테이블은 일련의 속성 이나 열과 0개 이상의 행으로 구성되어 있으며, 각 행은 속성 값의 집합 입니다.

관계형 데이터베이스가 나 오기 전에는 계층적 유형(Hierarchial) 또는 네트워크 유형(Network)으로 분류되었던 데이터베이스 관리 시스템에 의존했습니다. 이 두가지 유형 은 단점이 하나 있었는데, 기존 데이터 요소의 일부를 변경하거나 새로 운 데이터 요소를 추가하려면 기존의 프로그램을 광범위하게 수정해야 했습니다. 그러나 관계형 데이터베이스에서는 데이터 요소(열)를 변경하 는 것의 효과는 미세합니다. 관계형 데이터베이스에서, 열의 크기의 증감은 테이블 내의 다른 열로부터 독립적이기 때문이죠. 그만큼 소프트웨 어 유지/관리 비용이 감소한다는 얘기가 됩니다.

관계형 이론의 규칙 중 하 나는 열의 순서가 중요하지 않다는 점입니다. 이 말은 사실 개념적인 수 준에서 테이블의 열이 여러분이 원하는 순서로 검색될 수 있다는 것 을 의미합니다. 물론 물리적인 순서는 존재를 하겠죠.

관계형 이론의 또다른 규 칙은 행의 순서가 중요하지 않다는 점이죠. 행이 어떤 특정 순서로 저장 되지 않는다는 뜻이 아니라 행이 테이블로부터 검색될 방식에 있어서 함축적 인 순서가 없다는 것을 의미합니다. 따라서 어떤 테이블의 행이 특정 순 서로 복귀되기를 원한다면, 그 순서를 지정해 주어야 합니다.

2) 데이터 검색 및 변경

SQL문은 다음 세 가지 영 역으로 크게 분류할 수 있습니다.

DML에는 다음 네 가지 기 본 문장이 있습니다.

다음은 SQL의 특성이라고 할 수 있습니다.

3) SELECT 문의 구문

SELECT문은 네 개의 DML 문 중에서 가장 많이 쓰이는 구문입니다. 그리고 UPDATE, INSERT, DELETE 문 내에서 서브 쿼리로써 존재할 수 있습니다. SELECT 문은 최소한 다음 의 두 요소로 구성됩니다.

그럼 간단한 예를 보죠. 다음은 학생(Student)이란 Table에서 이름(name)을 검색하는 쿼리입니다.

SELECT name FROM student;

결과는 다음과 같이 나오 겠죠.

NAME
----------
박상욱
배효일
이원희
윤면용
최인희
신관호
...
구교락 

학생의 이름과 나이를 알 고 싶으면 희망하는 순서로 열을 나열하면 됩니다.

SELECT name, age FROM student;

결과는 다음과 같이 나옵 니다.

NAME         AGE
----------  ----
박상욱        29
배효일        26
이원희        50
윤면용        28
최인희        27
신관호        28
...
구교락         28

테이블의 모든 열을 검색 하려면 *을 사용하면 됩니다.

SELECT * FROM student;

NAME       AGE  ENG_SCORE  KOR_SCORE  ...   AVR_SCORE
---------- --- ---------- ----------  ...  ---- ------
박상욱      29        90         85   ...          93
배효일      26        70         90   ...          80
이원희      50        30         10   ...          15
윤면용      28       100        100   ...        100
최인희      27        90         90   ...          94
신관호      28        85        100   ...          96
...        ...       ...        ...   ...        ...
구교락      28         0         10            &nb sp;   5

참! ORACLE에서는 DUAL이 라는 유틸리티 TABLE을 사용해서 산술연산이나 현재시간 등을 알 수 있어 요.

SELECT 3.14159*20 FROM DUAL;

3.14159*20
----------
62.8318

SELECT SYSDATE FROM DUAL;

SYSDATE
---------
05-JUN-98

모든 SELECT 문에 의해서 복귀된 결과는 임시 테이블을 구성합니다. 각 검색된 레코드는 이 임 시 테이블 내에서 하나의 행이고 선택 리스트의 각 요소는 하나의 열입 니다. 만약 쿼리가 어떠한 레코드도 복귀시키지 않는다면 임시 테이블은 빈 것으로 생각할 수 있죠. 이 기능은 관계형 모델의 근본 원칙입니 다.

그리고 위에서 열을 지정 한 것처럼 선택 리스트 네에서 표현식을 지정할 수 있습니다. 표현식은 열과 동일한 데이터타입 (문자, 수치, 날짜)에 속합니다. 여러분은 연산 자, 내장함수, 그리고 상수를 이용하여 여러분의 APPLICATION의 필요를 만족 시킬 수 있는 복잡한 표현식도 작성할 수 있습니다. 그리고 표현식이 다수의 열을 참조할 지라도 ORACLE이 선택 리스트 내에 있는 각 요소 를 독립된 열로 간주한다는 것을 기억하세요.

SQL에서 사용되는 산술 연산자는 C 언어에서 사용되는 산술 연산자와 동일합니다. 더하기(+), 빼기(-), 곱하기(*), 나누기(/)... 모두 똑~ 같죠?

다음은 학생들의 영어 성 적과 국어 성적을 평균내는 것입니다.

SELECT name, eng_score, kor_score, (eng_score+kor_score)/2 FROM student ;

NAME       ENG_SCORE  KOR_SCORE     (ENG_SCORE+KOR_SCORE)/2
---------- ---------  ----------   ------------------ -----
박상욱            90          85            &nb sp;         87.5
배효일            70          90            &nb sp;            80
이원희            30          10            &nb sp;            20
윤면용           100         100            &nb sp;          100
최인희            90          90            &nb sp;            90
신관호            85         100            &nb sp;         87.5
...            &nb sp; ...          ...            &nb sp;         ...
구교락            &nb sp; 0          10            &nb sp;             5

SQL에서 사용되는 문자열 연산자(String Operator) 중 가장 중요한 것이 연결 연산자(Concatenation Operator) 입니다. 이 연산자는 둘 이상의 문자열을 함께 연결할 수 있게 합니다.

SELECT name || ', ' || city FROM student;

NAME||','||CITY
----- -----------
박상욱, 부산
배효일, 진주
이원희, 서울
윤면 용, 수원
최인희, 수원
신관호, 서울
...
구교락, 부산

어떤 경우에 문자열을 연 결할까요?

여러분은 두 개 이상의 문 자열로 연결 연산자를 사용할 수 있습니다. ', '는 문자열을 콤 마(,)와 공백으로 연결할 수 있도록 사용된 것입니다.