DB(SQL)

[SQL] SQL 연습1

_주야 2017. 2. 28. 22:06

 

 

1. select문 연습하기
SQL> select ename 이름, job 직업 from emp; 

[select  필드명  alias from  테이블명 ]

필드명이 별명(alias)으로 대체되어져 보여짐!

이름                        직업
-------------------- ------------------
SMITH                CLERK
ALLEN                SALESMAN
WARD                 SALESMAN
JONES                MANAGER
MARTIN             SALESMAN
BLAKE                MANAGER
CLARK                MANAGER
KING                  PRESIDENT
TURNER              SALESMAN
JAMES                CLERK
FORD                   ANALYST

MILLER               CLERK

12 개의 행이 선택되었습니다.


SQL> select * from emp
  2  where ename ='KING';

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7839 KING                 PRESIDENT                     81/11/17       5000                    10

SQL> select * from emp
  2  order by ename;

     EMPNO ENAME                 JOB                             MGR        HIREDATE      SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- 

      7499    ALLEN                SALESMAN                 7698        81/02/20       1600         300         30
      7698    BLAKE                MANAGER                  7839        81/05/01       2850                       30
      7782    CLARK                MANAGER                  7839        81/06/09       2450                      10
      7902    FORD                 ANALYST                    7566        81/12/03       3000                      20
      7900    JAMES                CLERK                        7698        81/12/03        950                       30
      7566    JONES                MANAGER                  7839        81/04/02       2975                       20
      7839    KING                  PRESIDENT                               81/11/17       5000                       10
      7654    MARTIN              SALESMAN                 7698       81/09/28        1250        1400         30
      7934    MILLER               CLERK                        7782       82/01/23        1300                       10
      7369    SMITH                CLERK                        7902       80/12/17          800                       20
      7844   TURNER               SALESMAN                  7698       81/09/08        1500          0           30

      7521      WARD               SALESMAN                 7698       81/02/22        1250        500          30

12 개의 행이 선택되었습니다.

 


문1>이름이 smith인 사람의 월급여를 조회하시오.
SQL> select sal from emp
  2  where ename='SMITH';  

       SAL
----------
       800


문2>월급이 2000이상인 사람의 이름과 직업을 선택하시오.
SQL> select ename, job from emp
  2  where sal>=2000;

ENAME                JOB
-------------------- ------------------
JONES                MANAGER
BLAKE                MANAGER
CLARK                MANAGER
KING                 PRESIDENT
FORD                 ANALYST


문3>연봉이 많은 사람 기준으로 정령하여 나타내시오.
SQL> set linesize 150
SQL> select * from emp
  2  order by sal desc;

  

문4>부서번호가 30번이고 급여가 2000이상인 사람만 조회하시오.
SQL> select * from emp
  2  where sal>=2000 and deptno=30;

     EMPNO ENAME                JOB                       MGR      HIREDATE        SAL       COMM            DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7698 BLAKE                MANAGER                  7839       81/05/01       2850                                30


문5>부서번호가 10, 20번인 자료만 조회하시오.
SQL> select * from emp
  2  where deptno=10 or deptno=20;

     EMPNO ENAME                JOB                    MGR   HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- 

      7369  SMITH                CLERK                    7902    80/12/17         800                    20
      7566  JONES                MANAGER              7839    81/04/02        2975                    20
      7782  CLARK                MANAGER              7839    81/06/09        2450                    10
      7839  KING                  PRESIDENT                        81/11/17        5000                    10
      7902  FORD                 ANALYST                7566    81/12/03         3000                    20
      7934  MILLER               CLERK                    7782    82/01/23         1300                    10

6 개의 행이 선택되었습니다.
SQL> select * from emp
  2  where deptno in(10,20);  //where 속성명 in (찾는 값1, 값2, ...)

     EMPNO ENAME                JOB                       MGR   HIREDATE        SAL    COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- 

      7369   SMITH                CLERK                   7902    80/12/17          800                   20
      7566   JONES                MANAGER              7839    81/04/02        2975                   20
      7782   CLARK                MANAGER              7839    81/06/09        2450                   10
      7839    KING                 PRESIDENT                        81/11/17        5000                   10
      7902   FORD                 ANALYST                7566    81/12/03        3000                   20
      7934   MILLER               CLERK                    7782    82/01/23        1300                   10

6 개의 행이 선택되었습니다.


