Structured Query Language. 즉 구조화된 질의 언어라는 의미이다.
//보충: Database에서 데이터를 조회하거나 조작하기 위해 사용하는 표준 검색 언어이다.
Relational Database Management System(RDBMS) 관계형 DBMS,
Object-Oriented Database management system 객체지향형 DBMS,
Hierarchical Database management System 계층구조 DBMS 등이 있으며,
Oracle은 RDBMS에 포함된다. RDBMS는 각 테이블은 테이블간 관계되어 있다는 것에 기반하여 데이터를 조회 및 관리한다.
파일 저장을 통한 데이터 관리 방식은 시공간적 낭비가 발생하고, 모든 데이터에 동일한 보안성을 유지하기 어렵고, 무엇보다 데이터의 무결성을 유지할 수 없다는 부분에서 문제가 있다. 그러나 DB의 경우 :
무독보편
정의: OSIS
특징: RCRC
DDL data definition language 데이터 정의어
쉽게 말해, 테이블 만들 때 쓰는 애들. create, drop, truncate, alter 등
DML + DQL data manipulation language + data query language
데이터 조작어 + 데이터 쿼리어 (CRUD의 수행)
Insert, Update, Delete 등
DCL + TCL data control language + transaction control language
데이터 제어어 (grant:권한 부여, revoke: 권한 회수 등)
트랜잭션 제어어 (commit, rollback, savepoint)
DML은 사용자가 명시적으로 commit해야 해당 트랜잭션이 반영된다.
그에 반해 DDL은 자동으로 commit이 이루어진다.
작성 순서: SFWGHO, select from where group by having order by
실행 순서: FWGHSO, from where group by having select order by
From - 대상 테이블을 선언한다.
Where - 테이블 내에 존재하는 실제 값을 대상으로 조건문을 실행하고 필터링한다.
(between A and B, in, not in, is null, is not null 등)
Group by - 컬럼 또는 값을 그룹으로 묶어 처리하도록 한다.
(rollup, cube)
Having - 그룹으로 묶인 컬럼/값 또는 그룹 함수가 적용되어 도출된 값을 대상으로 조건문 실행 및 값을 필터링한다.
(where와 동일, 단 적용 대상이 다름(그룹단위))
Select 조회할 대상 컬럼/값을 선언한다
Order by 출력할 결과를 asc 또는 desc로 정렬한다.
조건문을 반영하는 구절이라는 점에서는 같지만, where 절은 테이블에 존재하는 실제값을 대상으로 조건문을 대입하고, having절은 그룹으로 묶인, 또는 그룹 함수(Aggregate Functions)를 통해 도출된 값울 대상으로 조건문을 대입한다는 차이가 있다.
하나의 Column을 대상으로 다음 두 가지의 방법을 사용하는 경우 리턴되는 값은 다르지 않다. 두 방법 모두 해당 Column의 총계를 하나의 행으로 산출하여 리턴한다. 단, 다수의 Column을 대상으로 사용하게 되면 결과값은 달라지게 된다.
1. rollup:
계층구조 기반이다. 즉, 선언된 Column의 순서가 매우 중요하며 먼저 선언된 Column일 수록 그 중요도가 높아진다. 예를 들어 첫 번째 순서로 선언된 Column의 경우 모든 경우의 소계와 합계에 포함되지만, 가장 마지막으로 선언된 Column의 경우 합계에만 그 값이 대입된다.
grouping과 decode를 사용한다.
먼저 grouping(ColumnName)을 선언하게 되면 해당 Column이 행들에서 rollup/cube로 산출한 소계와 총계가 무엇인지 판별할 수 있다.(산출된 소계/총계인 경우 grouping 결과 1 리턴, 그 외의 경우 0 리턴) 그 위에 다시 decode를 선언하여 grouping이 리턴한 결과가 1인 경우 소계/총계명을 직접 선언하여 대체하고, else 값에 해당하는 부분에 해당 ColumnName을 다시 적어주면 소계/총계명만 깔끔하게 변경할 수 있다.
join은 행(row)과 행간의 결합, union은 열과 열과의 결합을 다룬다.