일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Transaction
- 조회
- statement
- 예외처리
- 다이얼로그
- Annotaion
- 자바
- array
- DB연동
- driver
- 난수
- 상속
- Oracle
- InputStream
- Connection
- DB
- Serializable
- transient
- stream
- JDBC
- select
- where
- 8bit
- Reader
- swing
- 16bit
- Join
- java
- 오라클
- set
- Today
- Total
오버플로
[Oracle] select - where / group by ~ having / order by 본문
~ 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 |