본문 바로가기

I T./Oracle

Oracle SQL Select 명령어

SELECT 명령어

1.  SELECT 명령
       : 테이블에서 조건이나 자료를 통해 QUERY를 뽑아내겠다는 명령어

2.  형식

select  ColLlist ...    FROM  테이블명 [별명,.......]
  *: 모든 col 출력 
 DISTINCT ColList  
   : 자료가 중복되지 않게 출력 
  * WHERE 조건 
    : ROW에 대한 조건으로  생략시 모든 ROW가 대상이된다
* ORDER BY  col명이나 수식 [ASC/DESC] 
    : 오름차순 혹은 내림차순으로 소트시킨다.
 - * GROUP BY  col명이나 수식 
    : 그룹설정 
* Having 조건  
    : GROUP BY  에 대한 조건  

 
 < 실습 1. COLLIST 의 활용 > SQL> select a.saname, a.sajob, a.sapay FROM sawon a; 
           -- sawon을  a 라는 별명으로 고쳐 출력  
SQL> select saname 이름, sajob 직책, sapay 급여 FROM sawon; 
          -- saname을  이름, sajob을  직책, sapay을 급여로 헤딩명를 변경  

이름       직책            급여  
---------- ---------- ---------  
이순신     과장            3500  
이미라     대리            2503  
............................................
20 개의 행이 선택되었습니다. 

SQL>  select saname 이 름, sajob 직 책 FROM sawon; 
 select saname 이 름, sajob 직 책 FROM sawon 
          --> 헤딩명을 띄어 쓰면 에러 발생... 
라인 1 에 오류: 
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다  
  
SQL> select saname "이 름", sajob "직 책", sapay "급여" FROM sawon; 
     --> 정상적으로 수행 ,,, 헤딩명을 입력 시킬 때만 "  "를 쓰고, 그 이외의 경우는 ' '를 쓴다. 

이 름      직 책           급여  
---------- ---------- ---------  
이순신     과장            3500  
이미라     대리            2503  
...................................
20 개의 행이 선택되었습니다. 
  
--> 주로 아래와 같은 형태에서 이용.... 
SQL> select saname, sajob, sapay*1.5, sapay*2 "보너스" FROM sawon; 

SANAME  SAJOB    SAPAY*1.5   보너스  
---------- ---------- --------- ---------  
이순신     과장            5250      7000  
이미라     대리          3754.5      5006  
..........................................................
20 개의 행이 선택되었습니다. 

SQL> select sajob FROM sawon; 

SAJOB  
----------  
과장  
대리  
사원  
과장  
...........................
20 개의 행이 선택되었습니다. 

SQL> select DISTINCT sajob FROM sawon; 
--> 위와 같이 job만 출력 시킬 경우 데이타가 모두 출력됨으로 직책의 종류만 알고자 한다면,  DISTINT 명령 사용 
SAJOB  
----------  
과장  
대리  
부장  
사원  
회장  
  

SQL> select Distinct Deptno, sajob FROM sawon; 
        --> 직책별 부서의 수를 알 수 있다. 
   DEPTNO SAJOB  
--------- ----------  
       10 과장  
       10 대리  
       10 부장  
       10 사원  
       10 회장  
       20 과장  
       20 부장  
       20 사원  
       30 과장  
       30 대리  
       30 부장  
       30 사원  

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

 
 < 실습2. where 의 활용 > SQL> select * FROM sawon where sajob='과장'; 
              --> 과장만 출력 
    SABUN SANAME        DEPTNO SAJOB      SAHIRE               SAMGR     SAPAY SASE  
--------- ---------- --------- ---------- ---------------- --------- --------- ----  
        3 이순신            20 과장       85/03/01                 2      3500 남자  
        6 공부만            30 과장       95/05/01                17      4003 남자  
.........................................................................

SQL>  select * FROM sawon where  sajob IN ('과장','부장','대리'); 
          --> 과장, 부장, 대리 출력 

 SABUN SANAME        DEPTNO SAJOB      SAHIRE               SAMGR     SAPAY SASE  
------- ---------- --------- ---------- ---------------- --------- --------- ----  
     3 이순신            20 과장       85/03/01                 2      3500 남자  
     4 이미라            30 대리       83/04/01                17      2503 여자  
........................................................................
 11 개의 행이 선택되었습니다. 

SQL> select * FROM sawon where  sajob not IN ('과장','부장','대리'); 
         --> 과장, 부장, 대리 가 아닌 사람만  출력 

 SABUN SANAME        DEPTNO SAJOB      SAHIRE               SAMGR     SAPAY SASE  
------ ---------- --------- ---------- ---------------- --------- --------- ----  
     5 이순라            20 사원       90/05/01                 3      1200 여자  
    16 김유신            30 사원       81/04/01                 4       400 남자  
....................................................................
9 개의 행이 선택되었습니다. 

SQL> select * FROM sawon where sapay between 2000 AND 4000; 

 SABUN SANAME        DEPTNO SAJOB      SAHIRE               SAMGR     SAPAY SASE  
--------- ---------- --------- ---------- ---------------- --------- --------- ----  
     3 이순신            20 과장       85/03/01                 2      3500 남자  
     4 이미라            30 대리       83/04/01                17      2503 여자  
..........................................................................
9 개의 행이 선택되었습니다. 
  
SQL> select * FROm sawon where deptno=10 AND sajob='과장'; 

 SABUN SANAME        DEPTNO SAJOB      SAHIRE               SAMGR     SAPAY SASE  
