본문 바로가기

Database/Oracle

Select문 -2

【 WHERE 】  - 조건절

 

where 절 다음에는 조건식이 온다.

 

where 절을 통해 검색할 조건을 넣어주었다

여기서는 employees 테이블에서 부서번호가 90인, 사원의 이름월급을 색인한 것이다.

여기서 90은 절대적인 숫자데이터이므로 리터럴 속성을 가진다.

 

모든 옵션들을 제외하면, 각 절의 머리에는 컬럼 명이 붙는다

 

『 where 절 유의사항 』

○ 값이 문자나 날짜인 경우 반드시 '' (작은 따옴표)로 명시,  숫자는 하지 않음

○ 문자의 비교는 아스키를 기반으로 하기 때문에, 대소문자를 구분한다. (table에 저장된 데이터 포맷을 그대로 사용)

 

 

『 where 절 비교연산자 』

 

=, >, >=, <, <=,  <>, != 

<> -> 큰 것을 찾고, 작은 것을 찾은 후 not 실행

!=  -> not

 

where salary <= 2000 과 같이 사용.

 

 

사원 테이블에서, 연봉이 150000 이상인 사원의 이름과 연봉을 출력하되

이름은 NAME, 연봉은 AnnSal로 표기되게 하였다.

 

절의 실행순서는

from -> where -> select 

순서이므로 as를 통해 컬럼이름을 변경하여도, where 절 이후에 변경 된 것이고

아직 select 를 통해 재정의 되지 않았으므로 annsal이 존재하지 않은 상태에서 사용하는 것과 같다.

따라서 where은 as절로 바꾼 컬럼명을 사용할 수 없다.

 

 

 

『 where 절 비교조건 』

 

BETWEEN ... AND ... B : 두 값 사이  컬럼 BETWEEN 하한값 AND 상한값; (날짜,문자,숫자 전부 사용가능)

IN(set) : 값 목록 중의 값과 일치?

LIKE : 문자패턴이 일치한가?

IS NULL : 널값인가?

 

BEETWEEN 절을 통해 회사 월급이 2500과 3500사이에 있는

사원들의 이름과 월급을 출력한 것이다.

[* 문자의 경우에는 리터럴을 명시하는 쌍따옴표 'a' and 'b' 식으로 써주어야 함]

 

 

IN 절은 IN(set) , set의 값과 일치하는 값을 찾는다.

예를들어 where manage_id IN (100, 101, 201); 이라고 하면

매니저 id 가 (100, 101, 201) 인 것을 색인한다.

 

문장을 전체적으로 해석하면

employees 테이블에서 매니저 id가 100, 101, 201인 사원의 id와 이름, 월급, 매니저id를 색인하는 것이다.

 

 

LIKE 절은 LIKE '문자%'; 와 같이 쓰이며

where first_name LIKE 'S%'; 는 S로 시작하는 것을.

LIKE '%S%'는 S가 들어간 모든 것을, 

LIKE '%S'는 S로 끝나는 것을 의미한다

LIKE 'A_' 는 A로 시작하는 _바 개수만큼 (이 경우, A를 포함한 2글자)의 글자를 찾는것이다.

LIKE ^A  는 NOT 기호로 기존 문자 앞에 붙인다.

 

 

 

NULL, NOT NULL 은 컬럼 명 뒤에 붙이며,

해당 컬럼에 비어있는 값의 여부를 조사하여 색인한다.

위는 매니저id 가 비어있는 사원을 조사하는 문장을 의미한다.

 

 

『 논리조건 』

 

AND - 구성조건이 모두 TRUE면 TRUE 칼럼들을 반환

OR - 하나라도 TRUE면 TRUE 컬럼들을 반환

NOT - 뒤따르는 조건이 FALSE 면 TRUE 컬럼들을 반환

 

AND 문은 조건을 두개를 지정하여야 한다.

예를들어 salary >=10000 AND salary <=3000 과 같이 쓸 수 있다.

 

 

or 문은 조건 2개를 지정하여 해당되는 것에 TRUE 를 반환하여 출력한다.

 

 

 

 

『 정렬 』

ORDER BY 절을 사용하여 행을 정렬 한다.

 

ASC : 오름차순, 기본값 (생략가능)

DESC : 내림차순,

회사 사원의 입사일을 기준으로 오름차순 하여

이름과 직무, 직번, 입사일 을 순서대로 출력

order by [컬럼명] 혹은

order by [숫자] 로도 쓸 수 있는데

 

order by [숫자] 는 select 절에 명시된 순서[번호]를 의미한다.

order by 절은 select 까지 완료된 문장에서 맨 마지막에 정렬기능이 적용되기 때문에

select절의 as문을 통해 바꾼 컬럼명을 사용 가능하다.

as문을 이용해 치환한 칼럼을 order by절을 통해 정렬할 수 있다.

이 때, select 절에 쓰인 as문과 order by절에 쓰인 칼럼명은 같은 포맷이여야 한다. (""로 썼으면, 대소문자 똑같이 구별) 

 

이 경우, 첫번째 입력된 컬럼을 기준으로 그룹화 정렬이 이루어지고 마지막에 입력된 컬럼이 표기된다.

 

[문제]

 

연봉이 15만에서, 20만의 범위 이외인 사원들의 이름 및 연봉을 출력하되

연봉은 AnnSal로 출력하라

 

15만 ~ 20만 범위 이오를 지정하기 위해 salary*12 에 NOT 논리조건을 추가하여

as문의 쌍따옴표 표기를 이용해 대소문자 AnnSal로 치환하였다.

 

 

2003년 1월 1일 부터 2005년 5월 30일 사이에 고용된 사원들의 이름과 사번

고용일자를 출력하며, 고용일자를 기준으로 역순으로 출력하는 문장

 

 

사원들의 이름과 직무번호를 선택하고

20~50 사이의 수를 범위로

알파벳순 정렬하게 되었다. (본문에는 order by department_id asc 가 없음)

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

데이터 조작어 [DML] 와 트랜잭션  (0) 2021.01.05
Select 문 -3 (join)  (0) 2020.12.31
SQL 운용 상식  (0) 2020.12.29
SELECT 문 -1  (0) 2020.12.29
오라클 기본 세팅  (0) 2020.12.29