문6>직업이 CLERK, SALESMAN인 사람의 이름, 직업, 연봉, 부서번호를 나타내시오.
SQL> select ename,job,sal,deptno from emp
  2  where job in('CLERK','SALESMAN');

ENAME                JOB                       SAL            DEPTNO
-------------------- ------------------ ----------

SMITH                CLERK                         800          20
ALLEN                SALESMAN                 1600          30
WARD                SALESMAN                 1250          30
MARTIN              SALESMAN                 1250          30
TURNER              SALESMAN                 1500          30
JAMES                CLERK                         950          30
MILLER               CLERK                        1300          10

7 개의 행이 선택되었습니다.


문7>부서번호를 정렬하여 나타내시오.(단, 부서번호가 같을 경우는 월급여가 많은 순서대로 나태내시오.)
SQL> select * from emp
  2  order by deptno, sal desc;

     EMPNO ENAME                JOB                       MGR              HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- 

      7839    KING              PRESIDENT                                      81/11/17       5000                            10
      7782    CLARK            MANAGER                  7839               81/06/09      2450                             10
      7934    MILLER           CLERK                        7782               82/01/23      1300                             10
      7902    FORD             ANALYST                    7566               81/12/03      3000                             20
      7566    JONES            MANAGER                  7839               81/04/02      2975                             20
     7369    SMITH            CLERK                        7902               80/12/17       800                              20
      7698    BLAKE             MANAGER                  7839               81/05/01      2850                             30
      7499    ALLEN             SALESMAN                 7698               81/02/20      1600        300                30
      7844    TURNER           SALESMAN                 7698               81/09/08      1500          0                 30
      7521    WARD             SALESMAN                 7698               81/02/22      1250        500                30
      7654    MARTIN           SALESMAN                 7698               81/09/28      1250       1400               30

      7900    JAMES             CLERK                        7698               81/12/03       950                             30

12 개의 행이 선택되었습니다.


문8>emp 테이블의 모든 자료를 조회하여 이름, 직업, 월급, 연봉을 나태내시오.
SQL> select ename, job, sal, sal*12 from emp;

ENAME                JOB                       SAL               SAL*12
-------------------- ------------------ ---------- ----------
SMITH                CLERK                        800         9600
ALLEN                SALESMAN                 1600       19200
WARD                SALESMAN                 1250       15000
JONES               MANAGER                  2975        35700
MARTIN             SALESMAN                 1250       15000
BLAKE                MANAGER                  2850      34200
CLARK                MANAGER                  2450      29400
KING                 PRESIDENT                  5000      60000
TURNER             SALESMAN                  1500      18000
JAMES               CLERK                         950       11400
FORD                ANALYST                    3000       36000

MILLER              CLERK                        1300       15600

12 개의 행이 선택되었습니다.

SQL> select ename 이름, job 직업, sal 월급, sal*12 연봉 from emp;

이름                 직업                                    월급       연봉
-------------------- ------------------ ---------- ----------
SMITH                CLERK                        800       9600
ALLEN                SALESMAN                 1600      19200
WARD                SALESMAN                 1250      15000
JONES                MANAGER                  2975      35700
MARTIN              SALESMAN                 1250      15000
BLAKE                MANAGER                  2850      34200
CLARK                MANAGER                  2450      29400
KING                  PRESIDENT                5000       60000
TURNER              SALESMAN                 1500      18000
JAMES                CLERK                        950       11400
FORD                 ANALYST                   3000       36000

MILLER               CLERK                      1300        15600

12 개의 행이 선택되었습니다.


문9>연봉의 0.33%는 세금이다. 이름, 직업, 연봉, 세금, 실수령액을 나타내시오.
SQL> select ename 이름, job 직업, sal*12 연봉, sal*12*0.33 세금, (sal*12)-(sal*12*0.33) 실수령액 from emp;

이름                 직업                                 연봉       세금        실수령액
-------------------- ------------------ ---------- ---------- ----------
SMITH                CLERK                        9600       3168       6432
ALLEN                SALESMAN                19200       6336      12864
WARD                SALESMAN                15000       4950      10050
JONES                MANAGER                 35700      11781     23919
MARTIN              SALESMAN                15000       4950      10050
BLAKE                MANAGER                 34200      11286      22914
CLARK                MANAGER                 29400       9702      19698
KING                  PRESIDENT                60000      19800      40200
TURNER              SALESMAN                18000       5940      12060
JAMES                CLERK                       11400       3762       7638
FORD                 ANALYST                   36000      11880      24120

MILLER               CLERK                       15600       5148      10452

