반응형

SQL 문장들의 종류

 

명령어의 종류 

명령어 

설명 

데이터조작어

(DML : Data Manipulation Language) 

SELECT 

데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것 

 INSERT

UPDATE

DELETE

데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들 

데이터 정의어

(DDL : Data Definition Language) 

 CREATE

ALTER

DROP

RENAME

 테이블과 같은 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나

변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어

 데이터 제어어

(DCL : Data Control Language)

GRANT

REVOKE 

데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어 

 트랜잭션 제어어

(TCL : Transaction Control Language)

COMMIT

ROLLBACK 

논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어 

 

DML

1. SELECT : 입력한 자료들을 조회해보는 SQL 문

 SELECT [ALL/DISTINCT] 보고 싶은 칼럼명, 보고 싶은 칼럼명, ...
    FROM 해당 칼럼들이 있는 테이블명;
- ALL : Default 옵션이므로 별도로 표시하지 않아도 된다. 중복된 데이터가 있어도 모두 출력한다.
- DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.

 

 

/* employees 에 어떠한 컬럼이 있는지 조회*/

desc employees;

 

WILDCARD(*) 사용하기

해당 테이블 의 모든 칼럼 정보를 보고 싶을 경우에는 와일드카드로 애스터리스크( * )를 사용하여 조회

 

/* employees 테이블 조회 ( SELECT [컬럼명 또는 표현식] FROM [테이블명 또는 뷰 명]; )*/

select * from EMPLOYEES;

<이하 생략>

 

/*부서아이디 출력*/ - 별도 컬럼 출력 하고 싶을 때 select 절에 컬럼 명 추가

select department_id from employees;

 

<이하생략>

 

ALIAS 부여하기

조회된 결과에 일종의 별명(ALIAS, ALIASES)을 부여해서 칼럼 레이블을 변경할 수 있다.
 - 칼럼 별명(ALIAS)에 대한 사항을 정리하면 다음과 같다.

 - 칼럼명 바로 뒤에 온다.칼럼명과 ALIAS 사이에 AS, as 키워드를 사용할 수도 있다. (option)

 - 이중 인용부호(Double quotation)는 ALIAS가 공백, 특수문자를 포함할 경우와 대소문자 구분이 필요할 경우 사용된다

 

select first_name "name", salary "sal"
from EMPLOYEES;

 

산술 연산자

산술 연산자는 NUMBER와 DATE 자료형에 대해 적용되며 일반적으로 수학에서의 4칙 연산과 동일
그리고 우선순위를 위한 괄호 적용이 가능하다.
일반적으로 산술 연산을 사용하거나 특정 함수를 적용하게 되면 칼럼의 LABEL이 길어지게 되고, 기존의 칼럼에 대해 새로운 의미를 부여한 것이므로 적절한 ALIAS를 새롭게 부여하는 것이 좋다.
그리고 산술 연산자는 수학에서와 같이 (), *, /, +, - 의 우선순위를 가진다.

 

산술연산자 

설명 

(

우선순위를 변경하기 위한 괄호 

* 

곱하기 

/ 

나누기 

+ 

더하기 

- 

빼기 

 

select first_name,salary,salary-100 /* '+,-,*,/'같은 산술연산자를 이용해 사용 조회가능 */

from EMPLOYEES

where department_id=10;

 

합성(CONCATENATION) 연산자

문자와 문자를 연결하는 합성(CONCATENATION) 연산자를 사용하면 별도의 프로그램 도움 없이도 SQL 문장만으로도 유용한 리포트를 출력할 수 있다.
합성(CONCATENATION) 연산자의 특징

  - 문자와 문자를 연결하는 경우 2개의 수직 바(||)에 의해 이루어진다. (Oracle)

  - 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수를 사용할 수 있다.

  - 칼럼과 문자 또는 다른 칼럼과 연결시킨다.

  - 문자 표현식의 결과에 의해 새로운 칼럼을 생성한다.

 

/* 공백 추가해 이름 출력 */

select first_name||' '||last_name from EMPLOYEES;

 

 

 

WHERE 절

자신이 원하는 자료만을 검색하기 위해서 SQL 문장에 WHERE 절을 이용하여 자료들에 대하여 제한할 수 있다.

 SELECT [DISTINCT/ALL] 칼럼명 [ALIAS명] FROM 테이블명 WHERE 조건식;

 

WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.

- 칼럼(Column)명 (보통 조건식의 좌측에 위치)
- 비교 연산자
- 문자, 숫자, 표현식 (보통 조건식의 우측에 위치)
- 비교 칼럼명 (JOIN 사용시)

 

비교연산자

연산자 

연산자의 의미 

같다 

보다 크다 

>= 

보다 크거나 같다 

보다 작다 

<=  

보다 작거나 같다 

 

/*id10인사람 조회*/

select department_id

from EMPLOYEES

where department_id = 10;

 

 

SQL 연산자

연산자 

연산자의 의미 

BETWEEN a AND b 

a와 b의 값 사이에 있으면 된다. (a와 b 값 포함) 

 IN(list)

리스트에 있는 값 중 어느 하나라도 일치하면 된다 

LINE '비교문자열' 

비교 문자열과 형태가 일치하면 됨 

IS NULL 

NULL 값인 경우 

 

/* 14000이상 17000이하의 salary를 가진 사람 출력*/

select first_name,salary

from EMPLOYEES

where salary between 14000 and 17000; /*작은 값을 앞에 큰값을 뒤에, 두 값을 포함하지 않으면 BETWEEN 연산자 X*/

 

--문제 1) EMP 테이블에서 급여가 1300에서 1700 사이인 사원의 성명, 업무, 급여, 부서번호(DEPTNO)를 출력

