- SQL
- 주요 데이터 타입
- SELECT 예시
- 연결 연산자
- 논리 연산자
- 비교 연산자
- 연산자 우선순위
- ORDER BY 절
SELECT 를 공부하기에 앞서 주요 용어를 정리해 보자.
컬럼 값은 행과 열이 교차되는 테이블의 한 칸에 작성된 값 즉 데이터이다.
이제 본격적으로 데이터 베이스를 공부해 보자.
SQL 은 데이터를 찾는 방법이나 절차를 기술하는 것이 아니라 조건을 기술하여 작성한다.
숫자와 문자 및 날짜 데이터 타입이 존재한다.
SELECT 구문에 의해 조회된 행들의 집합을 Result Set 이라고 한다.
코드의 해석 순서는 FROM 절 - WHERE 절 - SELECT 절 - ORDER BY 절 순이다.
SELECT 에는 컬럼명과 * 또는 산술 연산과 리터럴을 작성할 수 있으며 별칭을 지을 수 있다.
DISTINCT 와 WHERE 을 작성하면 중복 제거와 조건을 설정할 수 있다.
컬럼명 또는 * 을 작성한다.
산술 연산한 결과를 조회할 수 있다.
DB 에서 날짜를 조회하는 방법은 중요하며 미래로 갈수록 큰 수를 가진다.
DATE 타입에 + 또는 - 연산이 가능하며 연산 결과는 일 단위로 조회한다.
-- SYSDATE : 시스템상의 현재 날짜 (시간)
-- DUAL (DUmmy tAbLe) : 가짜 테이블 (실제 테이블이 아닌 임시 테이블 용도)
SELECT SYSDATE FROM DUAL;
-- 한 시간 후 조회
SELECT SYSDATE + (1/24) FROM DUAL;
-- 1분 후 조회
SELECT SYSDATE + (1/24/60) FROM DUAL;
-- 30분 후 조회
SELECT SYSDATE + (1/24/60*30) FROM DUAL;
-- 오늘까지 근무한 날짜
SELECT (SYSDATE - HIRE_DATE) / 365 FROM EMPLOYEE;
별칭 작성 시 띄어쓰기와 특수문자가 포함되어있으면 쌍따옴표를 작성해야 한다.
주의 사항은 WHERE 절에서는 해석 순서때문에 별칭 사용이 불가능하다는 점이다.
DB 에서 리터럴은 임의로 지정한 값을 기존 테이블에 존재하는 값 처럼 사용하는 것이다.
리터럴 표기법은 기본적으로 문자열 표기법인 홑따옴표를 사용한다.
중복을 제거하고 한 번만 표시한다.
조건을 설정한다.
|| 을 사용해 하나의 컬럼인 것처럼 컬럼과 컬럼 또는 컬럼과 리터럴을 연결한다.
여러 개의 제한 조건 결과를 하나의 논리 결과로 만들어준다.
비교하는 두 컬럼 값이나 표현식은 서로 동일한 데이터 타입이어야 한다.
그러나 오라클 DB 는 작성된 값이 다른 형식의 데이터 타입이여도 표기법이 다른 데이터 타입과 일치하다면 자동으로 데이터 타입을 변경할 수 있다.
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE >= '1990/01/01' -- 문자열에서 DATE 타입으로 변경
AND HIRE_DATE <= '2000-12-31'; -- 문자열에서 DATE 타입으로 변경
A 이상 B 이하의 의미를 가진다.
특정 패턴을 만족하는지 검사하는 와일드 카드이다.
% 는 포함을 의미하며 _ 는 글자 수를 의미한다.
만약 와일드 카드 문자와 패턴의 특수문자가 동일하다면 ESCAPE 를 통해 처리한다.
값이 비어있는지 여부를 검사한다.
값 목록에 일치하는 값이 있는지 검사한다.
연산자 우선순위는 다음과 같다.
AND 연산자는 OR 연산자보다 우선 순위가 높다.
우선 순위를 고려하여 SQL 문을 작성해야 한다.
기본값은 오름차순으로 ASC 와 NULLS LAST 이다.
NULLS FIRST 와 LAST 는 NULL 이 있으면 앞 또는 뒤 어느 곳에 표시할지 지정한다.
SELECT 컬럼명 AS 별칭
FROM 테이블명
WHERE 조건식
ORDER BY 컬럼명|별칭|컬럼 순서 [ASC|DESC] [NULLS FIRST|NULLS LAST]
추가적으로 큰 분류를 먼저 정렬한 뒤 내부 분류를 정렬하는 방식인 정렬 중첩도 알아두면 좋다.
-- 부서코드 별 급여 내림차순 (부서코드는 내림차순)
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
ORDER BY DEPT_CODE DESC NULLS LAST, SALARY DESC;