DQL
- 데이터를 검색(추출)하기 위해 사용되는 언어
- DQL은 DML에 속한 언어 이기도 함
- Result Set: 특정기준(SELECT 구문)을 통하여 데이터를 추출한 가상의 공간(논리적인 공간)
- TABLE: 실제 데이터를 저장하고 있는 물리적인 공간(저장소)
- Result Set은 0개 이상의 행(Row)이 포함 될 수 있음
SELECT 구문 작성법
- SELECT 컬럼명 FROM 테이블명 [WHERE 조건 및 옵션]
- 컬럼명
- 모든 컬럼 조회 : *
- WHERE
- 다수의 제한 조건 포함 가능 (AND, OR로 연결)
SELECT * FROM EMPLOYEE WHERE SALARY >=3000000 AND DEPT_CODE = 'D5';
SELECT에서 컬럼값 산술연산하기
- SELECT 구문에서 컬럼값에 산술 연산한 결과를 조회할 수 있음
SELECT EMP_NAME, SALARY*12 FROM EMPLOY;
컬럼 별칭(AS)
- 컬럼 별칭 설정 : AS + “원하는 별칭명”
SELECT EMP_NAME AS "이름" , PHONE AS "핸드폰번호" FROM EMPLOYEE;
리터럴
- 임의로 지정한 문자열을 SELECT 절에 사용하면, 테이블에 존재하는 데이터처럼 사용할 수 있다
SELECT EMP_NAME, SALARY*12 AS "연봉", '원' AS "단위" FROM EMPLOYEE;
DISTINCT
SELECT DISTINCT DEPT_CODE FROM EMPLOYEE;
SELECT DISTINCT DEPT_CODE, SAL_LEVEL FROM EMPLOYEE;
- DEPT_CODE와 SAL_LEVEL의 값이 모두 같은 경우만 중복 제거
논리 연산자
연산자 | 설명 |
---|
AND | 여러 조건 모두 TRUE일 경우만 TRUE 리턴 |
OR | 여러 조건 중 하나만 TRUE이면 TRUE 리턴 |
NOT | 조건에 대한 반대 값으로 반환(NULL 예외) |
연결 연산자
- || 을 사용
- 여러 컬럼 -> 하나의 컬럼인 것 처럼 연결
- 컬럼과 리터럴 연결
SELECT DISTINCT EMP_NAME || '님' AS "이름" , SALARY ||'원' AS "급여" FROM EMPLOYEE;
비교 연산자
- 비교 결과: 논리 결과 중 하나(TRUE, FALSE, NULL)
- **비교하는 두 컬럼 값/표현식은 서로 동일한 데이터 타입이여야 함
연산자 | 설명 |
---|
= | 같다 |
>,< | 크다 / 작다 |
>=,<= | 크거나 같다 / 작거나 같다 |
<>,!=,^= | 같지 않다 |
BETWEEN AND | 특정 범위 포함 비교 |
LIKE / NOT LIKE | 문자 패턴 비교 |
IS NULL, IS NOT NULL | NULL 여부 비교 |
IN, NOT IN | 비교 값 목록에 포함 / 미포함 여부 비교 |
LIKE
- 비교하려는 값이 지정한 특정 패턴을 만족시키면 TRUE를 리턴
- 연산자로'%'와 '_'를 와일드 카드로 사용
- ‘%’ : 글자수 상관 X
- ‘_’ : 1글자수
- 와일드카드 문자와 패턴의 특수문자가 동일한 경우: 임이의 특수문자와 ESCAPE 이용
SELECT EMP_NAME, EMAIL FROM EMPLOYEE WHERE EMAIL LIKE '___#_%' ESCAPE '#';
NOT LIKE
SELECT EMP_NAME FROM EMPLOYEE WHERE EMP_NAME NOT LIKE '이%';
IN
- 비교하려는 값 목록에 일치하는 값이 있으면 TRUE 리턴
- EX) DEPT_CODE가 D6 와 D9인 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE FROM EMPLOYEE WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D9';
SELECT EMP_NAME, DEPT_CODE FROM EMPLOYEE WHERE DEPT_CODE IN ('D6','D9');
ORDER BY
- SELECT한 컬럼에 대해 정렬을 할 때 사용
- SELECT 구문의 가장 마지막에 작성하며, 실행순서도 가장 마지막에 수행됨
- 칼럼을 기준으로 정렬도 가능
- 표현식
SELECT 컬럼1,컬럼2,컬럼3... FROM 테이블명 WHERE 조건절 ORDER BY 컬럼명|별칭|컬럼순서 정렬방식[NULLS FIRST | LAST]
SELECT EMP_NAME, DEPT_CODE FROM EMPLOYEE WHERE DEPT_CODE IN ('D6','D9','D8') ORDER BY EMP_NAME ASC;
SELECT EMP_NAME, DEPT_CODE FROM EMPLOYEE WHERE DEPT_CODE IN ('D6','D9','D8')
ORDER BY 1 DESC;
- ASC(DEFAULT) : ascending의 약자 (어센딩) / 오름차순
- DESC : descending의 약자 (디센딩) / 내림차순
추가사항
SELECT EMP_NAME, FLOOR(SYSDATE-HIRE_DATE) AS "근무일수" FROM EMPLOYEE;
SELECT EMP_NAME, NVL(BONUS,0) AS "보너스율" FROM EMPLOYEE;