1. SELECT
존재하는 컬럼외에 산술연산의 결과를 조회할 수 있음
연봉 salary * 12
컬럼별 별칭부여가능
select emp_name,
salary as "1달 급여",
salary * 12 연봉, --임의로 생성됨(가상컬럼), 오라클 문자열 '' 별칭은 "", as 생략가능, "" 생략가능(공백있을시 ""표시)
bonus,
salary + (salary *bonus) 실제급여, --보너스(0.3) sal*1.3
salary + (salary * nvl(bonus, 0)) "실제급여 (null)처리",
(salary + (salary * nvl(bonus, 0))) * 12 "연봉",
'원'
from employee;
select * from employee;
산술연산 중에 null이 사용되면, 이후 결과는 모두 null임
select 1+null, 1-null, 1*null, 1/null --다 null
from dual;
nvl함수 : 지정컬럼이 null이라면 특정값으로 변경함
select nvl(null,0), nvl(100, 0)
from dual;
distinct
중복값을 제거하고 유일한 값만 표시(종류를 나타낼때 사용)
select절에 한번만 사용가능하고, 여러 컴럼을 사용하면, 여러 컬럼을 하나의 단위로 사용해 중복을 제거함
select distinct dept_code, job_code
from employee;
select * from employee;
문자열 연결 연산자 ||
오라클에서 +는 숫자형끼리만 가능
select emp_name,
salary || '원' as salary
from employee;
2. WHERE절
대상 테이블에서 where조건절에 부합하는 행만 결과집합에 포함시킴(if문과 비슷)
TRUE/FALSE를 리턴함
/*
= 동등비교연산(==이렇게 쓰지마)
> < >= <= 비교연산
!= <> ^= 동등부정비교
between and 범위비교
like (not like) 문자패턴비교
is null (is not null) null여부 비교
in (not in) 비교값 목록에 포함여부
and
or
not 반전
*/
부서코드가 D9가 아닌 사원 조회
select *
from employee
where dept_code != 'D9'; --데이터에 적힌 문자의 대소문자는 구분함(비밀번호와 데이터에 적힌 값은 구분)
--where dept_code <> 'D9';
--where dept_code ^= 'D9';
--where not dept_code = 'D9';
부서코드가 D6이고, 급여를 200만원보다 많이 받는 사원의 이름, 부서코드, 급여 조회
select emp_name,
dept_code,
salary
from employee
where salary > 2000000 and dept_code = 'D6';
직급코드가 J1이 아닌 사원들의 월급등급(sal_level)을 중복 없이 조회
select distinct emp_name, sal_level
from employee
where job_code != 'J1';
급여가 3500000원 이상 6000000이하인 사원의 이름과 급여 조회
select emp_name, salary
from employee
where salary >= 3500000 and salary <= 6000000;
컬럼명 between a and b
a,b : 숫자 또는 날짜형이 올 수 있음
select emp_name, salary
from employee
where salary between 3500000 and 6000000;
입사일이 1990년 1월 1일부터 2001년 1월 1일 사이인 사원 조회
select emp_name, hire_date
from employee
where hire_date not between '90/01/01' and '01/01/01'; -- 문자 형식이지만 날짜 형식과 일치할 시 오라클은 자동으로 변환해서 계산
--'90/01/01', '1990/01/01', '90-01-01' 다 가능
LIKE
비교하고자하는 값이 지정한 특정패턴을 만족하는 경우, 해당행을 resultset에 포함시킴
% 글자가 0개 이상
_ 문자 1개
select emp_name
from employee
where emp_name like '전%'; --전씨 성을 가진 사람 조회(전이라는 글자 뒤에 글자가 0개이상 따라오면 조회
select emp_name
from employee
where emp_name like '%옹%';
select emp_name
from employee
where emp_name like '%연';
select emp_name
from employee
where emp_name like '_이_';
select email
from employee
where email like '___\_%' escape '\'; --이스케이핑 처리 '___#_%' escape '#' 이런것도 상관 없지만 \ 를 많이 씀 (등록 필요!)
전화번호 첫 세자리가 010이 아닌 사원명, 전화번호를 조회
select emp_name, phone
from employee
where phone not like '010________';
메일주소 _앞이 4개이면서, dept_code가 D9혹은 D6이면서, 급여가 270만원 이상인 사원의 사원명, 부서코드, 급여조회
select emp_name, dept_code, salary, email
from employee
where email like '____\_%' escape '\'
and (dept_code = 'D9' or dept_code = 'D6')
and salary >= 2700000;
in(값1, 값2)
값 목록에 일치하는 값이 있다면 해당행을 결과집합에 포함시킴
select emp_name,
dept_code
from employee
where dept_code in ('D9', 'D6');
select emp_name,
dept_code
from employee
where dept_code not in ('D9', 'D6'); --null포함 X
is null is not null
null데이터에 대한 연산자
select *
from employee
where dept_code is null;
연산자우선순위
1. 산술연산자
2. 연결연산자
3. 비교연산자
4. is null, like, in
5. between and
6. not
7. and
8. or
ex) a or b and c => a or (b and c)
ex) (a or b) and c
3. ORDER BY
select절 맨 마지막에 처리. 조회된 행을 특정컬럼 기준으로 재배치
nulls [first | last]
select dept_code,
emp_name
from employee
order by dept_code nulls first, emp_name asc; --nulls last가 기본값
select dept_code,
emp_name
from employee
order by 1 asc, 2 desc;
--1번째 컬럼 오름차순, 2번째 컬럼 내림차순(순서가 마지막이기에 컬럼가져와서 사용가능함) 날짜는 과거에서 미래가 오름차순
select emp_name,
hire_date
from employee
order by hire_date;
'프로그래밍 > SQL' 카테고리의 다른 글
05.18(join) (0) | 2020.05.18 |
---|---|
05.15(union, union all, intersect, minus) (0) | 2020.05.15 |
05.14(group by & having) (0) | 2020.05.14 |
05.13(Oracle 내장 함수) (0) | 2020.05.13 |
05.11(SQL) (0) | 2020.05.11 |