jjhim531 2024. 8. 10. 08:18
반응형

Q. 연봉이 5000만원 이상인 사원들의 사원명, 급여, 연봉(별칭->연봉), 부서코드 조회

SELECT
    emp_name,
    salary,
    salary * 12 AS "연봉",
    dept_code
FROM
    employee
WHERE
    salary * 12 > 50000000;


* 실행순서 :  FROM -> WHERE -> SELECT

Q. 직급코드가 'J3'가 아닌 사원들의 사번,사원명, 직급코드, 퇴사여부 조회

SELECT
    emp_id,
    emp_name,
    job_code,
    ent_yn
FROM
    employee
WHERE
    job_code != 'J3';



-Q. 급여가 350만원 이상 600만원 이하인 모든사원의 사원명, 사번, 급여조회

SELECT
    emp_name,
    emp_id,
    salary
FROM
    employee
WHERE
        salary >= 3500000
    AND salary <= 6000000;


Q. 급여가 350만원 미만, 600만원 초과인 모든 사원의 사원명, 사번, 급여조회

SELECT
    emp_name,
    emp_id,
    salary
FROM
    employee
WHERE
    salary NOT BETWEEN 3500000 AND 6000000;
-- = WHERE SALARY < 3500000 OR SALARY > 6000000;


* NOT은 SALARY 앞 혹은 뒤 위치는 상관없다.

Q. 입사일이 '90/01/01' ~ '01/01/01' 사원들을 전체조회

SELECT
    *
FROM
    employee
WHERE
    hire_date BETWEEN '90/01/01' AND '01/01/01';
-- = WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01';

 

Q. EMPLOYEE테이블에 DEPT_CODE가 D9이거나 D5인 사원 중 고용일이 02년 1월 1일보다 빠른 사원의 이름, 부서코드, 고용일 조회 

SELECT
    emp_name,
    dept_code,
    hire_date
FROM
    employee
WHERE
        hire_date < '02/01/01'
    AND ( dept_code = 'D9'
          OR dept_code = 'D5' );

Q.사원들중 성이 전씨인 사원의 사원명, 급여, 입사일 조회

SELECT
    emp_name,
    salary,
    hire_date
FROM
    employee
WHERE
    emp_name LIKE '전%';


Q. 사원들 중 이름이 나라인 사원의 사원명, 급여, 입사일 조회

SELECT
    emp_name,
    salary,
    hire_date
FROM
    employee
WHERE
    emp_name LIKE '%나라';


Q. 사원들 중에서 이름에 '하'라는 글자가 포함된 사원의 이름, 전화번호 출력

SELECT
    emp_name,
    phone
FROM
    employee
WHERE
    emp_name LIKE '%하%';


Q. 사원들 중에서 이름에 중간에 '하'라는 글자가 포함된 사원의 이름, 전화번호 출력

SELECT
    emp_name,
    phone
FROM
    employee
WHERE
    emp_name LIKE '_하_';



Q. 전화번호의 3번째자리가 1인 사원들의 사번, 사원명, 전화번호 조회

SELECT
    emp_id,
    emp_name,
    phone
FROM
    employee
WHERE
    phone LIKE '__1%';


Q. 이메일 중 _앞글자가 3글자인 사원들의 사번, 이름, 이메일 조회

SELECT
    emp_id,
    emp_name,
    email
FROM
    employee
--WHERE EMAIL LIKE '____%'; -> 와일드카드 문자때문에 정상출력이 되지않는다.
--와일드카드문자와 일반문자를 구분해줘야한다.
--데이터값으로 취급하고싶은 와일드카드 문자앞에 나만의 탈출문자를 제시해서 탈출시켜주면된다.
--ESCAPE OPTION을 등록해서 사용
WHERE
    email LIKE '___/_%' ESCAPE '/';


Q. 이름이 '연'으로 끝나는 사원들의 사원명, 입사일 조회

SELECT
    emp_name,
    hire_date
FROM
    employee
WHERE
    emp_name LIKE '%연';


Q. 전화번호 처음 3자리가 010이 아닌 사원들의 사원명, 전화번호 조회

SELECT
    emp_name,
    phone
FROM
    employee
WHERE
    NOT phone LIKE '010%';


Q. 이름에 '하'가 포함되어있고 급여가 240만원이상인 사원들의 사원명, 급여 조회

SELECT
    emp_name,
    salary
FROM
    employee
WHERE
    emp_name LIKE '%하%'
    AND salary >= 2400000;

Q. EMPLOYEE테이블에서 사원명, 주민번호 조회 (단, 주민번호는 생년월일만 보이게 하고, '-'다음 값은 '*'로 바꾸기) 

SELECT
    emp_name,
    rpad(substr(emp_no, 1, 7), 14, '*')
FROM
    employee;

Q. EMPLOYEE테이블에서 사원명, 입사일-오늘, 오늘-입사일 조회

