Chapter 3. DQL

김승현·2021년 10월 9일
0

DQL


  • 데이터를 검색(추출)하기 위해 사용되는 언어
  • DQL은 DML에 속한 언어 이기도 함
  • Result Set: 특정기준(SELECT 구문)을 통하여 데이터를 추출한 가상의 공간(논리적인 공간)
    • TABLE: 실제 데이터를 저장하고 있는 물리적인 공간(저장소)
  • Result Set은 0개 이상의 행(Row)이 포함 될 수 있음



SELECT 구문 작성법


  • SELECT 컬럼명 FROM 테이블명 [WHERE 조건 및 옵션]
  • 컬럼명
  • 모든 컬럼 조회 : *
    • 여러 컴럼 조회 : 쉼표(,)
  • WHERE
    • 다수의 제한 조건 포함 가능 (AND, OR로 연결)
-- 급여가 300만원 이상인 직원 중에서 부서코드가(DEPT_CODE)가 D5인 직원들의 정보 추출
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 NULLNULL 여부 비교
IN, NOT IN비교 값 목록에 포함 / 미포함 여부 비교



LIKE

  • 비교하려는 값이 지정한 특정 패턴을 만족시키면 TRUE를 리턴
  • 연산자로'%'와 '_'를 와일드 카드로 사용
  • ‘%’ : 글자수 상관 X
  • ‘_’ : 1글자수
  • 와일드카드 문자와 패턴의 특수문자가 동일한 경우: 임이의 특수문자와 ESCAPE 이용
--EMAIL의 ID 중  앞 글자가 3글자이고 뒤에 _가 있는 직원의 이름 이메일
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';
  • IN 사용
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의 약자 (디센딩) / 내림차순



추가사항

  • FLOOR: 소수점 버리는 함수
-- 시간에 해당하는 소수점 자리 버림
SELECT EMP_NAME, FLOOR(SYSDATE-HIRE_DATE) AS "근무일수" FROM EMPLOYEE;
  • NVL: NULL 처리 함수
--BONUS 에 NULL 값이 있으면 0을로 변경
SELECT EMP_NAME, NVL(BONUS,0) AS "보너스율" FROM EMPLOYEE;
profile
개발자로 매일 한 걸음

0개의 댓글