본문 바로가기

DataBase/Oracle

Chapter 5 데이터 조회 - PLT 5.1 SELECT문의 기본 사용법

Chapter 5 데이터 조회

 
PLT 5.1 SELECT문의 기본 사용법
SELECT문장을 이용하여 데이터베이스로부터 저장되어 있는 데이터를 검색하는 방법에 대하여 알아보기로 한다.
 
SQL SELECT 문장의 성능
n         Selection : 질의에 대해 RETURN하고자 하는 테이블의 행을 선택하기 위해 SQL Selection기능을 사용할 수 있습니다.
n         Projection : 질의에 대해 RETURN하고자 하는 테이블의 열을 선택하기 위해 SQL Projection 기능을 사용할 수 있습니다.
n         Join : 공유 테이블 양쪽의 열에 대해 링크를 생성하여 다른 테이블에 저장되어 있는 데이터를 함께 가져오기 위해 SQL join 기능을 사용할 수 있습니다.
 
SELECT   [DISTINCT]             {*, column [alias], . . .}
                 FROM                       table_name
                 [WHERE                   condition]
                 [ORDER BY              {column, expression} [ASC | DESC]];
 
DISTINCT             중복 행 제거 옵션
*                         테이블의 모든 column 출력
alias                   해당 column에 대한 다른 이름 부여
table_name           테이블명 질의 대상 테이블 이름
WHERE 조건을 만족하는 행들만 검색
condition             column, 표현식, 상수 및 비교 연산자
ORDER BY           질의 결과 정렬을 위한 옵션(ASC:오름차순(Default),DESC내림차순)
 
n        SQL 문장은 대소문자를 구별하지 않습니다.
n        SQL 문장은 한 줄 또는 여러 줄에 입력될 수 있습니다.
n        하나의 명령어는 여러 줄에 나누거나 단축될 수 없습니다.
n        절은 보통 읽고 편집하기 쉽게 줄을 나누도록 합니다.(권장)
n        탭과 줄 넣기(들여쓰기)는 코드를 보다 읽기 쉽게 하기 위해 사용됩니다.(권장)
n        일반적으로 키워드는 대문자로 입력합니다. 다른 모든 단어, 즉 테이블 이름, 열 이름은 소문자로 입력합니다.(권장)
n        SQL*Plus에서SQL 문장은 SQL 프롬프트에 입력되며 1라인 이후의 라인은 라인 번호가 붙습니다. 가장 최근의 명령어가 1개가 SQL buffer에 저장됩니다.
n        SQL문장 실행은 마지막 절의 끝에 “;”를 기술하여 명령의 끝을 표시한다.
n        SELECT 키워드에 “*“ 을 사용하여 테이블의 열 데이터 모두를 조회할 수 있습니다.
n        테이블의 특정 Column을 검색하고자 할 경우 Column이름을 “,”로 구분하여 명시함으로써  특정 Column을 출력할 수 있습니다. 출력 순서는 SELECT문 뒤에 기술한 Column의 순서대로 출력됩니다.
 
산술 표현식
데이터가 출력 되는 방식을 수정하거나 계산을 수행하고자 할 때 산술 표현식을 사용한다. 산술 표현식은 열 이름, 숫자 상수, 문자 상수, 산술 연산자를 포함할 수 있으며 연산자는 +(Add), -(Subtract), *(Multiply), /(Divide)을 사용합니다. SELECT문장에서는 FROM절을 제외한 SQL문장의 절에서 사용할 수 있습니다. 또한 산술 표현식이 하나 이상의 연산자를 포함한다면 일반적인 산술 연산자 우선 순위를 따른다.
 
SQL> SELECT ename, sal, sal+300
  2  FROM emp;
 
ENAME            SAL   SAL+300
---------- --------- ---------
KING            5000      5300
BLAKE           2850      3150
. . . . . . . . . . .
14 rows selected.
모든 종업원의 급여를 $300증가 시키기 위해 덧셈 연산자를 사용하고 결과에 SAL+300을 디스플레이 합니다.
 
Null값의 처리
행이 특정 열에 대한 데이터 값이 없다면, 값은 null이 됩니다. null값은 이용할 수 없거나 지정되지 않았거나, 알 수 없거나 또는 적용할 수 없는 값입니다. null값은 0이나 공백과는 다릅니다 이용할수 없고 할당되지 않고 알려져 있지 않고 적용 불가한 값을 의미 합니다. 0은 숫자이며 공백은 문자입니다. 열이 NOT NULL로 정의되지 않았거나, 열이 생성될 때PRIMARY KEY로 정의되지 않았다면, 있으며 어떠한 datatype column들이라도 null값을 포함할 수 있습니다. null 값은 1바이트의 내부 저장 장치를 오버헤드로 사용하고 있습니다.
 
SQL> SELECT empno,ename,sal,comm,sal+comm/100
  2  FROM emp;
 
    EMPNO ENAME            SAL      COMM SAL+COMM/100
