SQL : 현재 관계 DBMS 시장에서 널리 사용되는 ANSI (미국 표준 기구) 표준 언어
- 비절차적 언어이므로 원하는 바만 명시, 처리하는 방법은 명시하지 않음
- 대화식 SQL과 내포된 SQL이 있다.
- 관계 DBMS는 사용자가 입력한 SQL문을 번역, 요구한 데이터를 찾는데 모든 과정을 담당한다.
데이터 정의어
- 스키마의 생성 : CREATE (DOMAIN, TABLE, VIEW...)
- CREATE SCHEMA MY_DB
- 스키마의 제거 : DROP (DOMAIN, TABLE, VIEW...)
- DROP SCHEMA MY_DB
- 릴레이션의 정의에 사용되는 오라클 데이터 타입
- INT, NUMBER(n, s) : 정수와 소수점
- CHAR(n), VARCHAR(n) : 문자열과 가변 문자열
- 제약조건
- NOT NULL, UNIQUE, CHECK ...
- 참조 무결성 제약조건
- ON DELETE NO ACTION
- ON DELETE CASCADE : 기본 키 삭제시 외래 키도 삭제된다.
- ON DELETE SET NULL : 참조되는 값 삭제시 참조하는 값을 NULL로 바꾼다.
- ON DELETE SET DEFAULT : NULL이 아닌 DEFAULT값으로 바꾼다.
- ON UPDATE NO ACTION
SELECT절
- 관계 DB에서 정보를 검색하는 SQL문
- 관계 대수의 실렉션, 프로젝션, 조인, 카티션 곱 등을 결합한 것으로 가장 자주 사용된다.
- SELECT절과 FROM절은 필수적, 나머지는 선택 사항
SELECT [DISTINCT] 애트리뷰트(들)
FROM 릴레이션(들)
[WHERE 조건
[중첩 질의]]
[GROUP BY 애트리뷰트(들)]
[HAVING 조건]
[ORDER BY 애트리뷰트(들) [ASC|DESC]];
- * (아스테리카)를 사용하면 전체에 대해 검색할 수 있다.
- 보통은 애트리뷰트를 열거해 검색
- DISTINCT를 사용하면 중복을 제거해 준다.
- 산술 연산자를 이용할 수 있다.
WHERE절 : 검색 조건을 명시
- % (퍼센트 기호)를 이용해 문자열을 비교할 수 있다.
- WHERE EMPNAME LIKE '이%' ☞ '이씨 성을 가진'
- 부울 연산자 (AND, OR, <>(NOT))를 이용해 조건을 제시할 수 있다.
- 범위 연산자도 가능
- 리스트를 사용한 검색이 가능하다.
- WHERE DNO IN (1, 3) ☞ '1번 부서나 3번 부서에 소속된'
- NULL값과의 직접적인 비교는 불가능하다.
- IS NULL, IS NOT NULL 등으로 사용가능
ORDER BY절 : 오름차순(ASC)과 내림차순(DESC)으로 정렬할 때 사용한다.
- SELECT절에 명시한 애트리뷰트들을 사용해서 정렬해야 한다.
AS문 : 서로 다른 릴레이션에 동일한 이름을 가진 애트리뷰트가 있을 때 구분하기 위한 방법
- EMPLOYEE AS E, DEPARTMENT AS D
집단 함수
- DB에서 검색된 여러 투플들의 집단에 적용되는 함수
- 한 개의 애트리뷰트에 적용되어 단일 값을 반환한다.
- SELECT절과 HAVING절에만 나타날 수 있음
- COUNT(*)는 릴레이션의 모든 행들의 총 개수
- COUNT(애트리뷰트)는 해당 애트리뷰트에서 널값이 아닌 값들의 갯수
- SUM, AVG, MAX, MIN ..
그룹화 : GROUP BY절에 사용된 애트리뷰트에 동일한 값을 갖는 투플들이 묶인다.
HAVING절 : 각 그룹이 만족해야 하는 조건을 명시
- HAVING절에 나타나는 애트리뷰트는 반드시 GROUP BY절에 나타나거나 집단 함수에 포함되어야 한다.
집합 연산 : 두 릴레이션이 합집합 호환성을 가져야 적용할 수 있다.
- UNION(합집합), EXCEPT(차집합), INTERSECT(교집합)
조인
- 두 개 이상의 릴레이션으로부터 연관된 투플들을 결합
- WHERE절에 애트리뷰트들을 비교하는 조인 조건이 포함
- 조인 조건이 명확해지도록 애트리뷰트 이름 앞에 변수를 사용하는 것이 좋다.
자체 조인 : 한 릴레이션에 속하는 투플을 동일한 릴레이션에 속하는 투플들과 조인.
- 릴레이션에 대한 별칭을 두 개 지정해야 한다.
중첩 질의
- 질의의 WHERE 또는 FROM절에 다시 SELECT문이 괄호로 묶여 포함되는 것
- 부질의(subquery)라고 한다.
- 결과는 크게 세 종류가 있다.
- 한 개의 스칼라값
- 한 개의 애트리뷰트로 이루어진 릴레이션 : 외부 질의의 WHERE절에서 IN, ANY, ALL, EXISTS와 같은 연산자를 사용해야 한다.
- IN : 한 애트리뷰트가 값들의 집합에 속하는가
- ANY : 한 애트리뷰트가 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가
- ALL : 한 애트리뷰트가 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가
- EXISTS : 중첩 질의의 결과가 빈 릴레이션인지 여부를 검사
- 여러 애트리뷰트로 이루어진 릴레이션
- 상관 중첩 질의 : 중첩 질의의 WHERE절에서 외부 질의에 선언된 릴레이션의 일부 애트리뷰트를 참조
'코딩을 배우자 > SQL로' 카테고리의 다른 글
[DB] 4. 데이터베이스 설계와 ER모델 (0) | 2017.11.06 |
---|---|
[DB] 3. 관계 대수와 SQL (3) (0) | 2017.11.04 |
[DB] 3. 관계 대수와 SQL (1) (0) | 2017.11.03 |
[DB] 2. 관계 데이터 모델과 제약조건 (0) | 2017.11.02 |
[DB] 1. 데이터베이스 시스템 (0) | 2017.10.17 |