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] 보고 싶은 칼럼명, 보고 싶은 칼럼명, ... |
/* 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 사용시)
비교연산자
연산자 |
연산자의 의미 |
= |
같다 |
> |
보다 크다 |
>= |
보다 크거나 같다 |
< |
보다 작다 |
<= |
보다 작거나 같다 |
/*id가 10인사람 조회*/
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 테이블에서 1982년 1월 1일 이후에 입사한 사원의 사원번호,성명,업무,급여,입사일자(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 |