숫자함수

ex)

-- 절대값 구하기
select abs(-10)
from dual;

결과 값 : 10

ex)

-- 전직원의 급여를 2000삭감하고 삭감한 급여액의 절대값을 구한다.
select abs(sal-2000)
from emp;

ex)

-- 소수점 이하 버림
select floor(12.3456)
from dual;

결과 값 : 12

ex)

-- 급여가 1500 이상인 사원의 급여를 15%삭감한다. 단 소수점 이하는 버린다.
select floor(sal*0.85)
from emp
where sal>=1500;

ex)

-- 반올림
select round(12.3456)
from dual;

결과 값 : 12

ex)

-- 소수점 3번째 자리에서 반올림(소수점이 0)
select round(12.3456, 2)
from dual;

결과 값 : 12.35

ex)

-- 1의 자리에서 반올림(소수점이 0)
select round(12.3456, -1)
from dual;

결과값 : 10

ex)

-- 급여가 2천 이하인 사원들의 급여를 20%씩 인상한다. 단 10의 자리를 기준으로 반올림한다.
select round(sal*1.2, -2)
from emp
where sal<=2000;

ex)

-- 버림, 자리수를 정할 수 있다.
select trunc(12.3456, 2)
from dual;

결과값 : 12.34

ex)

-- 전 직원의 급여를 10자리 이하를 삭감한다.
select trunc(sal, -2)
from emp;

ex)

-- 나머지 구하기(10을 3으로 나누기 했을 때 나머지)
select mod(10, 3)
from dual;

결과값 : 1

Comment and share

정렬

  • select문을 통해 얻어온 결과를 특정 컬럼을 기준으로 오름차순 혹은 내림차순으로 정렬할 수 있다.
  • 숫자, 문자열, 날짜 등 모든 타입의 데이터를 정렬할 수 있다.
  • select 컬럼명 from 테이블명
    where 조건
    order by 컬럼명 [ASC|DESC]
  • ASC : 오름차순, 생략가능
  • DESC : 내림차순

ex)

-- 사원의 사원번호, 이름, 급여를 가져온다. 급여를 기준으로 오름차순 정렬을 한다.
select empno, ename, sal
from emp
order by sal asc;

select empno, ename, sal
from emp
order by sal;

ASC는 생략이 가능하다.

ex)

-- 사원의 사원번호, 이름, 급여를 가져온다. 사원번호를 기준으로 내림차순 정렬을 한다.
select empno, ename, sal
from emp
order by empno desc;

ex)

-- 사원의 사원번호, 이름을 가져온다. 사원의 이름을 기준으로 오름차순 정렬을 한다.
select empno, ename
from emp
order by ename asc;

ex)

-- 사원의 사원번호, 이름, 입사일을 가져온다. 입사일을 기준으로 내림차순 정렬을 한다.
select empno, ename, hiredate
from emp
order by hiredate desc;

ex)

-- 직무가 SALESMAN인 사원의 사원이름, 사원번호, 급여를 가져온다. 급여를 기준으로 오름차순 정렬을 한다.
select ename, empno, sal
from emp
where job = 'SALESMAN'
order by sal asc;

ex)

-- 1981년에 입사한 사원들의 사원번호, 사원 이름, 입사일을 가져온다, 사원 번호를 기준으로 내림차순 정렬을 한다.
select empno, ename, hiredate
from emp
where hiredate between '1981/01/01' and '1981/12/31'
order by empno desc;

ex)

-- 사원의 이름, 급여, 커미션을 가져온다. 커미션을 기준으로 오름차순 정렬을 한다.
select ename, sal, comm
from emp
order by comm asc;

ex)

-- 사원의 이름, 급여, 커미션을 가져온다. 커미션을 기준으로 내림차순 정렬을 한다.
select ename, sal, comm
from emp
order by comm desc;

ex)

-- 사원의 이름, 사원번호, 급여를 가져온다. 급여를 기준으로 내림차순 정렬, 이름을 기준으로 오름차순 정렬
select ename, empno, sal
from emp
order by sal desc, ename asc;

Comment and share

null비교

  • null은 정해져 있지 않은 값 혹은 무한대의 의미를 갖는 값이다.
  • 이 때문에 =이나 <>를 통해 컬럼의 값이 null이면 연산을 할 수가 없다.
  • 이 때, is null 이나 is not null을 통해 null 비교가 가능하다.

ex)

-- 사원중에 커미션을 받지 않는 사원의 사원번호, 이름, 커미션을 가져온다.
select empno, ename, comm
from emp
where comm is null;

ex)

-- 사원중에 커미션을 받는 사원의 사원번호, 이름, 커미션을 가져온다.
select empno, ename, comm
from emp
where comm is not null;

ex)

-- 회사대표(직속상관이 없는 사람)의 이름과 사원 번호를 가져온다.
select ename, empno
from emp
where mgr is null;

Comment and share