--------- ---------- --------- --------- ------------
     7839 KING            5000
     7698 BLAKE           2850
     7782 CLARK           2450
     7566 JONES           2975
     7654 MARTIN          1250      1400         1264
     7499 ALLEN           1600       300         1603
     7844 TURNER          1500         0         1500
. . . . . . . . . .
14 rows selected.
EMP 테이블에서 사원번호, 이름, 급여, 보너스, 보너스 금액을 출력하여라
 
참고 NVL 함수
 
Null값을 어떤 특정한 값으로 변환하는데 사용합니다. 변환될 수 있는 값은 날짜, 문자, 숫자 입니다. NVL함수를 사용할 때는 전환되는 값의 데이터 타입을 일치 시켜줘야 합니다.
 
NVL(Column,Null일 경우 변환값)
 
열에 별칭(Alias) 부여
질의의 결과를 출력할 때 보통 SQL*Plus는 열 Heading으로 선택된 열 이름을 사용합니다. Heading은 때로 사용자가 이해하기가 어려운 경우가 있기 때문에 열 Heading을 변경하여 질의 결과를 출력하면 보다 쉽게 사용자가 이해할 수 있습니다.
 
열 별칭(Alias) 정의
n         Heading이름을 변경 합니다.
n         계산에 유용합니다.
n         열 이름 바로 뒤에 사용합니다. 열 이름과 별칭 사이에 키워드 AS를 넣기도 합니다.
n         공백이나 특수 문자 또는 대문자가 있으면 이중 인용부호(“ ”)가 필요 합니다.
 
SQL> SELECT ename AS name, sal salary
  2  FROM emp;
 
NAME          SALARY
---------- ---------
KING            5000
BLAKE           2850
CLARK           2450
. . . . . . . . . .
14 rows selected.
EMP 테이블에서 ENAME NAME SAL SALARY로 출력
 
연결 연산자
연결 연산자(||)를 사용하여 문자 표현식을 생성하기 위해 다른 열, 산술 표현식, 상수 값에 열을 연결 할 수 있습니다. 연결자의 왼쪽에 있는 열은 단일 결과 열을 만들기 위해 조합 됩니다.
 
n        열이나 문자 STRING을 다른 열에 연결 합니다.
n        두 개의 “||”로 연결 합니다.
n        문자 표현식의 결과 열을 생성 합니다.
 
SQL> SELECT ename || ' ' || job AS "Employees"
  2  FROM emp;
 
Employees
--------------------
KING PRESIDENT
BLAKE MANAGER
. . . . . . . . . .
14 rows selected.
EMP 테이블에서 이름과 업무를 연결하여 출력
 
LITERAL 문자 STRING
LITERAL은 열 이름이나 열 별칭이 아닌 SELECT목록에 포함되어 있는 문자, 표현식, 숫자입니다. 그것은 RETURN되는 각각의 행에 대해 출력됩니다. LITERAL STRING은 질의 결과에 포함될 수 있으며 SELECT목록에서 열과 똑같이 취급됩니다. 날짜와 문자 LITERAL은 단일 인용 부호(‘ ‘)를 사용하여야 하고 숫자 LITERAL은 사용하지 않습니다.
 
n        SELECT절에 포함된 LITERAL은 문자, 표현식, 숫자입니다.
n        날짜와 문자 LITERAL 값은 단일 인용부호(‘ ‘) 안에 있어야 합니다.
n        각각의 문자 STRING RETURN된 각 행에 대한 결과입니다.
 
SQL> SELECT ename || ' ' || 'is a' || ' ' || job AS "Employees Details"
  2  FROM emp;
 
Employees Details
-------------------------
KING is a PRESIDENT
BLAKE is a MANAGER
. . . . . . . . . .
14 rows selected.
EMP 테이블에서 이름과 업무를 “KING is a PRESIDENT” 형식으로 출력
 
중복 행의 제거
특별히 명시되지 않았다면, SQL*Plus는 중복되지는 행을 제거하지 않고 Query 결과를 출력합니다. 결과에서 중복되는 행을 제거하기 위해서는 SELECT 키워드 바로 뒤에 DISTINCT를 기술한다.
 
n        DISTINCT라는 키워드는 항상 SELECT 바로 다음에 기술한다.
n        DISTINCT뒤에 나타나는 칼럼들은 모두 DISTINCT의 영향을 받는다.
n        DISTINCT뒤에 여러 개의 칼럼을 기술하였을 때 나타나는 행은 칼럼의 조합들이 중복되지 않게 나타난다.
n        DISTINCT를 사용하여 나타나는 결과는 기본적으로 오름차순 정렬된다.
 
SQL> SELECT DISTINCT job
  2  FROM emp;
 
JOB
---------
ANALYST
CLERK
MANAGER
PRESIDENT