------ ---------- --------- ---------- ---------------- --------- --------- ----  
       20 깨똥이            10 과장       90/05/01                13      4500 남자  

  
SQL> select * FROM sawon ORDER BY sajob; 
         ---> 항상 최종명령으로 소트 명령 (ORDER BY...) 를 쓴다.... 

SABUN SANAME     DEPTNO SAJOB  SAHIRE    SAMGR     SAPAY SASE  
-------- ---------- --------- ---------- ---------------- --------- --------- ----  
      3 이순신            20 과장       85/03/01                 2      3500 남자  
      6 공부만            30 과장       95/05/01                17      4003 남자  
      7 놀기만            20 과장       93/05/01                 2      2300 여자  
     20 깨똥이            10 과장       90/05/01                13      4500 남자  
     11 류별나            20 과장       89/12/01                 2      1600 여자  
      4 이미라            30 대리       83/04/01                17      2503 여자  
................................................................................
     19 임꺼정            20 사원       88/04/01                 7      2200 남자  
     16 김유신            30 사원       81/04/01                 4       400 남자  
     15 최진실            10 사원       91/04/01                12      2000 여자  
     10 공부해            30 사원       88/11/01                 4      1303 남자  
      1 홍길동            10 회장       80/01/01                        5000 남자  
20 개의 행이 선택되었습니다. 

SQL> select * FROM sawon ORDER BY sajob, sapay DESC; 
       --> job 을 오름차순으로 먼저 정렬후 ,ㅡ sapay를 내림차순으로 정렬 
  
 SABUN SANAME        DEPTNO SAJOB      SAHIRE               SAMGR     SAPAY SASE  
--------- ---------- --------- ---------- ---------------- --------- --------- ----  
    20 깨똥이            10 과장       90/05/01                13      4500 남자  
     6 공부만            30 과장       95/05/01                17      4003 남자  
   11 류별나            20 과장       89/12/01                 2      1600 여자  
     4 이미라            30 대리       83/04/01                17      2503 여자  
............................................................................
     5 이순라            20 사원       90/05/01                 3      1200 여자  
     9 무궁화            10 사원       84/08/01                12      1100 여자  
    18 강감찬            30 사원       86/07/01                 4      1003 남자  
    16 김유신            30 사원       81/04/01                 4       400 남자  
     1 홍길동            10 회장       80/01/01                        5000 남자  

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

SQL> select saname, sapay, sapay*1.2 보너스  FROM sawon ORDER BY 보너스; 
         -->수식에의한 소트 

SANAME         SAPAY    보너스  
---------- --------- ---------  
김유신           400       480  
강감찬          1003    1203.6  
무궁화          1100      1320  
이순라          1200      1440  
............................................
깨똥이          4500      5400  
홍길동          5000      6000  

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

 
 
  < 실습3. group by의 활용 > SQL> select sajob, count(*) 인원수, avg(sapay) "평균 급여", sum(sapay) "급여합"  
        FROM sawon  GROUP BY sajob; 
          --> sajob이라는 그룹에서 인원수, 평균 급여, 급여합 출력 
SAJOB     인원수  평균 급여    급여합  
---------- --------- --------- ---------  
과장               5    3180.6     15903  
대리               3      2002      6006  
부장               3 2934.3333      8803  
사원               8   1575.75     12606  
회장               1      5000      5000  

SQL>  select sajob, count(*) 인원수, avg(sapay) "평균 급여", sum(sapay) "급여합" FROM sawon 
  2   GROUP BY sajob 
  3  having count(*)>=5; 
     --> sajob이라는 그룹에서 인원수, 평균 급여, 급여합 계산후 인원수 5이상만 출력  

SAJOB     인원수 평균 급여    급여합  
---------- --------- --------- ---------  
과장               5    3180.6     15903  
사원               8   1575.75     12606
 

 
 
 
문 제 풀 이 
  1. 입사일이 '90-1-1'부터 오늘까지인 사람? 
SQL> select * FROM sawon where  sahire between '90-1-1' and sysdate;
2. 직책이 과장이 아닌 사람? 
SQL> select * FROM sawon where sajob !='과장';
3. 고객 테이블에서 이름이 2자이고, 담당자가 있는 사람 
SQL> select * FROm gogek where goname like '__' AND godam is NOT NULL;
4. 10번 부서에서 회장 부장 과장을 제외한 사람? 
SQL>  select * FROM sawon where deptno=10 AND  sajob not in ('회장', '부장','대리');
5. 이름안에 '한'자가 들어간 사람? 
SQL> select * FROM sawon where saname like '%한%';
6. 성씨가 이씨가 아닌 사람? 
SQL> select * FROM sawon where saname not like '이%';
7. 이름이 세자로 된사람중에서서 가운데 글자가 순인 사람? 
SQL> select * FROM sawon where saname like '_순_';
8. 과장과 대리중 10부서인 사람 
SQL>  select * FROM sawon  
where  deptno=10 AND ( sajob='과장' or sajob='대리'); 


'I T. > Oracle' 카테고리의 다른 글

Oracle Backup  (0) 2009.12.10
Oracle 권한  (0) 2009.12.10
오라클 정리 From 송~  (0) 2009.12.10
ORACLE 9i ARCHITECTURE 아키텍쳐  (0) 2009.12.10
Oracle 함수  (0) 2009.12.09
오라클 SQL  (0) 2009.12.09