SELECT ENAME, JOB, SAL, DEPTNO

FROM EMP

WHERE SAL BETWEEN 1300 AND 1700;

 

--문제 2) EMP 테이블에서 사원번호(EMPNO)7902, 7788,7566인 사원의 사원번호, 성명, 업무, 급여, 입사일자(HIREDATE)를 출력

SELECT EMPNO, ENAME, JOB, SAL, HIREDATE

FROM EMP

WHERE EMPNO IN(7902,7788,7566);

 

--문제 3) EMP 테이블에서 입사일자가 82년도에 입사한 사원의 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력

SELECT EMPNO, ENAME, JOB, SAL, HIREDATE, DEPTNO

FROM EMP

WHERE HIREDATE LIKE '1982%';

 

-- 문제 4) EMP 테이블에서 이름의 첫 글자가 'M'인 사원의 이름, 급여를 조회하라

SELECT ENAME, SAL

FROM EMP

WHERE ENAME LIKE 'M%';

 

-- 문제 5) EMP 테이블에서 이름의 두번째 글자가 'L'인 사원의 이름, 업무를 조회하라.

SELECT ENAME, JOB

FROM EMP

WHERE ENAME LIKE '_L%';

 

-- 문제 6) EMP 테이블에서 보너스(COMM)NULL인 사원의 사원번호 이름, 업무, 급여, 입사일자, 부서번호를 출력하라

SELECT ENAME, JOB, SAL, HIREDATE, DEPTNO

FROM EMP

WHERE COMM IS NULL;

 

 

 

와일드 카드의 종류 

와일드 카드 

설명 

0개 이상의 어떤 문자를 의미 

1개인 단일 문자를 의미 

/* L로시작하고 x로 끝나는 값 조회 */

select first_name, last_name,salary

from EMPLOYEES

where first_name like 'L%x';  

 

 

/* comm이 null이 아닌 조건만*/

select ‘My year salary = '|| (sal*12+comm) as 연봉

from emp

where comm is not null; 

 

논리연산자

조건들을 논리적으로 연결시키기 위해서 사용되는 연산자 

연산자 

연산자의 의미 

AND 

앞에 있는 조건과 뒤에오는 조건이 TRUE면 결과도 TRUE

앞 조건과 뒤 조건을 동시에 만족해야 함 

OR

앞뒤의 조건 중 하나만 참(TRUE)면 됨 

NOT

뒤에오는 조건에 반대되는 결과를 되돌려줌 

* 논리연산자 우선순위는 NOT > AND > OR 이다.

 

select first_name,salary,department_id,hire_date

from employees

where salary>10000

and department_id=90; 

 

--실습 문제1) EMP 테이블에서 급여(SAL)3000 이상인 사원의 사원번호(EMPNO),이름(ENAME),업무(JOB),급여(SAL)를 출력

SELECT EMPNO, ENAME, JOB, SAL

FROM EMP

WHERE SAL>=3000;

 

--문제2) EMP 테이블에서 담당업무가 Manager인 사원의 정보를 사원번호,성명,업무,급여,부서번호(DEPTNO)를 출력

SELECT EMPNO, ENAME, JOB, SAL, DEPTNO

FROM EMP

WHERE JOB='MANAGER';

 

--문제3) EMP 테이블에서 198211일 이후에 입사한 사원의 사원번호,성명,업무,급여,입사일자(HIREDATE),부서번호를 출력

SELECT EMPNO, ENAME, JOB, SAL, HIREDATE, DEPTNO

FROM EMP

WHERE HIREDATE >= '1982/01/01';

 

ORDER BY

- 오름차순 (ASC) 내림차순 (DESC)

- 항상 SELECT절의 마지막에 작성

 

-- 문제 1) EMP 테이블에서 입사일자(HIREDATE)순으로 정렬하여 사원번호, 이름, 업무, 급여, 입사일자, 부서번호를 출력

SELECT EMPNO, ENAME, JOB, SAL, HIREDATE, DEPTNO

FROM EMP

ORDER BY HIREDATE;

-- 문제 2) EMP 테이블에서 가장 최근에 입사한 순으로 사원번호, 이름, 업무, 급여, 입사일자, 부서번호를 출력

SELECT EMPNO, ENAME, JOB, SAL, HIREDATE, DEPTNO

FROM EMP

ORDER BY HIREDATE DESC;

 

-- 문제 3) EMP 테이블에서 부서번호(DEPTNO)로 정렬한 후 부서번호가 같을 경우 급여(SAL)가 많은 순으로 정렬하여

-- 사원번호, 성명, 업무, 부서번호, 급여를 출력

SELECT EMPNO, ENAME, JOB, DEPTNO, SAL

FROM EMP

ORDER BY DEPTNO, SAL DESC;

 

 

'Study Note > Database' 카테고리의 다른 글

집합 연산자  (0) 2016.02.04
SQL 함수  (0) 2016.02.03
DataPump  (0) 2016.02.02
Flashback  (0) 2016.02.02
DBMS JOB & Scheduler  (0) 2016.02.02

+ Recent posts