본문 바로가기

Oracle/Oracle 기초

Oracle Select 활용 2

-- WHERE == if == 조건절 
/*
    표현식
    비교 연산자( >, <, >=, <=, =, !=, <> ) <> 는 != 와 같은 처리
    NULL, = NULL, IS NULL, IS NOT NULL
    
    ( ), NOT, AND(&&못쓴다), OR(||못쓴다 +용도로 사용)
    
    SELECT
    FROM 
    WHERE   조건

*/

-- FIRST_Name = Julia
SELECT first_name, last_Name, salary
FROM employees
WHERE first_name = 'Julia';

-- 급여가 $9000이상인 사원
SELECT first_name, salary
FROM employees
WHERE salary >= 9000;

-- 이름이 Shanta보다 큰 이름

SELECT first_name
FROM employees
WHERE first_name > = 'Shanta';

-- 소문자인사람이 없기떄문에 아무도 나오지않는다
SELECT first_name, salary
FROM employees
WHERE first_name >= 'a';

-- 대문자 A로 변경했을때
SELECT first_name, salary
FROM employees
WHERE first_name >= 'A';

SELECT first_name, salary
FROM  employees
WHERE manager_id = ''; -- null x

-- 사장
SELECT first_name, salary
FROM  employees
WHERE manager_id IS NULL; 


-- 사장이 아닌 사람들 
SELECT first_name, salary
FROM  employees
WHERE manager_id IS NOT NULL; 

-- AND

-- 아무것도 나오지 않는다.
SELECT
    *
FROM employees
WHERE first_name = 'Shanta'
    AND first_name = 'John';

-- Shanta이거나 John 이거나 
SELECT
    *
FROM employees
WHERE first_name = 'Shanta'
    OR first_name = 'John';


-- 이름이 John, 월급이 5000이상
SELECT first_name, salary
FROM employees
WHERE first_name = 'John' 
    AND salary > 5000; 
    
-- 2007년 12월 31일 이후에 입사한 사원을 출력하라
SELECT first_name, hire_date
FROM employees
WHERE hire_date > '07/12/31';

-- 위와 같다 
SELECT first_name, hire_date
FROM employees
WHERE hire_date > TO_DATE('20071231', 'YYYYMMDD');

-- ALL(AND), ANY(OR)
-- 참고로 알아둘것


-- AND 조건
SELECT
    *
FROM employees
WHERE first_name = ALL('Julia', 'John');

-- OR 조건 
SELECT
    *
FROM employees
WHERE first_name = ANY('Julia', 'John');

-- 8000, 3200, 6000
SELECT first_name, salary
FROM employees
WHERE salary = ANY(8000, 3200, 6000);

-- IN, NOT IN

SELECT first_name, salary
FROM employees
WHERE salary IN(8000, 3200, 6000);

-- NOT IN 
SELECT first_name, salary
FROM employees
WHERE salary NOT IN(8000, 3200, 6000);

SELECT first_name, salary
FROM employees
WHERE first_name IN('Julia', 'John');

-- exists 
-- 자바쪽에선 사용 빈도순이 낮으나 DB개발자에선 높다
-- 0과 1로 판단한다. 
-- 있을경우 1 없을경우 0

SELECT first_name, job_id
FROM employees e
WHERE EXISTS (SELECT '치킨' FROM dual WHERE e.job_id = 'IT_PROG');


SELECT first_name, job_id
FROM employees e
WHERE EXISTS (SELECT '삼겹살' FROM dual WHERE job_id = 'IT_PROG');

-- BETWEEN 범위 연산자
-- salary >= 3200 AND salary < 9000
-- salary BETWEEN 3200 AND 9000

SELECT
    *
FROM employees
WHERE salary BETWEEN 3200 AND 9000;
--WHERE salary >= 3200 AND salary < 9000;

SELECT
    *
FROM employees
WHERE salary NOT BETWEEN 3200 AND 9000;
--WHERE salary < 3200 OR salary > 9000;


-- LIKE 중요하다 
SELECT first_name, last_name
FROM employees
WHERE first_name LIKE 'G_ra_d'; -- _한문자

SELECT
    first_name, last_name
