▶ DML
- DML은 데이터 조작을 의미하며 SELECT(DQL), INSERT, UPDATE, DELETE가 있다.
▶ SELECT
- 데이터를 조회하거나 검색할 때 사용하는 명령어
[표현법]
SELECT 조회하고자 하는 컬럼명, 컬럼명2, 컬럼명3, ...
FROM 테이블명
ex)
-- EMPLOYEE 테이블의 전체 사원들의 사원번호, 사원이름, 급여 컬럼을 조회함
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE;
- 명령어, 키워드, 컬럼명, 테이블명은 대소문자를 가리지 않는다.
- 소문자도 상관없지만 대문자로 쓰는 것이 관례이다.
ex)
-- EMPLOYEE 테이블의 전체 사원들의 모든 칼럼을 조회
SELECT *
FROM EMPLOYEE;
■ 컬럼값을 통한 산술연산
- 조회하고자 하는 컬럼들을 나열하는 SELECT절에 산술연산(+-/*)을 사용해서 결과를 조회할 수 있다.
-- EMPLOYEE 테이블로부터 직원명, 월급, 연봉(월급 * 12)
SELECT EMP_NAME, SALARY, SALARY*12
FROM EMPLOYEE;
- 산술연산과정에서 NULL값이 존재할 경우 산술연산의 결과는 NULL이 된다.
- DATE 타입끼리도 연산이 가능하다.(DATE => 년, 월, 일, 시, 분, 초)
ex)
-- EMPLOYEE 테이블로부터 직원명, 입사일, 근무일수 조회(오늘날짜 - 입사일)
-- 오늘날짜 : SYSDATE
SELECT EMP_NAME, HIRE_DATE, SYSDATE, SYSDATE-HIRE_DATE
FROM EMPLOYEE;
-- 결과값은 일 단위
■ 컬럼명에 별칭 부여하기
[표현법]
컬럼명 AS 별칭, 컬럼명 AS "별칭", 컬럼명 별칭, 컬럼명 "별칭"
- AS를 붙이든 안 붙이든 간에 별칭에 특수문자나 띄어쓰기가 포함된 경우 무조건 ""을 해서 표기해야 한다.
ex)
-- EMPLOYEE 테이블로부터 직원명, 입사일, 근무일수(오늘날짜 - 입사일) 조회
SELECT EMP_NAME 직원명, HIRE_DATE 입사일, SYSDATE-HIRE_DATE AS "근무일수"
FROM EMPLOYEE;
■ 리터럴
- 임의로 지정한 문자열('')을 SELECT절에 기술하면 실제 그 테이블에 존재하는 데이터처럼 조회가 가능하다.
ex)
-- EMPLOYEE 테이블로부터 사번, 사원명, 급여
SELECT EMP_ID, EMP_NAME, SALARY, '원 동연' 단위
FROM EMPLOYEE;
● DISTINCT
- 조회하고자 하는 컬럼의 중복된 값을 딱 한 번만 조회하고자 할 때 사용하며 컬럼명 앞에 기술한다.
[표현법]
DISTINCT 컬럼명
ex)
-- EMPLOYEE 테이블에서 직급코드들만 조회
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
-- DEPT_CODE, JOB_CODE를 세트로 묶어서 중복된 값인지 판별
SELECT DISTINCT DEPT_CODE, JOB_CODE
FROM EMPLOYEE;
▶ WHERE
- 조회하고자 하는 테이블에 특정 조건을 제시해서 그 조건에 만족하는 데이터들만 조회하고자 할 때 기술하는 구문
[표현법]
SELECT 컬럼명, 컬럼명...
FROM 테이블명
WHERE 조건식; (=> 해당 조건에 만족하는 행들을 뽑음)
- 실행 순서로는 FROM => WHERE => SELECT
- 조건식에서는 다양한 연산자들이 사용 가능하다.
대소비교 | >, <, <=, >= |
일치 | =(자바, 자바스크립트의 ==와 동일) |
불일치 | !=, ^=, <> |
ex)
-- EMPLOYEE 테이블로부터 급여가 400만원 이상인 사원들만 조회(모든 컬럼)
SELECT *
FROM EMPLOYEE
WHERE SALARY >= 4000000;
-- EMPLOYEE 테이블로부터 부서코드가 D9인 사원들의 사원명, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
※SELECT절에서 부여한 별칭을 WHERE절에서는 사용할 수 없다.
■ 논리연산자
- 여러 개의 조건을 엮을 때 사용한다.
AND(자바 &&), OR(자바 ||)
AND : ~이면서, 그리고
OR : ~이거나, 또는
ex)
-- 급여가 350만원 이상이고 600만원 이하인 사원들의 이름, 사번, 급여, 직급코드 조회
SELECT EMP_NAME, EMP_ID, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE SALARY >= 3500000 AND SALARY <= 6000000;
■ BETWEEN A AND B
- 몇 이상 몇 이하인 범위에 대한 조건을 제시할 때 사용한다.
[표현법]
비교대상칼럼명 BETWEEN 하한값 AND 상한값;
ex)
-- 급여가 350만원 미만이고 600만원 초과인 사원들의 이름, 사번, 급여, 직급코드 조회
SELECT EMP_NAME, EMP_ID, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE NOT SALARY BETWEEN 3500000 AND 6000000;
-- 입사일이 '90/01/01' ~ '03/01/01'기 아닌 사원들의 모든 컬럼 조회
SELECT *
FROM EMPLOYEE
WHERE NOT HIRE_DATE BETWEEN '90/01/01' AND '03/01/01';
■ LIKE '특정패턴'
비교하고자 하는 칼럼값이 내가 지정한 특정 패턴에 만족될 경우 조회
[표현법]
비교대상컬럼명 LIKE '특정패턴'
- 특정패턴 부분에 와일드카드인 '%', '_'를 가지고 제시할 수 있다.
'%' : 0글자 이상
비교대상 컬럼명 LIKE '문자%' => 컬럼값중에 '문자'로 시작하는 것을 조회
비교대상 컬럼명 LIKE '%문자' => 컬럼값중에 '문자'로 끝나는 것을 조회
비교대상 컬럼명 LIKE '%문자%' => 컬럼값중에 '문자'가 포함되어 있는 것을 조회
'_' : 1글자
비교대상 컬럼명 LIKE '_문자' => 컬럼값중에 '문자'앞에 무조건 1글자가 존재하는 경우만 조회
비교대상 컬럼명 LIKE '__문자' => 컬럼값중에 '문자'앞에 무조건 2글자가 존재하는 경우만 조회
ex)
-- 이름 중에 '하'가 포함된 사원들의 이름, 주민번호, 부서코드 조회
SELECT EMP_NAME, EMP_NO, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';
-- 전화번호 4번째 자리가 9로 시작하는 사원들의 사번, 사원명, 전화번호, 이메일 조회
SELECT EMP_ID, EMP_NAME, PHONE, EMAIL
FROM EMPLOYEE
WHERE PHONE LIKE '___9%';
■ IS NULL
- 해당 값이 NULL인지 비교해 준다.
[표현법]
비교대상컬럼 IS NULL : 컬럽값이 NULL일 경우
비교대상컬럼 IS NOT NULL : 컬럼값이 NULL이 아닌 경우
ex)
-- 보너스를 받지 않는 사원들의 사번, 이름, 급여, 보너스
SELECT EMP_ID, EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL;
-- 부서배치는 받지 않았지만 보너스는 받는 사원의 모든 컬럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;
■ IN
- 비교대상 컬럼값에 내가 제시한 목록들 중에 일치하는 값이 있는지 판단해 준다.
[표현법]
비교대상컬럼 IN (값1, 값2, 값3, 값4, ...)
ex)
-- 부서코드가 D6이거나 또는 D8이거나 또는 D5인 사원들의 이름, 부서코드, 급여를 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
--WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D8' OR DEPT_CODE = 'D5';
WHERE DEPT_CODE IN ('D6', 'D8', 'D5');
■ 연결 연산자 ||
- 여러 컬럼값들을 마치 하나의 컬럼인 것처럼 연결시켜 주는 연산자이며 컬럼과 리터럴(임의의 문자열)을 연결할 수 있다.
ex)
-- XX번 XXX의 월급은 XXXX원 입니다. AS 급여정보
SELECT
EMP_ID || '번 ' || EMP_NAME || '의 월급은 ' || SALARY || '원 입니다.' AS 급여정보
FROM EMPLOYEE;
▶ ORDER BY
- SELECT문 가장 마지막에 기입하는 구문일 뿐만 아니라 실제로도 가장 마지막에 실행되는 구문이며 최종 조회된 결과물들에 대해서 정렬 기준을 세워주는 구문이다.
[표현법]
SELECT 조회할 컬럼명1, 2, 3 ...
FROM 조회할 테이블명
WHERE 조건식(생략가능)
ORDER BY [정렬기준으로 새우고자 하는 컬럼명/별칭/컬럼 순번] [ASC/DESC](생략가능) [NULLS FIRST/NULLS LAST](생략가능)
오름차순 / 내림차순
- ASC : 오름차순(생략 시 기본값)
- DESC : 내림차순
정렬하고자 하는 컬럼값에 NULL이 있을 경우
- NULLS FIRST : NULL값들을 앞으로 배치하겠다(내림차순의 기본값)
- NULLS LAST : NULL값들을 뒤쪽으로 배치하겠다.(오름차순의 기본값)
ex)
-- 월급이 높은 사람들부터 나열하고 싶다.
SELECT *
FROM EMPLOYEE
ORDER BY SALARY DESC;
-- 연봉 기준 오름차순 정렬하기
SELECT EMP_NAME, SALARY, (SALARY * 12) "연봉"
FROM EMPLOYEE
--ORDER BY 3 ASC;
--ORDER BY 연봉 ASC;
ORDER BY (SALARY * 12) ASC;
※ ORDER BY는 숫자뿐만 아니라 문자열, 날짜에 대해서도 정렬가능하다.
▶ 연산자 우선순위
0. ()
1. 산술연산자
2. 연결연산자
3. 비교연산자
4. IS NULL, LIKE, IN
5. BETWEEN AND
6. NOT
7. 논리연산자 (AND)
8. 논리연산자 (OR)
'DB' 카테고리의 다른 글
DB (6) DDL(CREATE) (0) | 2023.06.08 |
---|---|
DB (5) DML(SELECT) SUBQUERY (0) | 2023.06.05 |
DB (4) DML(SELECT) JOIN (0) | 2023.06.04 |
DB (3) DML(SELECT) 그룹 함수 (0) | 2023.06.01 |
DB (2) DML(SELECT) 단일행 함수 (0) | 2023.05.30 |