Like

  • 조건문에서 문자열 컬럼도 = 과 <>로 비교가 가능하다.
  • 만약 문자열 컬럼에 저장되어 있는 값이 특정 문자열을 포함하고 있는지 파악하고 싶을 떄 like 연산자를 사용한다.
  • select 컬럼명 from 테이블명
    where 컬럼명 like ‘와일드카드’
  • _ : 글자 하나를 의미한다.
  • % : 글자 0개 이상을 의미한다.

ex)

-- 이름이 F로 시작하는 사원의 이름과 사원번호를 가져온다.
select ename, empno
from emp
where ename like 'F%';

ex)

-- 이름이 S로 끝나는 사원의 이름과 사원번호를 가져온다.
select ename, empno
from emp
where ename like '%S';

ex)

-- 이름에 A가 포함되어 있는 사원이름과 사원 번호를 가져온다.
select ename, empno
from emp
where ename like '%A%';

ex)

-- 이름의 두번째 글자가 A인 사원의 사원 이름, 사원 번호를 가져온다.
select ename, empno
from emp
where ename like '_A%';

ex)

-- 이름이 4글자인 사원의 사원이름, 사원 번호를 가져온다.
select ename, empno
from emp
where ename like '____';

Comment and share

논리 연산자

  • 논리 연산자를 사용하면 여러 조건식을 묶어 하나의 조건식으로 만들 수 있다.
  • and : 좌우 조건식이 모두 참일 경우 참
  • or : 좌우 조건식이 모두 거짓일 경우 거짓
  • not : 조건식의 결과를 부정
  • between and : 범위 조건
  • in : 항목 조건

ex)

-- 10번 부서에서 근무하고 있는 직무가 MANAGER인 사원의 사원번호, 이름, 근무부서, 직무를 가져온다.
select empno, ename, deptno, job
from emp
where deptno = 10 and job = 'MANAGER';

ex)

-- 1982년 1월 1일 이후에 입사한 사원의 사원번호, 이름, 입사일을가져온다.
select empno, ename, hiredate
from emp
where hiredate >= '1982/01/01';

ex)

-- 10번 부서에서 근무하고 있는 직무가 MANAGER인 사원의 사원번호, 이름, 근무부서, 직무를 가져온다.
select empno, ename, deptno, job
from emp
where deptno = 10 and job = 'MANAGER';

ex)

-- 입사년도가 1981년인 사원중에 급여가 1500이상인 사원의 사원번호, 이름, 급여, 입사일을 가져온다.
select empno, ename, sal, hiredate
from emp
where hiredate >= '1981/01/01' and hiredate <= '1981/12/31' and sal >=1500;

select empno, ename, sal, hiredate
from emp
where hiredate between '1981/01/01' and '1981/12/31' and sal >=1500;

ex)

-- 20번 부서에 근무하고 있는 사원 중에 급여가 1500 이상인 사원의 사원번호, 이름, 부서번호, 급여를 가져온다.
select empno, ename, deptno, sal
from emp
where deptno = 20 and sal >= 1500;

ex)

-- 직속상관 사원 번호가 7698번인 사원중에 직무가 CLERK인 사원의 사원번호, 이름, 직속상관번호, 직무를 가져온다.
select empno, ename, mgr, job
from emp
where mgr = 7698 and job = 'CLERK';

ex)

-- 급여가 2000보다 크거나 1000보다 작은 사원의 사원번호, 이름, 급여를 가져온다.
select empno, ename, sal
from emp
where sal >2000 or sal <1000;

select empno, ename, sal
from emp
where not(sal >=1000 and sal <=2000);

select empno, ename, sal
from emp
where not(sal between 1000 and 2000);

ex)

-- 부서번호가 20이거나 30인 사원의 사원번호, 이름, 부서번호를 가져온다.
select empno, ename, deptno
from emp
where deptno = 20 or deptno = 30;

ex)

-- 직무가 CLERK, SALESMAN, ANALYST인 사원의 사원번호, 이름, 직무를 가져온다.
select empno, ename, job
from emp
where job = 'CLERK' or job = 'SALESMAN' or job = 'ANALYST';

select empno, ename, job
from emp
where job in ('CLERK','SALESMAN','ANALYST');

ex)

-- 사원 번호가 7499, 7566, 7839가 아닌 사원들의 사원번호, 이름을 가져온다.
select empno, ename
from emp
where empno <> 7499 and empno <> 7566 and empno <> 7839;

select empno, ename
from emp
where not (empno = 7499 and empno = 7566 and empno = 7839);

select empno, ename
from emp
where not (empno in(7499,7566,7839));

Comment and share

조건절

  • SQL문은 테이블내의 모든 로우에 대해 적용을 하게 된다.
  • 이 때 어떤 조건에 맞는 로우에 대해서만 작업을 하고 싶을 때 조건절을 사용한다.

select의 조건절

  • select 컬럼명 from 테이블명
    where 조건절
  • select ~ from 까지를 통해 모든 로우를 가져오고 각 로우를 조건절과 비교하여 참인 로우만 남겨주고 거짓인 로우는 제거한다.

