관리 메뉴

오버플로

[Oracle] select - where / group by ~ having / order by 본문

Oracle

[Oracle] select - where / group by ~ having / order by

NACO 2021. 9. 19. 17:39

~ select 에서 사용할 수 있는 다양한 절에 대해 알아보자 ~

 

일단 select의 기본 문법은 아래와 같다!

 

(필수)

select ~ from ~ : 테이블의 모든 레코드를 검색

(선택)

 where절 : 연산자를 사용하여 조건에 맞는 레코드만 검색

 group by : 조회 결과를 그룹으로 묶어서 하나만 검색 (중복값이 조회되지 않음)

 having절 : 그룹으로 묶을 조건 명시

 order by절 : 조회 결과를 정렬하여 검색

 

* 절은 필요한 것만 사용할 수 있으나, 순서를 꼭 지키자 *

 

 

 1. where절 

- 조건에 맞는 레코드만 검색됨 (결과가 참인 것!)
 
* 1=1이면 항상 참으로 모든 행이 조회되고, 1=0은 항상 거짓으로 아무것도 조회되지 않음

- 연산자를 사용하여 조건을 부여하고 검색할 때 사용

- 컬럼을 full-scan하여 일치 레코드만 검색함

- 문법) select 컬럼명, 컬럼명 alias, 컬럼명 연산자, 함수명(컬럼명)

             from 테이블명

             where 컬럼명 연산자 검색할값;

 

* 이상,이하 범위 비교시 between 사용 가능 (아래 2개 다 같은 뜻)

    where sal >= 100 and sal <=200;

    where sal between 100 and 200;

 

* 여러 값을 포함하는 레코드를 조회할 때에는 or 사용하는데, in도 사용 가능 (포함하지 않는 건 not in)

    where job = 'CLERK' or job = 'SALESMAN' or job = 'MANAGER';

    where job in ('CLERK', 'SALESMAN', 'MANAGER');

 

* null은 관계연산자로 비교되지 않음 : null 비교는 컬럼명 is null / is not null

 

* 문자열 연산자

- 문자열의 일부분만 알아도 검색 가능

- %, _ 특수문자와 같이 사용할 수 있음

- like : 특수문자와 같이 사용하지 않으면 완전히 같은 문자열 검색 (=사용과 동일하나 속도 느림)

           where 컬럼명 like ‘찾을 문자열’

           where job = 'CLERK';

           where job like 'CLERK';

- 특수문자 : % - 글자수에 상관없이 모든 글자에 매핑

- 특수문자 : _ - 한 글자로 매핑 (_하나는 한글자)

   5글자이면서 3번째에 A가 들어가는 이름을 찾는다면, where name like ' __A__'

 

 

 2.  group by~having절 

- 컬럼의 값이 중복된다면 그룹으로 묶어 하나만 조회할 때 사용

   (중복 배제 / distinct와 결과는 같으나 error 발생한다는 점과 집계함수를 쓴다는 점이 차이점!)

- 집계함수(그룹함수)와 같이 사용하면 그룹별 집계를 구할 수 있음

- group by 절에 기술되지 않은 컬럼이 조회되면 error 발생

 > 집계함수에 입력되는 컬럼은 group by절에 포함되지 않아도 됨

- 문법) select 컬럼명 (<- group by에 나온 컬럼명만 select에 쓸 수 있음)

           from 테이블명

           group by 컬럼명,,, (<- 정의한 컬럼이 그룹으로 묶여 중복 배제가 됨)

           having 그룹으로 묶일 조건

 

* distinct

- 컬럼의 값이 중복될 때 중복 배제하는 경우 사용

- 중복되지 않는 컬럼과 같이 사용하면 중복 배제가 되지 않음 (같은 값이 조회될 수 있음)

- error가 발생하지 않음

- 집계함수와 같이 사용되더라도 그룹별 집계를 얻을 수 없음

       Ex) select distinct job, mgr

       => 한 직무에서 여러 개의 mgr번호가 가지고 있으면 mgr은 중복 배제되나, 직무는 여러 개 나올 수 있음

- 문법) select distinct 컬럼명

 

** group by ~ having절과 where절의 차이

 - 조회 결과는 같으나 과정이 다름

 - group by ~ having절 : 그룹으로 묶고 난 후 조건에 따라 추려냄 (그래서 집계 가능한 것)

 - where절 : full-scan으로 조건을 추리고 난 후 묶어서 보여줌

 

 

 3. order by절 

- 조회 결과를 정렬할 때 사용 (=> 조회한 레코드는 insert한 순서대로 조회)

- 오름차순 정렬, 내림차순 정렬을 할 수 있음

 > (기본) 오름차순 : asc

                내림차순 : desc

- 정렬종류를 생략하면 asc가 기본 설정됨

- 숫자가 문자열 형식으로 저장되어 있을 때에는 자릿수의 정렬을 수행

- 모든 데이터형 정렬 가능

- order by를 사용하면 속도가 느려짐

- 문법) order by 정렬할컬럼명 정렬종류, 정렬할컬럼명 정렬종류(앞에 정렬된 컬럼의 값이 같을 때 두 번째 정렬조건),,,,

 

'Oracle' 카테고리의 다른 글

[Oracle] subquery / Scalar subquery / inline view  (0) 2021.09.24
[Oracle] function(함수)  (0) 2021.09.20
[Oracle] delete / truncate / drop  (0) 2021.09.18
[Oracle] 산술연산자  (0) 2021.09.16
[Oracle] transaction / commit / rollback  (0) 2021.09.14
Comments