본문 바로가기
Programming/DB

[Oracle] 기본 조회 방법 및 연산자

by AI_Wooah 2022. 3. 7.
-- 한 줄 주석
/*
여러 줄
주석
*/

-- EMPLOYEE 테이블에서 모든 정보 조회
SELECT *
FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 모든 사원의 사번, 이름 조회
SELECT EMP_ID, EMP_NAME
FROM EMPLOYEE;

-- EMPLOYEE 테이블에서 부서코드가 D9인 사원 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';

-- EMPLOYEE 테이블에서 직급코드가 J1인 사원 조회
SELECT *
FROM EMPLOYEE
WHERE JOB_CODE = 'J1';

-- EMPLOYEE 테이블에서 급여가 300만원 이상인 사원의
-- 사번, 이름, 부서코드, 급여를 조회하세요
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 3000000;

-- 컬럼에 별칭 짓기
-- AS + 별칭을 기술하여 별칭을 지을 수 있다.
-- 단, AS키워드는 생략 가능하다.
-- 별칭에 숫자, 공백문자, 특수문자가 들어가는 경우 ""으로 감싸줘야 한다.
SELECT EMP_NAME AS 이름,
       SALARY * 12 "1년 급여(원)",
       (SALARY + (SALARY * NVL(BONUS, 0))) * 12 "총소득(원)"
FROM EMPLOYEE;

-- 임의로 지정한 문자열을 SELECT절에서 사용할 수 있다.
SELECT EMP_ID, EMP_NAME, SALARY, '원' AS 단위
FROM EMPLOYEE;

-- DISTINCT 키워드는 중복된 컬럼 값을 제거하여 조회한다.
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;

-- DISTINCT 키워드는 SELECT 절에서 한 번만 쓸 수 있다.
SELECT DISTINCT JOB_CODE, /*DISTINCT*/ DEPT_CODE
FROM EMPLOYEE;

-- WHERE 절
-- 테이블에서 조건을 만족하는 값을 가진 행을 골라냄
-- 여러 개의 조건을 만족하는 행을 골라낼 때
-- AND 혹은 OR를 사용할 수 있다.

-- 부서 코드가 D9이고 급여를 200만원보다 많이 받는 직원의
-- 이름, 부서코드, 급여 조회
SELECT 
       EMP_NAME
     , DEPT_CODE
     , SALARY
  FROM EMPLOYEE
 WHERE DEPT_CODE = 'D9'
   AND SALARY > 2000000;
   
-- 보너스 컬럼의 값이 NULL인 직원의
-- 사번, 이름, 급여, 보너스를 조회하세요
SELECT EMP_ID, EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL;

-- 위 조건과 반대
SELECT EMP_ID, EMP_NAME, SALARY, BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;

-- 연결 연산자를 이용하여 여러 컬럼을 하나의 컬럼인 것 처럼 조회할 수 있다. (||)

-- 컬럼과 컬럼을 연결
SELECT EMP_ID || EMP_NAME || SALARY
FROM EMPLOYEE;

-- 컬럼과 리터럴 연결
SELECT EMP_NAME || '의 월급은 ' || SALARY || '원 입니다.'
FROM EMPLOYEE;

-- 비교 연산자
-- = 같냐?, > 크냐?, < 작냐?, >= 크거나 같냐?, <= 작거나 같냐?
-- !=, ^=, <> 같지 않냐?
SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
--WHERE DEPT_CODE != 'D9';
--WHERE DEPT_CODE ^= 'D9';
WHERE DEPT_CODE <> 'D9';

-- EMPLOYEE 테이블에서 재직여부가 N인 직원을 조회하고
-- 근무여부를 재직중으로 표시하여
-- 사번, 이름, 입사일, 근무여부를 조회하세요
SELECT 
      EMP_ID
    , EMP_NAME
    , HIRE_DATE
    , '재직중' 근무여부
  FROM EMPLOYEE
 WHERE ENT_YN = 'N';