비교 연산자

< : 작은가
> : 큰가
<= : 작거나 같은가
>= : 크거나 같은가
= : 같은가
<>, !=, ^= : 다른가

ex)

-- 근무 부서가 10번인 사원들의 사원번호, 이름 근무 부서를 가져온다.
select empno, ename, deptno
from emp
where deptno = 10;

ex)

-- 근무 부서 번호가 10번이 아닌 사원들의 사원번호, 이름, 근무 부서 번호를 가져온다.
select empno,ename, deptno
from emp
where deptno <> 10;

ex)

-- 급여가 1500이상인 사원들의 사원번호, 이름, 급여를 가져온다.
select empno,ename,sal
from emp
where sal >=1500;

ex)

-- 이름이 SCOTT 사원의 사원번호, 이름, 직무, 급여를 가져온다.
select empno, ename, job, sal
from emp
where ename = 'SCOTT';

ex)

-- 직무가 SALESMAN인 사원의 사원번호, 이름, 직무를 가져온다.
select empno,ename,job
from emp
where job = 'SALESMAN';

ex)

-- 직무가 CLERK이 아닌 사원의 사원번호, 이름, 직무를 가져온다.
select empno,ename,job
from emp
where job <> 'CLERK';

Comment and share

산술연산자

+ : 더하기
- : 빼기
* : 곱하기
/ : 나누기

ex)

-- 각 사원들의 급여액과 급여액에서 1000을 더한 값, 200을 뺀 값, 2를 곱한 값, 2로 나눈 값을 가져온다.
select sal,sal+1000,sal-200,sal*2,sal/2
from emp;

ex)

-- 각 사원의 급여액, 커미션, 급여 + 커미션을 가져온다.

select sal, nvl(comm,0), sal + nvl(comm,0)
from emp;

해당 컬럼의 값이 null 값인 경우 특정값으로 출력하고 싶으면 NVL 함수를 사용하고,
null 값이 아닐경우 특정값으로 출력하고 싶으면 NVL2 함수를 사용하면 된다.

Concat

  • 문자열을 합치는 연산자이다.
  • 문자열 ||컬럼||문자열||컬럼

ex)

-- 사원들의 이름과 직무를 다음 양식으로 가져온다.
-- 000 사원의 담당 직무는 xxx입니다.

select ename || '사원의 담당 직무는 ' || job||'입니다.'
from emp;

||는 CONCAT과 같은 기능을 보여준다.
하지만 세개이상의 문자열을 합칠때는 더 편하게 사용 할 수 있다.

Distinct

  • select문을 통해 가져온 모든 로우 중에서 중복된 로우를 제거하는 키워드
  • select distinct 컬럼명 from 테이블명

ex)

-- 사원들이 근무하고 있는 근무 부서의 번호를 가져온다.
select DISTINCT deptno
from emp;

Comment and share

Select

  • 데이터 베이스에 저장된 데이터를 가져오는 명령문이다.
  • 개발자가 가장 많이 사용하고 가장 중요한 명령문으로써 다양한 상황이나 조건에 맞는 데이터를 빠르고 쉽게 가져올 수 있도록 지원하고 있다.

모든 컬럼의 데이터 가져오기

  • select * from 테이블 명

ex)

-- 부서의 모든 정보를 가져온다.
select *
from dept;

ex)

-- 사원의 모든 정보를 가져온다.
select*
from emp;

특정 컬럼의 데이터 가져오기

  • select 컬럼명1, 컬럼명2 from 테이블명

ex)

-- 사원의 이름과 사원의 번호를 가져온다.
select ename,empno
from emp;

ex)

-- 사원의 이름과 사원번호, 직무, 급여를 가져온다
select ename,empno,job,sal
from emp;

ex)

-- 부서번호와 부서이름을 가져온다.
select deptno,dname
from dept;

Comment and share

SQL명령문

  • 관계형 데이터 베이스 관리 시스템에서 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
  • SQL문은 표준 언어와 비 표준 언어로 나뉘며 표준 언어는 모든 RDBMS(Relational DataBase Management System)제품군들이 지원하고 비 표준 언어는 특정 비 표준 언어는 특정 RDBMS에서만 지원되는 언어이다.

DDL

  • Data Definition Language(데이터 정의어)
  • 테이블과 인덱스의 구조를 관리하는 언어
  • create, drop, alter 등

DML

  • Data Manipulation Language(데이터 조작어)
  • 테이블 등에 데이터를 저장, 수정, 삭제, 추출 등을처리하는 언어
  • insert, update, delete, select 등

DCL

  • Data Control Language(데이터 제어어)
  • 사용자 권한, 작업의 취소 등을 처리할 수 있는 언어
  • grant, revoke, commit, rollback 등

Comment and share

  • page 1 of 1

Hyeon Soo Ahn

author.bio


author.job