데이터를 어떤 목적에 따라 가공하여 유용한 정보로 변환
이러한 데이터를 일정한 체계에 따라 통합하여 디스크나 메모리에 저장한 것을 데이터베이스라고 함. 응용 프로그램에 종속적이지 않도록 미들웨어 형태로 만든 것.
데이터베이스를 구축하고 관리할 수 있는 기능을 제공하는 시스템 소프트웨어를 데이터베이스 관리 시스템(DBMS)라고 함
2차원 구조의 행과 열로 구성된 테이블 형태
연산을 수학적으로 최적화할 수 있음
SQL(Structured Query Language)라는 공통의 질의언어를 정의하여 정보를 다룰 수 있음
table
스키마 = 칼럼헤더
column = 필드(속성) = attribute
row = 레코드 = tuple
수학적 이론을 바탕으로 원하는 결과 ㅈ데이터를 추출할때 사용하는 명령문
데이터베이스의 구조를 정의하고, 데디터를 조작하고, 데이터를 정의할 수 있는
절차적(How) + 비절차적(What) 언어
특정 열을 조회할 수 있음
F W G H S O → 해당 순서로 처리됨
함수
lower(문자열) / upper(문자열) : 소문자로/대문자로
chr(ASCII코드값) : 아스키코드에 해당하는 문자로 반환
trim(?방향, ?제거할 문자, 문자열): 문자열에서 공백 또는 특정 문자열 제거
방향은 leading, tailing, both가 있음. both가 기본값
제거할 문자는 공백이 기본값
ltrim, rtrim : 왼쪽/오른쪽 끝에서 trim
substr(문자열, 시작점, ?길이) : 시작점에서 길이만큼 문자열 반환
length(문자열) : 문자열 길이 반환
replace(문자열, 변경 대상, ?변경 후) : 특정 문자열을 찾아 변경
abs(숫자) : 절대값 반환
mod(숫자1, 숫자2) : 1을 2로 나눈 나머지
round(숫자, ?소수점 정수) : 반올림
trunc(숫자, ?소수점 정수) : 버림
sign(숫자) : 양수는 1, 음수는 -1, 0은 0
ceil(숫자) : 크거나 같은 최소 정수
floor(숫자) : 작거나 같은 최소 정수
sysdate : 오늘 날짜를 날짜형으로 반환
extract(avg from 날짜) : 날짜의 특정 부분 추출
avg = year/month/day/hour/minute/second
to_number, to_char, to_date : 형변환
암시적 형변환도 있으나 성능 저하나 에러를 가져올 수 있어 명시적 형변환이 좋음
nvl(avg1, avg2) : (avg1 != Null) ? avg1 : avg2
nullif(avg1, avg2) : (avg1 == avg2) ? Null : avg1
coalsce(list…) : 인자를 순서대로 평가하여 Null이 아닌 첫번째 인자 반환
case when [칼럼] = 값1 then 값A … (else 값N) end
case [칼럼] when 값1 then 값A … (else 값N) end
: 칼럼이 특정 값을 가지면 이를 새 값으로 대체하여 반환
select, update, delete에 사용 가능. insert에는 사용 불가
from 절에서 정의한 별명 사용 가능.
where [조건식]
단일행 비교 연산자 : =, <, <=, >, >=, is null
다중행 비교 연산자
in : 리스트 중 동일한 값이 하나라도 있으면 참
exists : 서브쿼리의 결과가 한 건이라도 있으면 참
all : 모두 참이면 참
any : 하나라도 참이면 참
단일행 부정 비교연산자 : !=,^=, <>, is not null
다중행 부정 비교연산자
not in : 리스트 중 동일한 값이 하나도 없으면 참
not exists : 서브쿼리의 결과가 한 건도 없으면 참
between A and B : A보다 크거나 같고 B보다 작거나 같으면 참
like : 패턴 문자열 검색. %는 0개 이상의 문자, _는 1개의 문자를 의미함
not between A and B : A보다 작거나 B보다 크면 참
not like : 패턴과 매칭되는 것이 하나도 없으면 참
and, or, not
group by를 통해 데이터를 그룹핑 할 수 있음
그룹핑한 다음에 해당 그룹에 대해 집계함수를 사용하여 통계값을 구할 수 있음
having으로 필터링할 조건을 명시할 수 있음. 그룹핑 후에 수행됨.
(where절은 집계함수를 사용할 수 없음)
칼럼을 조회할 때 정렬을 수행함
order by 칼럼 (ASC/ DESC)
두 테이블을 하나로 병합하는 것
두 테이블 간 PK와 FK의 연관성에 의해 성립하거나
연관성이 없더라도 논리적인 값들의 연관만으로도 조인을 성립할 수 있음
조인은 O(N^2)의 시간복잡도를 가짐
equi join
칼럼값이 정확하게 일치할때 성립
where절 조건이 등식인 경우
non equi join
where 절 조건이 등식이 아닌 부등식인 경우
3개 이상의 테이블을 조인하는 경우 n개의 테이블에 대해서 n-1개의 조인이 발생
outer join
조건에 맞는 행만 병합된 것을 inner join이라고 함
조건에 맞지 않는 행까지 병합한 것을 outer join이라고 함 (left outer join, right outer join, full outer join)
DBSM 별 SQL문을 따로 사용하는 불편을 줄이기 위해 표준 문법(ANSI SQL) 사용.
표준 조인에서는 기준조건은 where절이 아닌 on절을 사용하여 from에 조인 종류를 명시함.
from t.name [t.name] on 조건;
inner join
: 교집합 개념. (null이 없도록 조인) 기준이 되는 키에 따른 칼럼값이 존재하는 것만 병합
outer join
: 합집합 개념
- left outer join
: 왼쪽 테이블의 모든 행을 포함시키면서 조일
- right outer join
: 오른쪽 테이블의 모든 행을 포함시키면서 조인
- full outer join
: 왼쪽과 오른쪽의 모든 행을 포함시키면서 조인
natural join
: 같은 이름의 칼럼에 대해서는 동일한 칼럼값을 가진 행만 병합되는 조인
SQL server는 지원 안함. on 절을 사용할 수 없음.
cross join
: 왼쪽 테이블의 각 행에 대해 오른쪽 테이블 모든 행의 대응을 조합하여 결과 출력
M*N개의 행이 생성됨 (모든 경우의 수)
where절 없이 from절에 테이블을 나열하면 cross join이 됨