1. [SQL] SELECT 쿼리 구문
ㅇ DISTINCT 절
- 특정 칼럼의 유니크한 값들
- GROUP BY 절과 유사하나, 정렬이 보장되지 못함
ㅇ FROM 절
- 대상 테이블의 지정
- 주로, 다중 테이블에 대한 질의 JOIN 조건
. (레코드 집합과 집합 간의 집합 연산은, ☞ SQL 조인 참조)
- JOIN에 대한 추가적인 조건절
. ON 조건절
.. 칼럼명이 다르더라도, JOIN 조건을 구사 가능하게 하며,
.. 명시적으로 칼럼에 대한 JOIN 조건을 주어 명확하게 해줄 수 있음
. USING 조건절
.. NATURAL JOIN의 경우에, 모든 일치되는 칼럼들에 대해 JOIN이 이루어지나,
.. USING 뒤에 칼럼명을 주어 원하는 칼럼에 대해서 만 선택적으로 JOIN 수행
ㅇ WHERE 조건절
- 개별 행에 대한 조건 만 가능
. 즉, 결과 집합을 내기 전에 각 레코드에 조건을 적용
. 따라서, WHERE 절에는 필드(칼럼)명 만 가능하여, 별칭(alias)을 쓸 수 없음
- 그룹핑,집계 이전에 수행되므로, WHERE절에서는 그룹핑/집계 함수가 허용 안됨
- 다중 테이블인 경우에, FROM 절의 JOIN 조건에 해당되는 질의도 가능
. 이때, 두 테이블에 속한 필드들에 연산자(=,>,<,>=,<=,BETWEEN 등)들을 적용하여,
JOIN을 구사할 수 있음
ㅇ GROUP BY 절
- WHERE 절 조건이 먼저 적용되고, GROUP BY는 그 결과 만을 그룹핑 함
. GROUP BY : 결과 집합 대상에 대한 기준
* GROUP BY절 사용시, 인덱스를 거치지(사용하지) 않음
* 컬럼 별칭 허용 안함
* 집계 함수를 사용 않는 GROUP BY절은, SELECT DISTINCT와 동일함
* GROUP BY절은, 결과 집합을 정렬 않으며, 정렬하려면 ORDER BY절을 사용해야 함
ㅇ HAVING 조건절
- GROUP BY절 등에 의해 집계된 결과 집합에 대해서 만 행별 조건을 적용
. 즉, 집합 결과에 추가적으로 제한하는 (더 정제해주는) 조건을 주는 것
- 그룹별 집계 결과들을 서로 비교할 수 있음
. 例) 평균 배송 시간이 다른 모든 평균 배송 시간 보다 초과하는 공급자를 찾는 등
. 例) 분기별 각 항목의 주문 비율을 계산하는 경우 등
- HAVING 절에는, GROUP BY절과 달리, 필드(칼럼)명 대신에 별칭(alias)을 쓸 수 있음
. 단, 계산이 있는 표현식의 경우에는, 별칭 사용 못함
ㅇ ORDER BY 절
- 먼저 데이터들이 추출된 후에, 그 결과 집합을 만들면서 정렬 작업이 일어남
. 즉, 먼저 데이터들이 정렬되는 것이 아님
2. [SQL] VIEW 구문
ㅇ SELECT 구문 만을 데이터베이스 내에 저장해놓고, 필요시 해당 구문을 불러내어 사용하는 기능
ㅇ (형식) CREATE VIEW [뷰이름] ([필드명1],[필드명2],...) AS [SELECT 구문]
ㅇ (사용) 통상의 SELECT 구문의 FROM절 내 테이블 명칭 처럼 사용
2. [SQL] 서브 쿼리 (Subquery)
ㅇ 괄호 내 완전한 SELECT문을 넣고 이에 이름을 붙힌 테이블 추출 표현식
- SQL문에 많은 추가적인 유연성을 제공하여 줌
ㅇ 종류
- 테이블 서브 쿼리 : 테이블 집합 전체를 반환
- 단일 컬럼 서브 쿼리 : 여러 값을 갖는 단일 컬럼을 반환
. (例) SELECT ... FROM ... WHERE col IN (서브쿼리)
- 스칼라 서브 쿼리 : 값을 하나만 반환