쥬로그

오라클 - 중복제거, 논리연산자, 결과정렬 본문

Study/Oracle

오라클 - 중복제거, 논리연산자, 결과정렬

쥬쥬씨 2021. 8. 26. 18:35
반응형

< 쿼리결과 중복제거, 논리연산자, 결과정렬 >

* 동일한 결과가 여러 개 나오는 경우에 이를 한 번만 표시하게 하는 연산자는 distinct 이다.
* 쿼리의 결과값에서 결과값의 라인 수(줄 수) = 레코드 수만 알고 싶을 때는 COUNT() 함수를 사용하면 된다.


* 쿼리결과 중복제거
- DISTINCT 연산자
  SELECT문의 결과값에서 특정 컬럼만 출력할 경우 중복된 값들이 나오는 경우에 이를 제거해서 표시하는 기능
 

    select distinct 컬럼명 1, 컬럼명 2, … from 테이블명 where 조건절

 

ex) EMP 테이블에서 JOB 컬럼을 표시하시오. (job 컬럼만 표시하는 것이기 때문에 * 대신에 job이 들어감) 

     -> select job from emp;
     EMP 테이블에서 job 컬럼 중복을 제거하고 표시하시오.

     -> select distinct job from emp;

 


* 논리연산자 1 (AND, OR, NOT)
- select문의 조건절에 논리 조건 적용해서 적용할 수 있는 연산자


    select * from 테이블명 where (not) 조건 1 and/or (not) 조건 2 … 

    (아닌 조건을 찾을 경우 != 사용, 이전에는 <> 사용 했었음)

 

ex) job이 ‘SALESMAN’ 이면서 ename이 ‘allen’인 사람을 찾아서 표시하시오 

    -> select * from emp where job = ‘SALESMAN’ and ename = ‘ALLEN’;

     job이 ‘SALESMAN’, ‘CLERK’인 사람을 모두 표시하시오

    -> select * from emp where job = ‘SALESMAN’ or job = ‘CLERK’;
     job이 ‘CLERK’이 아니면서 월급이 1500이 넘는 사람을 표시하시오

    -> select * from emp where job != ‘CLERK’ and salary > 1500;

 


* 논리연산자 2 (IN, BETWEEN)
ex) emp table에서  1. DEPTNO가 10, 20, 30인 직원들을 모두 표시하시오 
                     .    2. 월급(SAL)이 1000이상 1500이하인 직원을 모두 표시하시오
-> 1. select * from emp where deptno in(10, 20, 30);

     = select * from emp where deptno = 10 or deptno = 20 or deptno = 30;
     2. select * from emp where sal between 1000 and 1500; 

     = select * from emp where sal >= 1000 and sal =< 1500;

 


* 결과정렬(ORDER BY)
- select문의 결과값을 특정한 컬럼을 기준으로 오름차순/내림차순으로 정렬해서 표시

- 기본값은 오름차순 정렬임

- 여러 개의 컬럼을 나열하면 순서대로 정렬

 

    select * from 테이블명 where 조건절 order by 컬럼명 asc/desc, …

 


ex) 월급을 많이 받는 순으로 나열해서 표시하시오 

    -> select * from emp order by sal desc
      Job별로 오름차순으로 표시하고, 동일한 job에서는 연봉이 많은 순으로 표시하시오 

    -> select * from emp order by job, sal desc;

        (job에 asc 기재 안 한 이유는 기본값이 오름차순이기 때문)

 


* 결과값 일부 조회
- ROWNUM
  SQL 쿼리 결과 중 상위 몇 개만 보여주는 쿼리

  대표적인 비표준기능 -> MYSQL-LIMIT, SQLServer-TOP

 

    select * from 테이블명 where 조건절 ROWNUM <= 숫자 order by 컬럼명 asc/desc, …

 

ex) 직원 중 연봉이 많은 순위로 상위 5개만 표시하시오.
    -> select * from emp where rownum <= 5 order by sal desc;

 


* 집합함수 (Aggregation Function)
- 테이블의 전체 레코드를 대상으로 특정 컬럼을 적용해서 한 개의 값을 리턴하는 함수

count() 레코드의 개수를 리턴하는 함수

sum() / avg() 컬럼값의 합/평균을 리턴하는 함수

min() / maz() 컬럼값의 최소/최대값을 리턴하는 함수

 

    select aggregation_function(컬럼명) from 테이블명 where 조건절;


ex) emp테이블에서 JOB이 ‘clerk’인 레코드의 숫자를 표시하시오 

    -> select count(*) from emp where job = ‘clerk’;
     emp테이블에서 직원들의 연봉 총합/평균을 구하시오. 

    -> select sum(sal)/avg(sal) from emp;
     emp테이블에서 직원들의 연봉 최소값/최대값을 구하시오.

    -> select min(sal)/max(sal) from emp;

 


* 유용한 함수
length() 레코드의 문자열 컬럼의 글자수를 리턴한다.

substr() 문자열의 중간부분을 리턴한다.

upper() / lower() 문자열을 대문자/소문자로 리턴한다.

round() 레코드의 숫자 컬럼값을 반올림해서 리턴한다.

 

    select 컬럼명, 조건함수 from 테이블명;

 

ex) emp 테이블의 ename과 ename의 글자수를 표시하시오. 

    -> select ename, length(ename) from emp;
     emp 테이블의 ename의 첫 세 글자를 대문자로 표시하라.

    -> slect upper(substr(ename, 1, 3)) from emp;
     emp 테이블의 ename과 sal을 10으로 나눈 값을 반올림해서 표시하라.

    -> select ename, round(sal/10) from emp;


< Point >

☆ WHERE Population between A and B

  -> 논리연산자로 표현 Population >= A AND Population <= B

☆ ORDER BY A, B 인 경우 적용되는 순서는 A를 오름차순으로 정렬한 후 동일한 A 값에 대해서 B로 오름차순하라

☆ WHERE countrycode IN (‘A’, ‘B’)

  -> 논리연산자로 표현 countrycode = ‘A’ OR countrycode = ‘B’


< 요약 >
쿼리결과 중복제거, 논리연산자, 결과정렬
* 중복성 제거(DISTINCT)

 : 결과값이 특정컬럼이 중복되어 표현될 때 동일한 값은 한 번만 표시
* 논리연산자 (AND, OR, NOT, IN, BETWEEN)

 : 조건절의 조건식을 논리식으로 표현하는 방법 제공
* 결과값 정렬(ORDER BY)

 : 결과값을 특정 컬럼을 기준으로 오름차순(asc) / 내림차순(desc)정렬해서 표현,

   여러 개의 경우 컬럼 나열된 순서로 적용(A, B…)
* 결과값 일부조회

 : LIMIT / ROWNUM / TOP을 사용해 결과값 중 일부만 표시한다.
*집합함수 (Aggregation Function)

 : 레코드컬럼을 대상으로 하나의 값을 리턴한다. 
* 유용한 함수

 : round() - 반올림, mid() - substring, length() - 글자수, upper(), lower() - 대문자/소문자

반응형

'Study > Oracle' 카테고리의 다른 글

오라클 - SELECT INTO, INSERT INTO SELECT  (0) 2021.08.30
오라클 - 조인, 별명, 뷰  (0) 2021.08.26
오라클 - SQL, CRUD  (0) 2021.08.26
오라클 - 기본 사용법  (0) 2021.08.26
오라클 - DBMS 기초  (0) 2021.08.26