728x90
반응형

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
복사했습니다!