2. SQL의 개요
2.1 SQL이란?
'데이터베이스가 어떤 값을 질의를 날리고 또는 값을 저장하고 하려면 데이터베이스가 이해할 수 있는 언어를 사용해야 합니다. 데이터베이스의 표준 언어가 SQL입니다.
2.1.1 Structured Query Language 구조화된 질의 언어
2.1.2 SQL의 역사
가) 1970년대초 IBM 사의 도널드 D. 챔벌린과 레이먼드 F. 보이스가 처음 개발
나) IBM의 데이터베이스 관리 시스템 시스템 R에 저장된 데이터를 조작하고 수신하기 위해 고안되었다.
다) 초기에는 SEQUEL(Structured English Query Language, 구조 영어 질의어)라는 이름으로 시작
라) SEQUEL은 나중에 SQL로 바뀌었는데, 그 까닭은 SEQUEL이 영국의 호커 시들리 항공사의 상표였기 때문
2.1.3 1986 ANSI SQL 초기 버전 발표
2.1.4 2011년에 최신 버전 발표
2.2 SQL 명령어의 종류
2.2.1 DQL(Data Query Language) : 데이터 질의어(query문) - select문
테이블 내의 데이터를 조회할 때 사용
2.2.2 DML(Data Manipulation Language) : 데이터 조작어 - insert, update, delete
'데이터를 조작한다는 건 데이터를 변경하는 것을 말합니다.
테이블 내의 데이터를 입력, 수정, 삭제할 때 사용
2.2.3 DDL(Data Definition Language) : 데이터 정의어 - create, alter, drop
테이블 등의 객체를 생성, 변경, 삭제할 때 사용
2.2.4 TCL(Transaction Control Language) :
트랜잭션 제어어 - commit, rollback, savepoint
DML문을 DB에 저장 또는 취소할 때 사용
'commit은 변경사항을 확정하는 것입니다; 트랜잭션은 DML 한정입니다.
2.2.5 DCL(Data Control Language) : 데이터 제어어 - grant, revoke
DB 사용자에게 권한을 부여하거나 취소할 때 사용
2.3 PL/SQL
제어문(조건문, 반복문)이 들어있는 SQL로써 오라클에서 지원하는 확장된 SQL
2.4 DQL : 데이터 질의어 (query문) - SELECT문
2.4.1 기본형식
SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명
WHERE 조건절 ORDER BY 정렬의 기준컬럼명[ASC/DESC]
가) 데이터베이스에서 원하는 데이터를 검색, 추출
나) Syntax
SELECT [ALL | DISTINCT] 열_리스트
'all이라는 키워드가 default로 설정되어 있다; 굵게 처리된 부분은 필수사항
[FROM 테이블_리스트]
[WHERE 조건]
[GROUP BY 열_리스트 [HAVING 조건]]
[ORDER BY 열_리스트 [ASC | DESC]];
다) 기능
Projection : 원하는 컬럼 선택
Selection : 원하는 튜플 선택
Join : 두개의 테이블 결합
기타 : 각종 계산, 정렬, 요약
emp 테이블의 모든 데이터 검색하기
select * from emp order by empno;
2.4.2 distinct / all
- distinct : 중복된 데이터를 허용하지 않음
- all : 중복된 데이터를 허용함
emp 테이블의 job 검색하기
select distinct job from emp;
select all job from emp;
3) order by : 정렬 - asc, desc
emp 테이블의 sal 내림차순 정렬하기
select * from emp order by sal desc;
emp 테이블의 job 오름차순, sal 내림차순 정렬하기
select * from emp
order by job, sal desc;
4) alias : 별칭
- 기본형식
컬럼명 [as] 별칭
emp 테이블의 job 오름차순, sal 내림차순 정렬하기
select ename 이름, job 직업코드, sal 급여
from emp
5) where 절 : 검색에 조건을 부여함
급여가 100보다 많고 400보다 작은 인원 검색하기(급여 내림차순)
select * from emp
where sal > 100 and sal > 400
order by sal desc;
6) 연산자의 종류
가) 산술연산자 : +, -, *, /
나) 비교연산자 : =, !=, >, >=, <, <=
다) 논리연산자 : and, or, not
급여가 1000 이하 또는 4000 이상의 직원 검색하기(급여 내림차순)
select * from emp
where not(sal > 1000 and sal < 4000)
7) SQL 연산자 : in, any, all, between, like, is null, is not null
select deptno, sal, ename from emp
where deptno in (10, 20, 40); // or
select deptno, sal, ename from emp
where deptno = any(10, 20, 40); // in과 같으나 연산자를 사용함
select sal, ename from emp
where sal between 300 and 500;
select ename from emp
where ename like '성%';
select ename from emp
where ename like '%성%';
select ename from emp
where ename like '_철%'; (_: 1개의 문자열)
select ename from emp
where comm is null;
8) 결합 연산자 : ||
** 결합할 내용이 날짜나 문자인 경우에는 단일따옴표(' ')를 붙임
각 사람의 급여를 검색해서 '누구누구의 급여는 얼마입니다'로 컬럼명을 만들어서 출력하기
select ename || '의 급여는 ' || sal || '입니다' from emp;
9) 연산자 우선순위 **괄호( ) : 연산자 우선순위보다 우선함
1순위 : 비교연산자, SQL연산자, 산술연산자
2순위 : not
3순위 : and
4순위 : or
5순위 : 결합연산자
(비교 예제)
select empno, sal from emp
where not(sal > 1000 and sal < 3000)
order by sal;
select empno, sal from emp
where not sal > 1000 and sal < 3000
order by sal;
마. 실습문제
1) Emp 테이블에서 입사일(hiredate)이 2005년 1월 1일 이전인 사원에 대해 사원의 이름(ename), 입사일, 부서번호(deptno)를 입사일 순으로 나타내시오.
2) Emp 테이블에서 부서번호가 20번이나 30번인 부서에 속한 사원들에 대하여 이름, 직업코드(job), 부서번호를 이름 순으로 나타내시오.