본문 바로가기

ORACLE11g/SQL

[11gSQL] 1장 데이터를 조회해보기

#1-4

Projection : 테이블에서 데이터를 검색할 때 반환될 COLUMN을 선택할 수 있다.

Projection의 예는 다음과 같다.

SQL> SELECT ename, sal, comm FROM emp;


SQL> SELECT sal, ename, comm FROM emp;


SQL> SELECT sal, sal, sal, sal FROM emp;


SQL> SELECT sal, sal + 100, sal - 100, sal * 100, sal / 100 FROM emp;


SQL> SELECT SUM(sal), AVG(sal), MIN(sal), MAX(sal) FROM emp;


Selection : 테이블에서 데이터를 검색할 때 반환될 ROW을 선택 할 수 있으며, 제약 조건을 이용하여 선택될 행을 제한할 수 있다.

Selection의 예는 다음과 같다.

SQL> SELECT * FROM emp;


SQL> SELECT * FROM emp

   WHERE deptno = 20;


SQL> ed

   Wrote file afiedt.buf


1  SELECT empno, ename, sal, deptno FROM emp

2* WHERE detpno = 20

SQL> /

ed : 방금 입력한 쿼리를 메모장으로 다시 불러와 보여준다.


SQL> SELECT grade_level FROM job_grades;


SQL> COL grade_level FOR a11
SQL> /


리터럴(literal) : 고정된 값, 변경되지 않는 상수.

아래 분홍색 부분이 리터럴의 예이다.

SQL> SELECT 100, 'KBS', 'kbs', '26-MAY-11' FROM emp;


SQL> SELECT empno, ename, 'KBS', 'kbs', '26-MAY-11' FROM emp;


함수(function)

함수가 포함된 쿼리문의 예.

SQL> SELECT empno, ename, INITCAP(ename) FROM emp;


수식이 포함된 쿼리문의 예.

SQL> SELECT empno, ename, sal, sal + 10, sal - 10, sal * 10, sal / 1 0 FROM emp;


#1-8

SQL> SELECT *

    2   FROM (SELECT empno, ename, sal

                  FROM emp);


#1-12
SQL> SELECT POWER(2,3) FROM emp;


#1-33
SQL> SELECT empno, ename, job, sal FROM emp;


SQL> SELECT empno, ename job, sal FROM emp; ①


SQL> SELECT empno, ename AS job, sal FROM emp; ②

ename 컬럼의 이름을 job이라는 alias(별명)로 표시하겠다는 쿼리문이 된다. ①번 쿼리의 경우 다른 사람이 쿼리문을 보았을 때 단순히 실수인지, 의도적으로 입력한 것인지 알 수 없으므로 ②번 쿼리처럼 AS로 ename을 job이라는 alias로 조회한다는 것을 명시해주는 것이 권장사항.


#1-20
SQL> SELECT empno, ename || sal, comm FROM emp;


SQL> SELECT empno, ename || 'KBS' AS name FROM emp;


SQL> SELECT empno, ename || ' ' || 'KBS' AS name FROM emp;


SQL> SELECT ename || empno AS email FROM emp;


SQL>SELECT ename, sal FROM emp;를 응용하여

       Message
       ---------------------------------------------------------
       SMITH씨 당신의 급여가 800에서 880으로 조정되었습니다.
       ALLEN씨 당신의 급여가 1600 에서 1760으로 조정되었습니다.


처럼 표시 되도록 쿼리문을 완성해보기.

우선 위 쿼리문을 저장한다.


SQL> SAVE a1

        Created file a1.sql


SQL> SAVE a1

        SP2-0540: File "a1.sql" already exists.

        Use "SAVE filename[.ext] REPLACE".


두 번째로 SAVE a1을 입력하자 이미 같은 이름의 파일이 존재한다는 오류가 발생했다. 그럴때는
SQL> SAVE a1 REPLACE

        Wrote file a1.sql

SAVE 파일명 : 최근 입력한 쿼리문을 파일명.sql로 저장한다.


REPLACE 옵션을 이용하면 덮어쓰기가 가능하다.



아래 쿼리문을 통해 현재 클라이언트 컴퓨터의 Database Character set을 확인 할 수 있다.(한글이 안나오는 원인!)
SQL> ed

        Wrote file afiedt.buf


    1  SELECT parameter, value

    2  FROM nls_database_parameters

    3* WHERE parameter LIKE '%CHARACTERSET%'


SQL> /


SQL> COL value FORMAT a30
SQL> L

    1  SELECT parameter, value

    2  FROM nls_database_parameters

    3* WHERE parameter LIKE '%CHARACTERSET%'
SQL> /


       PARAMETER                          VALUE
       ------------------------------       -------------------------
       NLS_CHARACTERSET                AL32UTF8   <-- Database Character set
       NLS_NCHAR_CHARACTERSET     AL16UTF16


위 명령어를 이용하여 Database Character set을 확인한 뒤 exit명령어로 나간다.

SQL> exit


C:\Users\Administrator>SET NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949

클라이언트 설정을 한글이 지원되는 언어로 변경해준다!


C:\Users\Administrator>notepad ic.bat

로그인 할 때 필요한 ic.bat 파일을 다시열고!


SET PATH=F:\DATABASE\instantclient_11_2_64bit;%PATH%
SET NLS_LANG=AMERICAN_AMERICA.KO16MSWIN949 ←라인을 추가하고 저장 종료.
sqlplus usera/oracle@192.168.10.11:1521/orcl.oraedu.com


 C:\Users\Administrator>dir *.sql
     C 드라이브의 볼륨에는 이름이 없습니다.
     볼륨 일련 번호: C2A4-48C6

     C:\Users\Administrator 디렉터리

     2016-05-07  오후 05:04               117 a1.sql
     2016-05-07  오후 03:17                59 login.sql
                      2개 파일                 176 바이트
                      0개 디렉터리  149,706,387,456 바이트 남음


C:\Users\Administrator>ic

Sql에 로그인 한다.


SQL> get a1

   1* SELECT ename || '씨 당신의 급여가 ' || sal || '에서 ' || sal*1.1 || '으로 조정되었습니다' AS "Message" FROM emp;

get 파일명 : 파일명.sql에 저장되어있는 쿼리문을 불러온다.

#1-23

SQL> SELECT empno, ename, job, sal FROM emp; 쿼리문을 변경하여 

       MSG
       ----------------------------------------------------------
       7369,'SMITH','CLERK',800
       7499,'ALLEN','SALESMAN',1600
       ...

처럼 표시 되도록 하려면?

SQL> SELECT object_type FROM user_objects;


SQL> ed

        Wrote file afiedt.buf

    1* SELECT DISTINCT object_type FROM user_objects

SQL> /

DISTINCT : 결과 값 중에서 중복된 결과는 한 번만 보여주는 옵션.