12 개의 행이 선택되었습니다.


문10>직업이 manager인 사람의 이름과 입사일을 아래와 같이 표시하시오.
SQL> select ename "이    름", hiredate "입 사 일" from emp
  2  where job='MANAGER';

이    름             입 사 일
-------------------- --------
JONES                81/04/02
BLAKE                81/05/01
CLARK                81/06/09


문11>입사년도 81년인 사람을 모두 보이시오.
SQL> select ename from emp
  2  where hiredate>='81/01/01' and hiredate<='81/12/31';

ENAME
--------------------
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
KING
TURNER
JAMES
FORD

10 개의 행이 선택되었습니다.

 


2. 날짜 검색하기

SQL> select sysdate from dual;

SYSDATE
--------
09/07/28

 

SQL> select ename, sysdate from emp;

ENAME                SYSDATE
-------------------- --------
SMITH                09/07/28
ALLEN                09/07/28
WARD                09/07/28
JONES                09/07/28
MARTIN             09/07/28
BLAKE                09/07/28
CLARK                09/07/28
KING                  09/07/28
TURNER              09/07/28
JAMES                09/07/28
FORD                 09/07/28

MILLER               09/07/28

12 개의 행이 선택되었습니다.

문12>emp데이터를 활용하여 각 데이터의 근무년수를 계산하시오.
SQL> select (sysdate-hiredate)/365 근무년수 from emp;

  근무년수
----------
28.6319886
28.4539064
 28.448427
28.3415777
27.8511667
28.2621256
28.1552763
27.7141804
27.9059612
27.6703448
27.6703448

27.5306188

12 개의 행이 선택되었습니다.

 


3. 중복 값 제거하기
SQL> select deptno from emp;

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

        10

12 개의 행이 선택되었습니다.

SQL> select distinct deptno from emp;

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

 

4. 문장 만들기

SQL> set pagesize 15;
SQL> select ename || '님의 직업은' || job || '입니다.' as 문장 from emp;

문장
-----------------------------------------------
SMITH님의 직업은CLERK입니다.
ALLEN님의 직업은SALESMAN입니다.
WARD님의 직업은SALESMAN입니다.
JONES님의 직업은MANAGER입니다.
MARTIN님의 직업은SALESMAN입니다.
BLAKE님의 직업은MANAGER입니다.
CLARK님의 직업은MANAGER입니다.
KING님의 직업은PRESIDENT입니다.
TURNER님의 직업은SALESMAN입니다.
JAMES님의 직업은CLERK입니다.
FORD님의 직업은ANALYST입니다.
MILLER님의 직업은CLERK입니다.

12 개의 행이 선택되었습니다.
 

SQL> desc emp;
 이름                                                                          널?      유형
 ----------------------------------------------------------------------------- -------- -----------------

 EMPNO                                                                         NOT NULL NUMBER(4)
 ENAME                                                                                 VARCHAR2(10)
 JOB                                                                                      VARCHAR2(9)
 MGR                                                                                     NUMBER(4)
 HIREDATE                                                                              DATE
 SAL                                                                                      NUMBER(7,2)
 COMM                                                                                  NUMBER(7,2)
 DEPTNO                                                                                NUMBER(2)

 

SQL> select * from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                       7902 80/12/17        800                      20
      7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30
      7521 WARD                SALESMAN                 7698 81/02/22       1250        500         30
      7566 JONES                MANAGER                  7839 81/04/02       2975                     20
      7654 MARTIN              SALESMAN                 7698 81/09/28       1250       1400        30
      7698 BLAKE                MANAGER                  7839 81/05/01       2850                      30
      7782 CLARK                MANAGER                  7839 81/06/09       2450                      10
      7839 KING                  PRESIDENT                        81/11/17       5000                      10
      7844 TURNER              SALESMAN                 7698 81/09/08       1500          0          30
      7900 JAMES                CLERK                       7698 81/12/03        950                       30
      7902 FORD                 ANALYST                   7566 81/12/03       3000                       20
      7934 MILLER               CLERK                       7782 82/01/23       1300                       10

12 개의 행이 선택되었습니다.

 

SQL> select distinct deptno from emp;

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

 

SQL> select distinct job from emp;

JOB
------------------
CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

 

SQL> select ename || '님의 직업은'|| job ||'이고 연봉은'|| sal*12 ||'입니다.' from emp;

