본문 바로가기

SQL/SQL 교육

[교육] SQL초보에서실전전문가까지 ORACLE - 2

2일차 기초 실습



[oracle@localhost ~]$ sqlplus '/ as sysdba'


SQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 10 19:42:55 2012


Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to an idle instance.


SQL> startup

ORACLE instance started.


Total System Global Area  167772160 bytes (메모리 사이즈)

Fixed Size                  1218316 bytes

Variable Size              62916852 bytes

Database Buffers          100663296 bytes (1일차 강의에서 DB Cache라고 잘못 설명함 Buffer가 맞음)

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL>


SQL> desc dba_users;

 Name                                      Null?    Type

 ----------------------------------------- -------- ---------------------------- USERNAME                                  NOT NULL VARCHAR2(30)

 USER_ID                                   NOT NULL NUMBER

 PASSWORD                                           VARCHAR2(30)

 ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)

 LOCK_DATE                                          DATE

 EXPIRY_DATE                                        DATE

 DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)

 TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)

 CREATED                                   NOT NULL DATE

 PROFILE                                   NOT NULL VARCHAR2(30)

 INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)

 EXTERNAL_NAME                                      VARCHAR2(4000)


SQL> select username, account_status from dba_users;

SQL> select * from tab;  <---> ALT + F1 or sp_help


SQL> select deptno from emp;

    DEPTNO
----------
        20
        30
        30
        20
        30
        30
        10
        20
        10
        30
        20

    DEPTNO
----------
        30
        20
        10
오라클에서는 11개 단위로 끊어서 보여주기 때문에 아래 DEPTNO 가 한 번 더 나온것 뿐이다.

SQL> select empno "EmpNo", ename "##name##"
  2  from emp;

     EmpNo ##name##
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
" " 안에 넣은 Alias는 특수기호, 대소문자를 마음데로 사용할 수 있게 해준다.


SQL> select empno || ' ' || ename "EmpInfo"
  2  from emp;

EmpInfo
---------------------------------------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING

'||' 파이프기호를 사용하여 텍스트를 붙일 수 있다.  SQL Server의 '+'  기호와 동일한 역할을 한다.


SQL> select ename, sal, sal*2 from emp;

ENAME             SAL      SAL*2
---------- ---------- ----------
SMITH             800       1600
ALLEN            1600       3200
WARD             1250       2500
JONES            2975       5950
MARTIN           1250       2500
BLAKE            2850       5700

SQL서버에서는 (알수없음) 이라고 나오는것과 달리 수식 그대로를 컬럼명 처럼 보여준다.


SQL> show all
appinfo is OFF and set to "SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFF and is the first few characters of the next SELECT statement
cmdsep OFF
colsep " "
compatibility ver

show all 은 SQL*PLUS 의 모든 설정 값을 보여준다.
autocommit OFF 는 자동커밋 설정을 꺼놓았음을 보여줌.


SQL> SET autocommit ON

이런식으로 설정을 켜거나 끌 수 있다.

SQL> SET Feed OFF
SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
SQL>

Feed 옵션은 SQL Server의 SET NOCOUNT ON 과 동일함.

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------ ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80           800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81          1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81          2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81          1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81          2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81          2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87          3000                    20
      7839 KING       PRESIDENT            17-NOV-81          5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81          1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87          1100                    20

     EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------ ---------- ---------- ----------
      7900 JAMES      CLERK           7698 03-DEC-81           950                    30
      7902 FORD       ANALYST         7566 03-DEC-81          3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82          1300                    10
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------ ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80           800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81          1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81          2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81          1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81          2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81          2450                    10

'/' 는 이전에 사용했던 쿼리를 그대로 다시 실행하는 명령어.

SQL> ;
  1* select * from emp

';' 는 이전에 사용했던 쿼리를 그대로 보여주는 명령어.


SQL> set pagesize 100

페이지 나누는 사이즈 크기 변경 명령어.

SQL> set termout ON

출력결과 보여주고 가리는 명령어.

SQL> set time on
20:41:26 SQL>

쿼리 실행 시간을 보여주는 명령어.

SQL> set underline -
> -
> ;
SP2-0311: string expected but not found
SQL> set underline --
>
SQL>

set underline 에서 '-' 하나만 사용하면 오류가 나온다. 반드시 '--' 두개를 입력해야한다.

SQL> col dname heading "GOOD|dname"
SQL> select * from dept;

           GOOD
    DEPTNO dname          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

컬럼명 위에 다른 명칭을 추가로 붙이 싶을 때 사용한다. 실제로는 거의 사용할 필요 없음.

