본문 바로가기
공부/Oracle

오라클 SQL 문법 공부4 - 기본문법 실습

by 리빈아빠 2017. 9. 19.
반응형

서론

문법공부 3장까지 기본 키워드인 SELECT, FROM, WHERE, ORDER BY에 대해 실습을 해볼 예정이다. 기본 SQL문과 함수들은 첨부한 테스트 데이터를 이용하여 예제를 써나갈 예정이니 혹시나 오라클을 설치하고 SQL개발툴을 사용하여 테스트해가면서 공부를 하는 분들이라면 아래 나와있는 정보를 가지고 실습해보자. 

본론

테스트 데이터 입력

test_data.sql

위의 파일을 받아 토드나 오렌지, SQL DEVELOP 툴등을 이용하여 실행시켜주자. 참고로 사용할 계정은 SCOTT 계정이며 SCOTT 계정으로 접속하여 SQL 파일을 돌려주자.

정상적으로 입력이 되었다면 아래 데이터가 조회 될 것이다.

오라클을 아직 설치 하지 않은 유저라면 아래 링크를 통해 설치도 해보자.

2017/09/11 - [공부/Oracle] - 오라클 11g R2 윈도우에 설치하기

--desc student; select * from student; select name || ' 의 키는 ' || height || ' cm, 몸무게는 ' || weight || 'kg 입니다' AS "학생의 키와 몸무게" from student; --desc professor select * from professor; select name || '(' || position || '), ' || name || '''' || position || '''' AS "교수님" from professor;

실습문제

/*where 절 문제1 emp 테이블에서 급여(sal)가 3000이상인 사원의 사원번호(empno), 이름(ename), 업무(job), 급여(sal) 구하라*/
select empno ,
       ename ,
       job ,
       sal
  from emp
 where sal >= 3000;
 
/*where 절 문제2 emp 테이블에서 담당업무가 Manager인 사원의 정보를 사원번호, 성명, 업무, 급여, 부서번호(deptno)를 출력*/
 /*UPPER(문자열 OR 컬럼)은 해당 문자열을 대문자로 바꿔주는 함수 */ 
select empno ,
       ename ,
       job ,
       sal ,
       deptno
  from emp
 where upper(job) = 'MANAGER';
 
/*where 절 문제3 emp 테이블에서 1982년 1월 1일 이후에 입사한 사원의 사원번호, 성명, 업무, 급여, 입사일자(hiredate), 부서번호를 출력*/
  select empno ,
       ename ,
       job ,
       sal ,
       hiredate ,
       deptno
  from emp
 where sal 3000
    or 5000;
 
/*emp테이블에서 사원번호(empno)가 7902, 7788, 7566인 사원의 사원번호, 성명, 업무, 급여, 입사일자(hiredate)를 출력하라*/
  
select empno ,
       ename ,
       job ,
       sal ,
       hiredate
  from emp
 where empno IN (7902,
               7788,
               7566);
 
/*emp테이블에서 1982년 1월에 입사한 직원의 이름, 입사일, 연봉을 출력하라*/
  select ename ,
       hiredate ,
       sal
  from emp
 where hiredate LIKE '82/01%';
 
/*emp테이블에서 보너스(comm)가 NULL인 사원의 사원번호, 이름, 업무, 급여, 입사일자, 부서번호를 출력하여라*/
  
select empno ,
       ename ,
       job ,
       sal ,
       hiredate ,
       deptno
  from emp
 where comm IS NULL;
 
/*emp테이블에서 급여가 1100 이상이거나, 이름이 M으로 시작하지 않는 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하여라*/
  
select empno ,
       ename ,
       job ,
       sal ,
       hiredate ,
       deptno
  from emp
 where sal >= 1000
    OR ename NOT LIKE 'M%';
 
/*emp테이블에서 JOB이 Manager, Clerk, Analyst가 아닌 사원의 사원번호, 성명, 업무, 급여, 부서번호를 출력하여라*/
  
select empno ,
       ename ,
       job ,
       sal ,
       deptno
  from emp
 where upper(job) NOT IN ('MANAGER',
               'CLERK',
               'ANALYST');
 
/*emp테이블에서 JOB이 PRESIDENT이고 급여가 1500 이상이거나 업무가 SALESMAN인 사원의 사원번호, 이름, 업무, 급여를 출력하여라.*/
  select empno ,
       ename ,
       job ,
       sal
  from emp
 where UPPER(job) = 'PRESIDENT'
   AND (SAL >= 1500
            OR UPPER(job) = 'SALEMAN');
 
/*ORDER BY 정렬 ASC 오름차순(생략가능), DESC 내림차순*/ 
/*당연하지만 2개를 정렬하다면 맨 처음 정렬할 컬럼에 중복된 값이 없는한 맨앞에꺼 순으로 정렬됨*/
  select *
  from emp
 order by deptno DESC,
       empno ASC;
 
/*select 절의 AS(alias)는 order by 절에서만 사용가능*/
  
select deptno AS "댑" ,
       sal
  from emp
 order by "댑" DESC,
       empno ASC;

결론

이번에는 테스트데이터가 잘 입력이 되었는지와 기본적인 쿼리문제를 다루었다. 다음부터는 쿼리를 짤때 사용하는 함수들에 대해서 하나하나 설명 해나갈 예정이다.