(단, 각 별칭은 근무일수1, 근무일수2가 되도록 하고 모두 정수(내림), 양수가 되도록 처리

SELECT
    emp_name,
    floor(abs(hire_date - sysdate)) AS "근무일수1",
    floor(abs(sysdate - hire_date)) AS "근무일수2"
FROM
    employee;

Q. 사수가 없고 부서배치도 받지않은 사원들의 사원명, 사번, 부서코드 조회

SELECT
    emp_name,
    emp_id,
    dept_code
FROM
    employee
WHERE
    manager_id IS NULL
    AND dept_code IS NULL;



Q 연봉(보너스 미포함)이 3천만원 이상이고 보너스를 받지 않는 사원들의 사번,사원명, 급여, 보너스 조회

SELECT
    emp_id,
    emp_name,
    salary,
    bonus
FROM
    employee
WHERE
        ( salary * 12 ) >= 30000000
    AND bonus IS NULL;



Q 입사일이 '95/01/01' 이상이고 부서배치를 받지않은 사원들의 사번, 사원명, 입사일, 부서코드 조회

SELECT
    emp_id,
    emp_name,
    hire_date,
    dept_code
FROM
    employee
WHERE
        hire_date >= '95/01/01'
    AND dept_code IS NULL;



Q . 급여가 200만원 이상이고 500만원 이하인 사원 중에서 입사일이 '01/01/01'이상이고 보너스를 받지 않은 사원들의 사번, 사원명, 급여, 입사일, 보너스 조회

SELECT
    emp_id,
    emp_name,
    salary,
    hire_date,
    bonus
FROM
    employee
WHERE
    salary BETWEEN 2000000 AND 5000000
    AND ( hire_date >= '01/01/01' )
    AND bonus IS NULL;



Q. 보너스를 포함 연봉이 NULL이 아니고 이름에 '하'가 포함된 사원들의 사번, 사원명, 급여, 보너스포함 연봉 조회

SELECT
    emp_id,
    emp_name,
    salary,
    ( salary + ( salary * bonus ) ) * 12
FROM
    employee
WHERE
    ( ( salary + ( salary * bonus ) ) * 12 ) IS NOT NULL
    AND emp_name LIKE '%하%';

Q. EMPLOYEE테이블에서 사번이 홀수인 직원들의 정보 모두 조회

SELECT
    *
FROM
    employee
WHERE
    mod(emp_id, 2) = 1; -- 자동형변환 해줌
--WHERE MOD(TO_NUMBER(EMP_ID), 2) = 1;

Q. EMPLOYEE테이블에서 근무 년수가 20년 이상인 직원 정보 조회 

SELECT
    *
FROM
    employee
--WHERE MONTHS_BETWEEN(SYSDATE, HIRE_DATE) > 240;
WHERE
    add_months(hire_date, 240) < sysdate;

Q. EMPLOYEE 테이블에서 사원명, 급여 조회 (단, 급여는 '\9,000,000' 형식으로 표시) 

SELECT
    emp_name,
    to_char(salary, 'L99,999,999')
FROM
    employee;

Q. EMPLOYEE테이블에서 직원 명, 부서코드, 생년월일, 나이(만) 조회 
(단, 생년월일은 주민번호에서 추출해서 00년 00월 00일로 출력되게 하며  나이는 주민번호에서 출력해서 날짜데이터로 변환한 다음 계산) 

SELECT
    emp_name,
    dept_code,
    substr(emp_no, 1, 2)
    || '년'
    || substr(emp_no, 3, 2)
    || '월'
    || substr(emp_no, 5, 2)
    || '일' AS 생일,
    EXTRACT(YEAR FROM sysdate) -
    CASE
        WHEN substr(emp_no, 1, 2) >= '50' THEN
                1900 + to_number(substr(emp_no, 1, 2))
        ELSE
            2000 + to_number(substr(emp_no, 1, 2))
    END
FROM
    employee;

Q. EMPLOYEE테이블에서 부서코드가 D5, D6, D9인 사원만 조회하되 D5면 총무부, D6면 기획부, D9면 영업부로 처리 
(단, 부서코드 오름차순으로 정렬) 

SELECT
    emp_id,
    emp_name,
    dept_code,
    decode(dept_code, 'D5', '총무부', 'D6', '기획부',
           'D9', '영업부')
FROM
    employee
WHERE
    dept_code IN ( 'D5', 'D6', 'D9' )
ORDER BY
    dept_code;

Q. EMPLOYEE테이블에서 사번이 201번인 사원의 사원명, 주민번호 앞자리, 주민번호 뒷자리,  
주민번호 앞자리와 뒷자리의 합 조회 

SELECT
    emp_name,
    substr(emp_no, 1, 6) AS "앞자리",
    substr(emp_no, 8)    AS "뒷자리",
    substr(emp_no, 1, 6) + substr(emp_no, 8)
FROM
    employee
WHERE
    emp_id = 201;

Q. EMPLOYEE테이블에서 직원들의 입사일로부터 년도만 가지고 각 년도별 입사 인원수 조회 
--전체 직원 수, 2001년, 2002년, 2003년, 2004년

SELECT
    COUNT(*)                                                   AS "전체직원수",
    COUNT(decode(EXTRACT(YEAR FROM hire_date), 2001, 1, NULL)) AS "2001년",
    COUNT(decode(EXTRACT(YEAR FROM hire_date), 2002, 1, NULL)) AS "2002년",
    COUNT(decode(EXTRACT(YEAR FROM hire_date), 2003, 1, NULL)) AS "2003년",
    COUNT(decode(EXTRACT(YEAR FROM hire_date), 2004, 1, NULL)) AS "2004년"
FROM
    employee;
728x90
반응형