SQL> col sal for 999,999
SQL> select * from emp;

     EMPNO ENAME  JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ------ --------- ---------- ------------ -------- ---------- ----------
      7369 SMITH  CLERK           7902 17-DEC-80         800                    20
      7499 ALLEN  SALESMAN        7698 20-FEB-81       1,600        300         30
      7521 WARD   SALESMAN        7698 22-FEB-81       1,250        500         30

원하는 보기 형태로 컬럼 포맷을 지정함 3자리 단위로 ',' 를 붙여서 보여줌.

SQL> col ename
COLUMN   ename ON
FORMAT   a6
SQL> col ename clear
SQL> col ename
SP2-0046: COLUMN 'ename' not defined

정의된 컬럼의 속성을 보여주기도 하고, 정의된 포맷 속성을 삭제할 수도 있음.

SQL> clear col
columns cleared

정의된 컬럼 포맷 전부 삭제.

SQL> ed
Wrote file afiedt.buf

ed라는 에디터에 쿼리를 저장해놓고 수정 및 실행할 수 있음.

[oracle@localhost ~]$ ls -alrt

현재 디렉토리 파일 중 최신 파일부터 정렬해서 보여줌.

SQL> select * from emp where job='clerk';
no rows selected

SQL> select * from emp where job='CLERK';

Oracle에서는 대소문자 구분함.

SQL> select *
  2  from emp
  3  where not deptno=20 and deptno=10;

Oracle에서는 where 절에 NOT 이라는 인자를 앞에 두어서 조건을 부정으로 바꿀 수 있다.

SQL> select * from emp where not (deptno=20 and deptno=10);

이렇게도 응용이 가능함.

SQL> select * from emp where ename like '민경\_%' escape '\';

     EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM
---------- ---------- --------- ---------- ------------ ---------- ----------
    DEPTNO
----------
      2892 민경_왕태  DEVELOPER       7566 08-NOV-12          3500
        40

조건에 있는 특정 캐릭터를 제거하는 용도로 사용할 수 있는데 escape 는 실제 필드에서 잘 사용하지 않는다.





아래는 Oracle의 설정을 볼 수 있다. 윈도우로 치면 레지스트리에 등록되어있는 설정값들이다.
[oracle@localhost ~]$ export
declare -x CLASSPATH="/u01/app/oracle/product/10.2.0/db_1/JRE:/u01/app/oracle/product/10.2.0/db_1/jlib:/u01/app/oracle/product/10.2.0/db_1/rdbms/jlib"
declare -x COLORTERM="gnome-terminal"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-a7aNh1ZI77"
declare -x DESKTOP_SESSION="default"
declare -x DESKTOP_STARTUP_ID=""
declare -x DISPLAY=":0.0"
declare -x EDITOR="vi"
declare -x GDMSESSION="default"
declare -x GNOME_DESKTOP_SESSION_ID="Default"
declare -x GNOME_KEYRING_SOCKET="/tmp/keyring-Kd9oCq/socket"
declare -x GTK_IM_MODULE="iiim"
declare -x GTK_RC_FILES="/etc/gtk/gtkrc:/home/oracle/.gtkrc-1.2-gnome2"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/home/oracle"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x LANG="ko_KR.UTF-8"
declare -x LD_ASSUME_KERNEL="2.4.19"
declare -x LD_LIBRARY_PATH="/u01/app/oracle/product/10.2.0/db_1/lib:/lib:/usr/lib:/usr/local/lib"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="oracle"
declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
declare -x MAIL="/var/spool/mail/oracle"
declare -x NLS_LANG="AMERICAN_AMERICA.KO16KSC5601"
declare -x OLDPWD
declare -x ORACLE_BASE="/u01/app/oracle"
declare -x ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_1"
declare -x ORACLE_SID="orcl"
declare -x ORACLE_TERM="xterm"
declare -x ORA_NLS33="/u01/app/oracle/product/10.2.0/db_1/ocommon/nls/admin/data"
declare -x PATH="/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/oracle/bin:/u01/app/oracle/product/10.2.0/db_1/bin"
declare -x PWD="/home/oracle"
declare -x SESSION_MANAGER="local/localhost.localdomain:/tmp/.ICE-unix/6748"
declare -x SHELL="/bin/bash"
declare -x SHLVL="2"
declare -x SSH_AGENT_PID="6788"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-GnNolg6748/agent.6748"
declare -x TERM="xterm"
declare -x USER="oracle"
declare -x WINDOWID="18874449"
declare -x XAUTHORITY="/home/oracle/.Xauthority"
declare -x XMODIFIERS="@im=htt"







이중에서 TIMING, COL colname FORMAT 등은 실제 자주 사용한다고 한다.