SQL문장에는 여러가지 유형이 있는데 그 중 DQL은 데이타 질의어를 말하며, 테이블의 행에 대한 검색 기능을 제공하기 위한 SQL 명령을 말한다.
대표적으로는 SELECT가 있다.
하나 이상의 테이블에서 행을 검색하기 위한 명령이다.
SELECT 검색대상,검색대상,... FROM 테이블명,테이블명,...
검색 대상으로 모든 컬럼을 지정하고 싶을 때는 *을 사용한다. *을 사용하면 다른 검색대상과 동시에 사용 불가능하다.
-- EMP 테이블의 모든 컬럼 검색하기
SELECT * FROM EMP;
-- EMP 테이블의 컬럼 중 EMPNO,ENAME,SAL,DEPTNO 검색하기
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP;
SELECT 검색대상 [AS] 별칭,검색대상 [AS] 별칭,... FROM 테이블명,테이블명,...
검색대상에 별칭(임시 컬럼명)을 부여하는 기능이다.
-- EMP테이블 안의 컬럼 중
-- EMPNO의 별칭을 NO, ENAME의 별칭을 NAME, DEPTNO의 별칭을 DNO로 하여 검색하기
SELECT EMPNO AS NO,ENAME AS NAME,DEPTNO AS DNO FROM EMP;
-- EMP테이블 안의 컬럼 중
-- EMPNO의 별칭을 NO, ENAME의 별칭을 NAME, DEPTNO의 별칭을 DNO로 하여 검색하기
-- 위와 동일하여 결과 생략
SELECT EMPNO NO,ENAME NAME,DEPTNO DNO FROM EMP;
-- EMP테이블 안의 컬럼 중
-- EMPNO, ENAME을 검색하고 SAL은 12로 곱하여 ANNUAL라는 별칭을 주어 검색하기
SELECT EMPNO,ENAME,SAL*12 ANNUAL FROM EMP;
컬럼 별칭으로 공백문자 또는 특수문자를 사용할 수 없다.
하지만 " " 기호 안에 표현하면 모든 형태의 별칭을 사용할 수 있다.
-- EMP테이블 안의 컬럼 중
-- EMPNO의 별칭을 사원 번호, ENAME의 별칭을 사원 이름, SAL*12의 별칭을 연봉^^으로 하여 검색하기
SELECT EMPNO "사원 번호",ENAME "사원 이름",SAL*12 "연봉^^" FROM EMP;
검색대상의 중복값을 제외하고 유일한 하나의 결과값만 검색하는 기능을 제공하는 키워드다.
SELECT DISTINCT 검색대상[,검색대상,...] FROM 테이블명
조건식을 사용하여 조건이 참인 행만 검색하는 기능을 제공한다.
SELECT 검색대상,검색대상,... FROM 테이블명,테이블명,... WHERE 조건식
컬럼값이 작은값부터 큰값 범위에 포함될 경우의 조건식을 표현한다.
형식)
컬럼명 BETWEEN 작은값 AND 큰값
--EMP 테이블 안의 SAL 컬럼에서 1000과 3000 사이의 값을 가진 행의
--EMPNO,ENAME,JOB,SAL 검색하기
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL BETWEEN 1000 AND 3000;
컬럼값이 나열된 값들 중 하나인 경우의 조건식을 표현한다.
형식)
컬럼명 IN (값1,값2,...)
--EMP 테이블 안의 JOB 컬럼에서 ANALYST이거나 SALESMAN의 값을 가진 행의
--EMPNO,ENAME,JOB,SAL 검색하기
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB IN('ANALYST','SALESMAN');
부정확한 값을 검색하기 위한 사용하는 문자를 사용하여 조건식을 표현한다.
값을 = 연산자로 비교할 경우 [%] 또는 [_]를 일반문자로 인식하여 비교한다.
[%] : 전체
[_] : 임의 문자 하나
--EMP 테이블 안의 컬럼들 중에서 ENAME이 A%인 행의
--EMPNO,ENAME,JOB,SAL 검색하기
--ENAME이 A%를 가진 행이 없기 때문에 검색 결과 없음
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME='A%';
[%] 또는 [_]를 검색패턴문자로 처리하여 조건식을 표현한다.
형식)
컬럼명 LIKE '값 또는 검색패턴문자'
--EMP 테이블에서 사원이름의 두번째 문자가 [L]인 사원의 사원번호,사원이름,업무,급여 검색하기
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '_L%';
조건식의 결과를 반대로 표현한다.
형식)
NOT(조건식)
--EMP 테이블에서 JOB이 MANAGER가 아닌 행들의 EMPNO,ENAME,JOB,SAL 검색하기
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE NOT(JOB='MANAGER');
--NOT연산자와 같은 기능을 하는 <>, !=
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB<>'MANAGER';
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB!='MANAGER';
IS 연산자를 이용하여 [NULL] 비교한다.
NULL: 존재하지 않는 값을 표현하기 위한 키워드
NULL은 존재하는 값이 아니므로 = 연산자로 비교 할 경우 검색 오류가 난다.
형식)
컬럼명 IS NULL 또는 컬럼명 IS NOT NULL
--EMP 테이블에서 성과급이 존재하는 사원의 사원번호,사원이름,업무,급여,성과급 검색하기
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP WHERE COMM IS NOT NULL;
정렬 기준을 여러개 나열하여 선언하면 앞의 검색값이 같은 경우 뒤의 검색값을 비교하여 정렬한다.
ASC : 오름차순 정렬(오름차순 정렬인 경우, 키워드 생략 가능)
DESC : 내림차순 정렬
형식)
SELECT 검색대상,검색대상,...
FROM 테이블명,테이블명,...
[WHERE 조건식]
ORDER BY {컬럼명|연산식|별칭|INDEX} {ASC|DESC},
{컬럼명|연산식|별칭|INDEX} {ASC|DESC},
...
--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호를
--부서번호로 오름차순 정렬하고 같은 경우 급여로 내림차순 정렬하여 검색하기
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO, SAL DESC;