FROM employees
WHERE first_name LIKE 'K%y'; -- % 글자수의 제한이 없다

--중간에 Al이 들어간사람은 전부 나온다
SELECT
    first_name, last_Name
FROM employees
WHERE first_name LIKE '%Al%';

--중간에 Al이 들어간사람은 전부 나온다
SELECT
    first_name, last_Name
FROM employees
WHERE first_name LIKE '%e%';

--06년도 01월 입사한 사람들이 전부 나온다
SELECT first_name, hire_date
FROM employees
WHERE hire_date LIKE '06/01%';

 

hr 연습

 

SELECT
    *
FROM employees;

--EMPLOYEES 테이블에서 급여가 3000이상인 사원의 정보를 사원번호,
-- 이름, 담당업무, 급여를 출력하라.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary > 3000;

-- EMPLOYEES 테이블에서 담당 업무가 Manager인 사원의 정보를
-- 사원번호, 성명, 담당업무, 급여, 부서번호를 출력하라. (Manager == ST_MAN)

SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE job_id = 'ST_MAN';

-- EMPLOYEES 테이블에서 입사일자가 1982년 1월 1일 이후에 입사한
-- 사원의 정보를 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라.

SELECT employee_id, last_name, job_id, hire_date, department_id
FROM employees
WHERE hire_date > '1982/01/01';


-- EMPLOYEES 테이블에서 급여가 3000에서 5000사이의 정보를 성명,
-- 담당업무, 급여, 부서번호를 출력하라.(AND만 사용, BETWEEN도 함께 사용)

SELECT job_id, salary, department_id
FROM employees
WHERE salary > 3000 AND salary < 5000;

SELECT job_id, salary, department_id
FROM employees
WHERE salary BETWEEN 3000 AND 5000;

--EMPLOYEES 테이블에서 사원번호가 145,152,203인 사원의 정보를
--사원번호, 성명, 담당업무, 급여, 입사일자를 출력하라 (IN만 사용, OR만 사용)

SELECT employee_id, last_name, job_id, salary, hire_date
FROM employees 
WHERE employee_id IN(145, 152, 203);

SELECT employee_id, last_name, job_id, salary, hire_date
FROM employees 
WHERE employee_id = 145 OR employee_id = 152 OR employee_id = 203;

-- EMPLOYEES 테이블에서 입사일자가 05년도에 입사한 사원의 정보를
-- 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라.(LIKE 사용)

SELECT employee_id, job_id, salary, hire_date, department_id
FROM employees
WHERE hire_date LIKE '05/%';

-- EMPLOYEES 테이블에서 보너스가 NULL인 사원의 정보를 사원번호,
-- 성명, 담당업무, 급여, 입사일자, 보너스, 부서번호를 출력하라. (IS 사용)
SELECT employee_id, last_name, job_id, salary, hire_date, commission_pct, department_id
FROM employees
WHERE commission_pct IS NULL;

-- EMPLOYEES 테이블에서 급여가 1100이상이고 JOB이 Manager인
-- 사원의 정보를 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라 (AND사용, ST_MAN)

SELECT employee_id, last_name, job_id, salary, hire_date, department_id
FROM employees
WHERE salary > 2000 AND job_id = 'ST_MAN';

--EMPLOYEES 테이블에서 급여가 10000이상이거나 JOB이 Manager인
--사원의 정보를 사원번호, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하라 (OR사용, ST_MAN)

SELECT employee_id, last_name, job_id, salary, hire_date, department_id
FROM employees
WHERE salary > 10000 OR job_id = 'ST_MAN';

-- EMPLOYEES 테이블에서 급여가 JOB이 ST_MAN, SA_MAN, SA_REP
-- 가 아닌 사원의 정보를 사원번호, 성명, 담당업무, 급여, 부서번호를 출력하라 (NOT IN 사용)

SELECT employee_id, last_name, job_id, salary, department_id
FROM employees
WHERE job_id NOT IN('ST_MAN', 'SA_MAN', 'SA_REP');

-- 업무가 PRESIDENT이고 급여가 12000이상이거나 업무가
-- SALESMAN인 사원의 정보를 사원번호, 이름, 업무, 급여를 출력하라.

SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary > 12000 OR job_id = 'SA_MAN';

-- 업무가 PRESIDENT또는 SALESMAN이고 급여가 12000이상이거나
-- 사원의 정보를 사원번호, 이름, 업무, 급여를 출력하라.

SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE job_id ='AD_PRES' OR (job_id = 'SA_MAN' AND salary > 12000); 

 

 

SCott 연습 

 

-- SCOTT

SELECT
    *
FROM emp;

-- emp 테이블에서 사원번호가 7698 인 사원의 이름, 업무, 급여를 출력하시오.

SELECT empno, ename, job, sal
FROM emp
WHERE empno = 7698;

-- emp 테이블에서 사원이름이 SMITH인 사람의 이름과 월급, 부서번호를 구하시오.
SELECT ename, sal, deptno
FROM emp
WHERE ename = 'SMITH';

-- 월급이 2500이상 3500미만인 사원의 이름, 입사일, 월급을 구하시오.

SELECT ename, hiredate, sal
FROM emp
WHERE sal BETWEEN 2500 AND 3500;

-- 급여가 2000에서 3000사이에 포함되지 않는 사원의 이름, 업무, 급여를 출력하시오.

SELECT ename, hiredate, sal
FROM emp
WHERE sal NOT BETWEEN 2500 AND 3500;

-- 81년05월01일과 81년12월03일 사이에 입사한 사원의 이름, 급여, 입사일을 출력하시오.

SELECT ename, hiredate, sal
FROM emp
WHERE hiredate BETWEEN  '81/05/01' AND '81/12/03';

 -- emp테이블에서 사원번호가 7566,7782,7934인 사원을 제외한 사람들의 사원번호,이름, 월급을 출력하시오.
 SELECT empno, ename, sal
 FROM emp
 WHERE empno NOT IN (7566, 7782, 7934);
 
-- 부서번호 30(deptno)에서 근무하며 -- 월 2,000달러 이하를 받는 
-- 81년05월01일 이전에 입사한 사원의 이름, 급여, 부서번호, 입사일을 출력하시오.

SELECT ename, sal, deptno, hiredate
FROM emp
WHERE deptno = 30 AND sal < 2000 AND hiredate < '81/05/01';

--  emp테이블에서 급여가 2,000와 5,000 사이고 부서번호가 10 또는 30인 사원의 이름과 급여,부서번호를 나열하시오.
SELECT ename, sal, deptno
FROM emp
WHERE (sal BETWEEN 2000 AND 5000) AND (deptno IN (10, 30));

-- 업무가 SALESMAN 또는 MANAGER이면서 급여가 1,600, 2,975 또는 2,850이 아닌
-- 모든 사원의 이름, 업무 및 급여를 표시하시오

SELECT ename, job, sal
FROM emp
WHERE job IN('SALESMAN', 'MANAGER') AND sal IN(1600, 2975) OR sal NOT IN(2850);

-- emp테이블에서 사원이름 중 S가 포함되지 않은 사람들 중 
-- 부서번호가 20인 사원들의 이름과 부서번호를 출력하시오.

SELECT ename, deptno
FROM emp
WHERE ename NOT LIKE('%s%') AND deptno = 20;

-- emp테이블에서 이름에 A와 E가 있는 모든 사원의 이름을 표시하시오.

SELECT ename, deptno
FROM emp
WHERE ename LIKE('%A%') AND ename LIKE('%E%');

-- emp테이블에서 관리자가 없는 모든 사원의 이름과 업무를 표시하시오.

SELECT ename, job
FROM emp
WHERE MGR IS NOT NULL;

-- emp테이블에서 커미션 항목이 입력된 사원들의 이름과 급여, 커미션을 구하시오.

SELECT ename, sal, comm
FROM emp
WHERE COMM IS NOT NULL;

'Oracle > Oracle 기초' 카테고리의 다른 글

Oracle Select 활용및 JOIN  (0) 2019.12.15
oracle Select 활용 3(Group by, Order by)  (0) 2019.12.15
SELECT문 활용 01  (0) 2019.12.12
오라클 기초 공부 - 함수 부분  (0) 2019.12.11
오라클 기초 공부하기 - 자료형  (0) 2019.12.11