본문 바로가기
개발 수업/DB

[SQL] SQL 문장,오라클 쿼리문

by 오늘 하루s 2023. 6. 5.
728x90
더보기

Day26-2. 230605

*연산자

[비교연산]

동일하다 =

동일x하다 != or <>

이상 >=

이하 <=

미만 <

초과 >

 

[논리연산]

and 모든 조건이 true이면 참

or 하나의 조건이 true이면 참

!

-- 40번 부서의 모든 정보 조회
select * from dept
where deptno=40;
-- 40번 제외 모든 정보 조회
select * from dept
where deptno!=40;

또는

select * from dept
where deptno<>40;
-- 10,40번 부서의 모든 정보조회
(부서번호가 10번이거나 부서번호가 40번인 모든 정보조회)
select * from dept
where deptno=10 or deptno=40;
//and 안됨.(10이면서 40인 것 없음)

 

—부서번호가 10~40인 모든 정보조회
select *
from dept
where deptno Between 10 And 40;
//in은 10,20,30,40만 Between은 그 사이에.

또는

select *
from dept
where deptno≥10 and deptno<40

-- 부서번호가 10~40이 아닌 모든 정보조회
select *
from dept
where deptno not Between 10 And 40;

또는
select *
from dept
where deptno<10 or deptno>40

 

 

[오라클에서 제공하는 연산자]

—in(값1,…,값n) : ()안에 나열된 값과 일치하다

—not in(값1,…,값n) : ()안에 나열된 값과 일치x하다

—Between A and B : A와 B사이

—Not Between A and B : A와 B사이가 아닌

 

--부서번호가 10,20,30,40인 부서의 모든 정보 조회
select * from dept
where deptno=10 or deptno=20 or deptno=30 or deptno=40;

또는

select * from dept
where deptno in(10,20,30,40);
//코드가 간결해짐. 동일한 칼럼 안에서만 쓸 수 있음.

-- 부서번호가 10,20,30,40를 제외한 부서의 모든 정보 조회
(부서번호가 10과 일치하지 않거나 부서번호가 20과 일치하지 않거나 부서번호가 30과 일치하지 않거나 부서번호가 40이 아닌 부서의 모든 정보조회)

select * from dept
where deptno!=10 and deptno!=20 and deptno!=30 and deptno!=40

또는

select * from dept
where deptno not in(10,20,30,40);

-- 부서번호가 10,20,30,40를 제외한 모든 부서삭제
delete from dept
where deptno not in(10,20,30,40);

 

[오름차순(asc), 내림차순(desc)]

  • 오름차순(asc)(기본)

 : 숫자 (작은→큰) , a→z, ㄱ→ㅎ, 과거→현재, 확정값→미확정

(asc는 생략가능)

 

  • 내림차순(desc) 

 : 숫자(큰→작), z→a, ㅎ→ㄱ, 현재→과거, 미확정→확정값

 

 

—사원테이블에 사원명, job, 입사일, 급여, 커미션

select ename,job,hiredate,sal,comm

from emp;

 

정렬 : order by

-- 급여를 적게 받는 사원부터 출력
select ename,job,hiredate,sal,comm
from emp order by sal(asc)

 

-- 급여를 많이 받는 사원부터 출력
select ename,job,hiredate,sal,comm
from emp
order by sal desc;

 

-- 이름 오름차순 정렬하여 출력
select ename,job,hiredate,sal,comm
from emp
order by ename asc;

 

-- 급여가 1250~2500 이하인 사원에 대해 급여를 많이 받는 사원부터 출력
select ename,job,hiredate,sal,comm
from emp
where sal>=1250 and sal<=2500
order by sal desc;

또는

select ename,job,hiredate,sal,comm
from emp
where sal between 1250 and 2500
order by sal desc;

 

-- 급여가 1250~2500 이하인 사원에 대해 급여를 많이 받는 사원부터 출력
동일 급여를 받는 다면 이름 오름차순 출력
select ename,job,hiredate,sal,comm
from emp
where sal between 1250 and 2500
order by sal desc,ename asc;

 

-- 입사일이 빠른 사원부터 출력
select ename,job,hiredate,sal,comm
from emp
order by hiredate asc;

 

-- 입사일 동기라면 급여 많이 받는 사원부터 출력
select ename,job,hiredate,sal,comm
from emp
order by hiredate asc,sal desc;

 

-- 1981년도에 입사한 사원을 입사일이 빠른 사원부터 출력
단, 입사동기라면 고액급여자부터 조회
select ename,job,hiredate,sal,comm
from emp where hiredate
between '81/1/1' and '81/12/31'
order by hiredate asc,sal desc;

또는

select ename,job,hiredate,sal,comm
from emp
where hiredate >= '81/1/1' and hiredate <='81/12/31'
order by hiredate asc,sal desc;

날짜는 작은따옴표로 감싸야함.

 

-- 커미션이 300이거나 500이거나 1000이거나 1400이거나 0을 받는 사원
커미션 많이 받는 사원부터 출력
select ename,job,hiredate,sal,comm
from emp
where comm=300 or comm=500 or comm=1000 or comm=1400 or comm=0 order by comm desc;

또는

select ename,job,hiredate,sal,comm
from emp
where comm in(0,300,500,1000,1400)
order by comm desc;

 

[null : 미확정.알 수 없는 값]

- is null

- is not null

-- 커미션이 미확정된 사원 조회
select ename,job,hiredate,sal,comm
from emp
where comm is null;

select ename,job,hiredate,sal,comm from emp where comm = null로 하면 안 나옴.

 

-- 커미션이 확정된 사원
select ename,job,hiredate,sal,comm
from emp
where comm is not null;

 

-- 커미션 오름차순 조회
select ename,job,hiredate,sal,comm
from emp
order by comm asc;

null은 알 수 없는 값이므로 무한대로 인식

오름차순이면 null값이 가장 늦게 나옴.

 

 

[distinct : 중복된 데이터 1번 출력]

select job
from emp
order by job asc;

-> 중복된 값 모두 출력됨.

 

select distinct job
from emp
order by job asc;

-> 중복된 데이터 1번만 출력됨.

 

select distinct job as 업무
from emp
order by job asc;

 

728x90