관계형 데이터베이스에서 데이터를 조회하거나 조작하기 위해 사용하는 표준 검색 언어
원하는 데이터를 찾는 방법이나 절차를 기술하는 것이 아닌 조건을 기술하여 작성
데이터를 조회한 결과를 Result Set이라고 하는데 SELECT구문에 의해 조회된 행들의 집합을 의미.
Result Set은 0개 이상의 행이 포함될 수 있고 Result Set은 특정한 기준에 의해 정렬 가능.
한 테이블의 특정 컬럼, 특정 행, 특정 행/컬럼 또는 여러 테이블의 특정 행/컬럼 조회 가능
√ 작성법
SELECT 컬럼 명 [, 컬럼명, ...]
FROM 테이블 명
WHERE 조건식;
√ 기본
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE;
SELECT EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE, DEPT_CODE, JOB_CODE, SAL_LEVEL, SALARY, BONUS, MANAGER_ID, HIRE_DATE, ENT_DATE, ENT_YN
FROM EMPLOYEE;
또는
SELECT * FROM EMPLOYEE;
√ 컬럼 값 산술 연산
컬럼 값에 대해 산술 연산한 결과 조회 가능
SELECT EMP_NAME, SALARY * 12, (SALARY + (SALARY*BONUS)) * 12
FROM EMPLOYEE;
√ 컬럼 별칭
‘AS 별칭‘이나 “별칭”, 또는 ‘AS “별칭“’을 기술하여 컬럼 별칭을 지을 수 있음
SELECT EMP_NAME AS 이름, SALARY*12 “연봉(원)”, (SALARY + (SALARY*BONUS))*12 AS “총 소득(원)“
FROM EMPLOYEE;
* 숫자 혹은 특수문자가 포함되는 경우에 ""사용
* AS 생략 가능(공백으로 구분)
√ 리터럴
임의로 지정한 문자열을 SELECT절에 사용하면 테이블에 존재하는 데이터처럼 활용 가능
SELECT EMP_ID,
SALARY,
‘원’ AS 단위
FROM EMPLOYEE;
* 문자나 날짜 리터럴은 ''기호 사용
* 리터럴은 Result Set의 모든 행에 반복 표시 됨
√ DISTINCT
컬럼에 포함된 데이터 중 중복 값을 제외하고 한 번씩만 표시하고자 할 때 사용
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
* SELECT절에 1회만 기술 가능
√ WHERE절
검색할 컬럼의 조건을 설정하여 행 결정
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = ‘D9’;
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY > 4000000;
여러 개 조건 작성 시 AND/OR 사용
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = ‘D6’
AND SALARY > 2000000;
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = ‘D6’
OR SALARY > 2000000;
‘||’를 사용하여 여러 컬럼을 하나의 컬럼인 것처럼 연결하거나 컬럼과 리터럴을 연결함
√ 컬럼과 컬럼을 연결한 경우
SELECT EMP_ID || EMP_NAME || SALARY
FROM EMPLOYEE;
√ 컬럼과 리터럴을 연결한 경우
SELECT EMP_NAME || ‘의 월급은 ‘ || SALARY || ‘원 입니다.’
FROM EMPLOYEE;
여러 개의 제한 조건 결과를 하나의 논리 결과로 만들어줌
표현식 사이의 관계를 비교하기 위해 사용하고 비교 결과는 논리 결과(TRUE/FALSE/NULL) 중 하나가 됨
단 비교하는 두 컬럼 값/표현식은 서로 동일한 데이터 타입이어야 함
√ BETWEEN AND
비교하려는 값이 지정한 범위에 포함되면 TRUE를 리턴하는 연산자로 상한 값과 하한 값의 경계도 포함됨
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3500000 AND SALARY <= 6000000;
또는
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 6000000;
√ LIKE
비교하려는 값이 지정한 특정 패턴을 만족하면 TRUE를 리턴하는 연산자로
‘%’와 ‘_’를 와일드카드로 사용
SELECT EMP_NAME, SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE ‘전%’;
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE ‘_ _ _7%’;
와일드 카드 문자와 패턴의 특수문자가 동일한 경우 어떤 것을 패턴으로 결정하는지 구분하지 못하기 때문에 데이터로 처리할 와일드 카드 문자 패턴 기호 앞에 임의의 특수문자를 사용하고 ESCAPE OPTION으로 등록하여 처리
SELECT EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE ‘_ _ _#_%’ ESCAPE ‘#’;
√ NOT LIKE
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMP_NAME NOT LIKE ‘이%’;
또는
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE NOT EMP_NAME LIKE ‘이%’;
√ IS NULL과 IS NOT NULL
NULL 여부를 비교하는 연산자
SELECT EMP_NAME, MANAGER_ID, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;
SELECT EMP_NAME, BONUS, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;
√ IN
비교하려는 값 목록에 일치하는 값이 있으면 TRUE를 반환하는 연산자
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE IN (‘D6’, ‘D8’);
또는
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = ‘D6’ OR DEPT_CODE = ‘D8’;
SELECT EMP_NAME, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE = ‘J7’
OR JOB_CODE = ‘J2’
AND SALARY > 2000000;
* 연산자 우선 순위에 의해서 AND가 먼저 실행됨
J2직급의 급여 2000000 이상 받는 직원이거나 J7직급인 직원이라는 의미
SELECT EMP_NAME, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE (JOB_CODE = ‘J7’
OR JOB_CODE = ‘J2’)
AND SALARY > 2000000;
* 우선순위를 고려하여 OR가 먼저 처리 되도록 ( )를 이용해 우선 순위 변경
J7 직급이거나 J2직급인 직원들 중 급여 2000000 이상 받는 직원이라는 의미