과목 II. SQL 기본 및 활용
제1장 SQL 기본
제1절 관계형 데이터베이스 개요
제2절 SELECT 문
제3절 함수
제4절 WHERE 절
제5절 GROUP BY, HAVING 절
제6절 ORDER BY 절
제7절 조인
제8절 표준 조인
# 데이터 제어어(DCL: Data Control Language)
* 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어
# SELECT [ALL/DISTINCT] 보고 싶은 칼럼명 FROM 해당 칼럼들이 있는 테이블명;
* ALL: Default 옵션이므로 별도로 표시하지 않아도 된다.
* DISTINCT: 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.
# WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.
* 칼럼(Column)명(보통 조건식의 좌측에 위치)
* 비교 연산자
* 문자, 숫자, 표현식(보통 조건식의 우측에 위치)
* 비교 칼럼명(JOIN 사용시)
# NULL의 연산
* NULL 값과의 연산(+, -, *, / 등)은 NULL 값을 리턴
* NULL 값과의 비교 연산(=, >, >=, <, <=)은 거짓(FALSE)을 리턴
* 특정 값보다 크다, 적다라고 표현할 수 없음
# 부정 비교 연산자
* !=: 같지 않다.
* ^=: 같지 않다.
* <>: 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)
* NOT 칼럼명 =: ~와 같지 않다.
* NOT 칼럼명 >: ~보다 크지 않다.
# GROUP BY 절과 HAVING 절의 특성
* GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
* 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
* GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다.
* 집계 함수는 WHERE 절에는 올 수 없다. (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행된다.)
* WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거한다.
* HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.
* GROUP BY 절에 의해 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.
* HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.
# DUAL 테이블의 특성
* 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.
* SELECT ~ FROM ~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.
* DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.
# NULL 관련 함수
* 오라클 함수: NVL(표현식1, 표현식2), ISNULL(표현식1, 표현식2)
* SQL Server 함수: NULLIF(표현식1, 표현식2), COALESCE(표현식1, 표현식2, ...)
# ORDER BY 문장
* SELECT 칼럼명 [ALIAS명] FROM 테이블명 [WHERE 조건식] [GROUP BY 칼럼(Column)이나 표현식] [HAVING 그룹 조건식] [ORDER BY 칼럼(Column)이나 표현식 [ASC 또는 DESC] ];
* ASC(Ascending): 조회한 데이터를 오름차순으로 정렬한다. (기본 값이므로 생략 가능)
* DESC(Descending): 조회한 데이터를 내림차순으로 정렬한다.
# GROUP BY 문장
* SELECT [DISTINCT] 칼럼명 [ALIAS명] FROM 테이블명 [WHERE 조건식] [GROUP BY 칼럼(Column)이나 표현식] [HAVING 그룹 조건식]
# NULL 포함 연산의 결과
* NULL + 2, 2 + NULL, NULL - 2, 2 - NULL, NULL * 2, 2 * NULL, NULL / 2, 2 / NULL의 결과는 모두 NULL이다.
# ORDER BY 절 특징
* 기본적인 정렬 순서는 오름차순(ASC)이다.
* 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된다.
* 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 이른 값이 먼저 출력된다.
* 오라클에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림차순으로 정렬했을 경우에는 가장 먼저 위치한다.
* 반면, SQL Server에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 먼저, 내림차순으로 정렬했을 경우에는 가장 마지막에 위치한다.
# SELECT 문장 실행 순저
(1) 발췌 대상 테이블을 참조한다. (FROM)
(2) 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)
(3) 행들을 소그룹화한다. (GROUP BY)
(4) 그루핑된값의 조건에 맞는 것만을 출력한다. (HAVING)
(5) 데이터 값을 출력/계산한다. (SELECT)
(6) 데이터를 정렬한다. (ORDER BY)
# EQUI JOIN 문장
* SELECT 테이블1.칼럼명, 테이블2.칼럼명, ... FROM 테이블1, 테이블2 WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2; → WHERE 절에 JOIN 조건을 넣는다.
# ANSI/ISO SQL 표준 EQUI JOIN 문장
* SELECT 테이블1.칼럼명, 테이블2.칼럼명, ... FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.칼럼명1 = 테이블2.칼럼명2; → ON 절에 JOIN 조건을 넣는다.
# 조인(JOIN)
* 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것을 조인(JOIN)이라고 하며, 일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 조인이 성립된다. 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 조인이 성립된다.
# 순수 관계 연산자와 SQL 문장 비교
* SELECT 연산은 WHERE 절로 구현
* PROJECT 연산은 SELECT 절로 구현
* (NATURAL) JOIN 연산은 다양한 JOIN 기능으로 구현
* DIVIDE 연산은 현재 사용되지 않음
# ANSI/ISO SQL에서 표시하는 FROM 절의 JOIN 형태
* INNER JOIN
* NATURAL JOIN
* USING 조건절
* ON 조건절
* CROSS JOIN
* OUTER JOIN(LEFT, RIGHT, FULL)
# INNER JOIN
* INNER JOIN은 OUTER(외부) JOIN과 대비하여 내부 JOIN이라고 하며 JOIN 조건에서 동일한 값이 있는 행만 반환한다.
# CROSS JOIN
* 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다. 결과는 양쪽 집합의 M * N 건의 데이터 조합이 발생한다.
# LEFT OUTER JOIN
* 조인 수행 시에 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다. 즉, Table A와 B가 있을 때 (Table 'A'가 기준이 됨), A와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고, B의 JOIN 칼럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다.
# FULL OUTER JOIN
* 조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성한다. 즉 Table A와 B가 있을 때 (Table 'A', 'B' 모두 기준이 됨), RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.
# OUTER JOIN 문장 예시
* LEFT OUTER JOIN: SELECT X.KEY1, Y.KEY2 FROM TAB1 X LEFT OUTER JOIN TAB2 Y ON (X.KEY1 = Y.KEY2)
* RIGHT OUTER JOIN: SELECT X.KEY1, Y.KEY2 FROM TAB1 X RIGHT OUTER FOIN TAB2 Y ON (X.KEY1 = Y.KEY2)
* FULL OUTER JOIN: SELECT X.KEY1, Y.KEY2 FROM TAB1 X FULL OUTER JOIN TAB2 Y ON (X.KEY1 = Y.KEY2)
'study .. > SQLD' 카테고리의 다른 글
| [과목 II. SQL 기본 및 활용] 제2장 SQL 활용: index (1) | 2025.08.18 |
|---|---|
| [과목 II. SQL 기본 및 활용] 제1장 SQL 기본: contents (2) | 2025.08.17 |
| [과목 I. 데이터 모델링의 이해] 제2장 데이터 모델과 SQL: contents (3) | 2025.08.13 |
| [과목 I. 데이터 모델링의 이해] 제2장 데이터 모델과 SQL: index (3) | 2025.08.13 |
| [과목 I. 데이터 모델링의 이해] 제1장 데이터 모델링의 이해: contents (3) | 2025.08.11 |