-- EMPLOYEE 테이블에서 급여를 350만원 이상
-- 550만원 이하를 받는 직원의
-- 사번, 이름, 급여, 부서코드, 직급코드를 조회하세요
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
WHERE SALARY >= 3500000
AND SALARY <= 5500000;

-- BETWEEN AND 연산자 사용
-- 컬럼명 BETWEEN 하한값 AND 상한값
-- : 하한값 이상, 상한값 이하인지 물어봄
SELECT EMP_ID, EMP_NAME, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 5500000;

-- 반대로 급여를 350만원 미만, 또는 550만원을 초과하는
-- 직원의 사번, 이름, 부서코드, 급여 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
--WHERE SALARY > 5500000
--OR SALARY < 3500000;
--WHERE SALARY NOT BETWEEN 3500000 AND 5500000;
WHERE NOT SALARY BETWEEN 3500000 AND 5500000;

-- LIKE 연산자 : 문자 패턴이 일치하는 값을 조회할 때 사용
-- 컬럼명 LIKE '문자패턴'
-- 문자 패턴 : '글자%' (글자로 시작하는)
--            '%글자%' (글자가 포함되는)
--            '%글자' (글자로 끝나는)

-- EMPLOYEE 테이블에서 성이 김씨인 직원의
-- 사번, 이름, 입사일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '김%';

-- EMPLOYEE 테이블에서 김씨성이 아닌 직원의
-- 사번, 이름, 입사일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
--WHERE EMP_NAME NOT LIKE '김%';
WHERE NOT EMP_NAME LIKE '김%';

-- EMPLOYEE 테이블에서 이름에 '하'가 포함된 직원의
-- 이름, 주민번호, 부서코드 조회
SELECT EMP_NAME, EMP_NO, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';

-- EMPLOYEE 테이블에서 전화번호 국번이 9로 시작하는 직원의
-- 사번, 이름, 전화번호를 조회하세요
-- 와일드 카드 사용 : %(0개 이상의 글자), _(글자 한 자리)
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9%';

-- EMPLOYEE 테이블에서 전화번호 국번이 4자리이면서
-- 9로 시작하는 직원의 사번, 이름, 전화번호를 조회하세요
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9_______';

-- EMPLOYEE 테이블에서 _ 앞 글자가 3자리인 이메일 주소를 가진
-- 사원의 사번, 이름, 이메일주소 조회
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___#_%' ESCAPE '#';

-- IN 연산자 : 비교하려고하는 값 목록에 일치하는 값이 있는지 확인
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 NOT IN ('D6', 'D8');

-- 연산자 우선순위
/*
1. 산술연산자
2. 연결연산자
3. 비교연산자
4. IS NULL / IS NOT NULL, LIKE / NOT LIKE, IN / NOT IN
5. BETWEEN AND / NOT BETWEEN AND
6. NOT
7. AND
8. OR
*/

-- J2직급의 급여 200만원 이상 받는 직원이거나
-- J7 직급인 직원의 이름, 급여, 직급코드 조회
SELECT EMP_NAME, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE JOB_CODE = 'J7'
OR JOB_CODE = 'J2'
AND SALARY > 2000000;

-- J7직급이거나 J2 직급인 직원들 중
-- 급여가 200만원 이상인 직원의
-- 이름, 급여, 직급코드 조회
SELECT EMP_NAME, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE (JOB_CODE = 'J7'
OR JOB_CODE = 'J2')
AND SALARY > 2000000;
반응형

'Programming > DB' 카테고리의 다른 글

[Oracle] subquery  (0) 2022.03.07
[Oracle] JOIN  (0) 2022.03.07
[Oracle] GROUP BY & HAVING  (0) 2022.03.07
[Oracle] 함수  (0) 2022.03.07
[DB] ORACLE 중복 값 확인 쿼리  (0) 2021.12.17

댓글