ENAME||'님의직업은'||JOB||'이고연봉은'||SAL*12||'입니다.'
------------------------------------------------------------------------------------------------
SMITH님의 직업은CLERK이고 연봉은9600입니다.
ALLEN님의 직업은SALESMAN이고 연봉은19200입니다.
WARD님의 직업은SALESMAN이고 연봉은15000입니다.
JONES님의 직업은MANAGER이고 연봉은35700입니다.
MARTIN님의 직업은SALESMAN이고 연봉은15000입니다.
BLAKE님의 직업은MANAGER이고 연봉은34200입니다.
CLARK님의 직업은MANAGER이고 연봉은29400입니다.
KING님의 직업은PRESIDENT이고 연봉은60000입니다.
TURNER님의 직업은SALESMAN이고 연봉은18000입니다.
JAMES님의 직업은CLERK이고 연봉은11400입니다.
FORD님의 직업은ANALYST이고 연봉은36000입니다.
MILLER님의 직업은CLERK이고 연봉은15600입니다.

12 개의 행이 선택되었습니다.

 

SQL> select * from dept;

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

 

SQL> select dname || '은 부서명이고 ' || loc || '은 위치 입니다.' from dept;
ACCOUNTING은 부서명이고 NEW YORK은 위치 입니다.
RESEARCH은 부서명이고 DALLAS은 위치 입니다.
SALES은 부서명이고 CHICAGO은 위치 입니다.
OPERATIONS은 부서명이고 BOSTON은 위치 입니다.

 


문13> 
- 입사년도가 81이 아닌 데이터만 조회하시오.
SQL> select * from emp
  2  where hiredate<'81/01/01' or hiredate>'81/12/31';

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 80/12/17        800                    20
      7934 MILLER               CLERK                    7782 82/01/23       1300                    10


- 부서번호가 30인 데이터의 업무종류를 중복없이 나타내시오.
SQL> select distinct job from emp
  2  where deptno=30;

JOB
------------------
SALESMAN
CLERK
MANAGER


- 직업이 salesman인 사람들 중 급여가 1500 이상인 사람만 조회하시오.
SQL> select * from emp
  2  where job='SALESMAN' and sal>=1500;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30
      7844 TURNER               SALESMAN                 7698 81/09/08       1500          0         30


- 부서번호가 10, 20인 데이터만 조회하되 급여가 많은 사람순으로 나타내시오.
SQL> select * from emp
  2  where deptno in(10, 20)
  3  order by sal desc;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7839 KING                 PRESIDENT                     81/11/17       5000                    10
      7902 FORD                 ANALYST                  7566 81/12/03       3000                    20
      7566 JONES                MANAGER                  7839 81/04/02       2975                    20
      7782 CLARK                MANAGER                  7839 81/06/09       2450                    10
      7934 MILLER               CLERK                    7782 82/01/23       1300                    10
      7369 SMITH                CLERK                    7902 80/12/17        800                    20

6 개의 행이 선택되었습니다.


- 급여가 1000 이하인 사람의 이름, 직업, 급여, 부서번호를 조회하시오.
SQL> select ename 이름, job 직업, sal 급여, deptno 부서번호 from emp
  2  where sal<=1000;

이름                 직업                     급여   부서번호
-------------------- ------------------ ---------- ----------
SMITH                CLERK                     800         20
JAMES                CLERK                     950         30


- comm(수당)이 500 미만인 자료를 조회하시오.
SQL> select * from emp
  2  where comm<500 or comm IS NULL;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 80/12/17        800                    20
      7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30
      7566 JONES                MANAGER                  7839 81/04/02       2975                    20
      7698 BLAKE                MANAGER                  7839 81/05/01       2850                    30
      7782 CLARK                MANAGER                  7839 81/06/09       2450                    10
      7839 KING                 PRESIDENT                     81/11/17       5000                    10
      7844 TURNER               SALESMAN                 7698 81/09/08       1500          0         30
      7900 JAMES                CLERK                    7698 81/12/03        950                    30
      7902 FORD                 ANALYST                  7566 81/12/03       3000                    20
      7934 MILLER               CLERK                    7782 82/01/23       1300                    10

10 개의 행이 선택되었습니다.

 

 

 

'DB(SQL)' 카테고리의 다른 글

[SQL] 함수 연습1  (0) 2017.02.28
[SQL] SQL 연습2  (0) 2017.02.28
[SQL] 권한 관리  (0) 2017.02.28
[SQL] 사용자 생성/권한부여/삭제  (0) 2017.02.28
[SQL] 데이터 입력/수정/삭제  (0) 2017.02.28