-- 문제4) 사원의 이름(ENAME), 급여(SALARY), 연간 총수입을
-- 총 수입이 많은 것부터 작은 순으로 출력하세요.(내림정렬)
-- ( 연간 총수입은 월급에 12를 곱한 후 $100의 상여금을 더해서 계산하세요 )
-- 힌트) 월급 * 12 + 100 AS "연간 총수입"
-- 사원테이블 : EMPLOYEE
SELECT ENAME, SALARY * 12 + 100 AS "연간 총수입"
FROM EMPLOYEE;
-- 문제5) 급여가(SALARY) 2000을 넘는 사원의 이름과(ENAME) 급여를
-- 급여가 많은 것부터 작은 순으로 출력하세요(내림차순)
-- 사원테이블 : EMPLOYEE
-- 힌트) 급여 > 2000
--SQL 명령문 실행 시점 : ORDER BY(재일 마지막에 실행됨)
SELECT ENAME, SALARY
FROM EMPLOYEE
WHERE SALARY > 2000 ORDER BY SALARY DESC;
-- 문제6) 사원번호가(ENO) 7788 인 사원의 이름과(ENAME)
-- 부서번호를(DNO) 출력하세요
-- 사원테이블 : EMPLOYEE
SELECT ENAME, DNO
FROM EMPLOYEE
WHERE ENO = 7788;
-- 문제7) 급여가(SALARY) 2000에서 3000 사이에 포함되지 않는
-- 사원의 이름과(ENAME) 급여를 출력하세요.
-- 힌트) 컬럼명 NOT BETWEEN A AND B
-- 사원테이블 : EMPLOYEE
SELECT ENAME, SALARY
FROM EMPLOYEE
WHERE SALARY NOT BETWEEN 2000 AND 3000;
-- 문제 8) 1981년 2월 20일 부터 1981년 5월 1일 사이에 입사한 사원의
-- 이름(ENAME), 담당 업무(JOB), 입사일(HIREDATE)을 출력하세요
-- 힌트) 컬럼명 BETWEEN A AND B
-- 사원테이블 : EMPLOYEE
SELECT ENAME, JOB, HIREDATE
FROM EMPLOYEE
WHERE HIREDATE BETWEEN '81/02/20' AND '81/05/01';
-- 문제 9)부서번호(DNO)가 20 및 30에 속한 (이거나,또는 OR, IN)
-- 사원의 이름(ENAME)과 부서번호(DNO)를 출력하되
-- 이름을 기준으로 내림차순 출력하세요(정렬)
-- 힌트) 컬럼명 IN (A, B)
-- 사원테이블 : EMPLOYEE
SELECT DNO, ENAME
FROM EMPLOYEE
WHERE DNO IN (20, 30) ORDER BY ENAME DESC;
-- 문제 10) 사원의 급여(SALARY)가 2000 에서 3000 사이에 포함되고 (1번이고)
-- 부서번호(DNO)가 20 또는 30인 (2번)
-- 사원의 이름(ENAME), 급여와(SALARY) 부서번호를(DNO) 출력하되
-- 이름순(오름차순)으로 출력하세요
-- 사원테이블 : EMPLOYEE
SELECT DNO, ENAME, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 2000 AND 3000 AND DNO IN (20, 30)
ORDER BY ENAME ASC;
-- 문제 11) 1981년도에 입사한 사원의 이름(ENAME)과
-- 입사일(HIREDATE)을 출력하세요
-- 단, LIKE 연산자와 와일드카드(%, _)를 사용하세요
-- 힌트 : 컬럼명 LIKE '81%'
-- 사원테이블 : EMPLOYEE
SELECT ENAME, HIREDATE
FROM EMPLOYEE
WHERE HIREDATE LIKE '81%';
-- 문제 12) 관리자가(MANAGER) 없는 사원의 이름(ENAME)과
-- 담당 업무를(JOB) 출력하세요
-- 힌트) 관리자가(MANAGER) 없는 사원 : MANAGER 컬럼에 NULL로 표시됨
-- 사원테이블 : EMPLOYEE
-- 직위 컬럼 : JOB
SELECT ENAME, JOB
FROM EMPLOYEE
WHERE MANAGER IS NULL;
-- 문제 13) COMMISSION(상여금)을 받을 수 있는 자격이 되는 (COMMISSION NULL 이 아닌사람)
-- 사원의 이름(ENAME), 급여(SALARY), 상여금(COMMISSION)을 출력하되
-- 급여 및 커미션을 기준으로 내림차순 정렬하여 출력하세요
-- 사원테이블 : EMPLOYEE
-- 힌트) 컬럼명 IS NOT NULL
SELECT COMMISSION, ENAME, SALARY
FROM EMPLOYEE
WHERE COMMISSION IS NOT NULL ORDER BY COMMISSION DESC, SALARY DESC;
-- 문제 14) 이름(ENAME)의 세번째 문자가 R인 사원의 이름을 표시하세요.
-- 사원테이블 : EMPLOYEE
-- 힌트) 컬럼명 LIKE '__문자%'
SELECT ENAME
FROM EMPLOYEE
WHERE ENAME LIKE '__R%';
-- 문제 15) 이름에(ENAME) A와(1번조건) E를(2번조건) 모두 포함하고 있는(동시조건:교집합)
-- 사원의 이름을 표시하세요.
-- 사원 테이블 : EMPLOYEE
-- 힌트) WHERE 컬럼명 LIKE '%문자%'
-- AND 컬럼명 LIKE '%문자2%'
SELECT ENAME
FROM EMPLOYEE
WHERE ENAME LIKE '%A%'
AND ENAME LIKE '%E%';
-- 문제 16) 담당업무(JOB)가 사무원(CLERK) 또는 영업사원(SALESMAN)이면서(1번)
-- 급여가 $1600, $950 또는 $1300이 아닌 (2번)
-- 사원의 이름(ENAME), 담당업무(JOB), 급여(SALARY)를 출력하세요
-- 힌트) WHERE 컬럼명 IN (A,B) AND 컬럼명2 NOT IN(A,B,C)
-- 사원 테이블 : EMPLOYEE
SELECT JOB, ENAME, SALARY
FROM EMPLOYEE
WHERE JOB IN ('CLERK', 'SALESMAN') AND SALARY NOT IN(1600, 950, 1300);
-- 문제 17) COMMISSION(상여금)이 $500 이상인
-- 사원의 이름(ENAME)과 급여(SALARY) 및 COMMISSION(상여금)을 출력하세요
-- 사원 테이블 : EMPLOYEE
-- 힌트) 컬럼명 >= 500
SELECT COMMISSION, ENAME, SALARY
FROM EMPLOYEE
WHERE COMMISSION >=500;
-- 문제 18) 사원테이블에서(EMPLOYEE) 사원 이름이(ENAME) S 로 끝나는 사원 데이터를
-- 모두 출력하는 SQL 문을 작성해 보세요
-- 힌트) 컬럼명 LIKE '%문자'
SELECT ENAME
FROM EMPLOYEE
WHERE ENAME LIKE '%S';
-- 문제 19) 사원 테이블을(EMPLOYEE) 사용하여 30번 부서에서(DNO) 근무하고 있는 사원 중에(조건1)
-- 직책이(JOB) SALESMAN 인 사원의(조건2) 사원번호(ENO), 이름(ENAME), 직책(JOB),
-- 급여(SALARY), 부서번호를(DNO) 출력하는 SQL 문을 작성해 보세요.
-- 힌트) 조건 2개 AND 연결
SELECT DNO,JOB,ENO,ENAME
FROM EMPLOYEE
WHERE DNO=30
AND JOB = 'SALESMAN';
-- 문제 20) 사원 테이블을(EMPLOYEE) 사용하여 20번, 30번 부서에(DNO) 근무하고 있는 사원 중(조건1)
-- 급여가(SALARY) 2000 초과인 사원을(조건2) 조회하세요
-- 힌트) 컬럼 IN (A, B) AND 조건2
SELECT * FROM EMPLOYEE
WHERE DNO IN (20, 30) AND SALARY > 2000;
-- 문제 21) 사원이름에(ENAME) E 가 포함되어 있는(조건1) 30번 부서의(DNO) 사원 중(조건2) 급여가(SALARY)
-- 1000 ~ 2000 사이가 아닌(조건3) 사원이름(ENAME), 사원번호(ENO), 급여(SALARY), 부서번호를(DNO) 출력하는
-- SQL 문을 작성해 보세요
-- 힌트) 조건 3개 AND : 1) LIKE 사용 2) 컬럼 = 30 3) 컬럼 NOT BETWEEN A AND B
SELECT ENAME, DNO, SALARY, ENO
FROM EMPLOYEE
WHERE ENAME LIKE '%E%'
AND DNO =30
AND SALARY NOT BETWEEN 1000 AND 2000;
-- 문제 22) 상여금이(COMMISSION) 없고(조건1) 매니저가(MANAGER) 있고(조건2)
-- 직책이(JOB) MANAGER , CLERK 인 사원 중에서(조건3)
-- 사원이름의 두번째 글자가 L 이 아닌 사원의(조건4) 정보를 출력하는 SQL문을 작성하세요
-- 힌트) 상여금이(COMMISSION) 없고 : (상여금이 NULL 인 사원)
-- 힌트) 조건 4개 AND : 1) 상여금 IS NULL 2) 관리자 IS NOT NULL 3) 컬럼 IN (A,B) 4) 컬럼 NOT LIKE '_문자%'
SELECT * FROM EMPLOYEE
WHERE COMMISSION IS NULL
AND MANAGER IS NOT NULL
AND JOB IN ('MANAGER', 'CLERK')
AND ENAME NOT LIKE '_L%';
-- 함수 : 어떤 기능을 나타낸것, 예) 최대값 구해주기 등
-- 1) 문자 함수
-- 1-1) 대/소문자/첫글자대문자 변환 함수
-- 사용법 : UPPER('문자열'), UPPER(컬럼명) - 대문자
-- LOWER('문자열'), LOWER(컬럼명) - 소문자
-- INITCAP('문자열'), INITCAP(컬럼명) - 첫글자대문자
SELECT 'Oracle mania'
, UPPER('Oracle mania') AS 대문자
, LOWER('Oracle mania') AS 소문자
, INITCAP('Oracle mania') AS 첫글자대문자
FROM DUAL;
--간단연습 1: 대문자/소문자로 지시된 문자열을 바꾸세요
-- 'Java'
SELECT 'Java'
,UPPER('Java') AS 대문자
,LOWER('Java') AS 소문자
FROM DUAL;
-- 간단연습 2: 사원테이블에서(EMPLOYEE) 사원명(ENAME) 의 값들을 소문자로 출력하고,
-- 직위(JOB) 은 첫글자만 대문자로 출력하세요
-- 힌트) SELECT UPPER(컬럼명) FROM 테이블명 => 대문자로 바뀜
SELECT LOWER (ENAME),INITCAP(JOB)
FROM EMPLOYEE;
-- 1-2) 문자열의 길이를 출력하는 함수 : LENGTH('문자열')
SELECT LENGTH ('Oracle mania')
,LENGTH ('오라클 매니아')
FROM DUAL;
-- 간단연습 3: 사원테이블에서(EMPLOYEE) 사원명(ENAME) 의 각 길이를 화면에 출력하세요
SELECT LENGTH (ENAME)
FROM EMPLOYEE;
-- 1-3) 문자 조작 함수 : 문자열 붙이기 => ||
-- 사용법 : '문자열' || '문자열2' , 컬럼 || 컬럼2
SELECT 'Oracle' || 'Mania' FROM DUAL;
-- 간단연습 4 : 'Java', 'Spring' 2개의 문자열을 붙여서 화면에 출력하세요
SELECT 'Java' || 'Spring' FROM DUAL;
-- 1-4문자열 자르기
-- 사용법: SUBSTR('문자열', 시작위치, 자를개수)
-- SUBSTR 인덱스번호 시작 위치가 음수면 뒤에서부터 시작한다
--인덱스번호 : 1부터 시작함
SELECT SUBSTR ('Oracle mania', 4, 3) FROM DUAL;
-- 간단연습 5: 'Java' 문자열에서 2번 부터 2개를 잘라서 화면에 출력하세요
SELECT SUBSTR ('JAVA', 2, 2) FROM DUAL;
-- 1-5) 대상 문자를 찾아서 인덱스번호(방번호)를 출력하는 함수 :
--사용법 : INSTR('문자열', '찾을문자'), INSTR(컬럼명, '찾을문자')
SELECT INSTR('Oracle mania', 'a') FROM DUAL;
-- 간단연습 6: '오라클 매니아' 에서 '라'를 찾아서 방번호를 출력하세요
SELECT INSTR ('오라클 매니아', '라') FROM DUAL;
-- 1-6) LPAD / RPAD 함수 :
-- 컬럼에 어떤 문자를 왼쪽/오른쪽에 붙이기 함수
-- 사용법) 왼쪽 채움 : LPAD (컬럼명, 고정자리수, '채울문자')
SELECT LPAD(SALARY ,10 , '') FROM EMPLOYEE;
-- 오른쪽채움
SELECT RPAD(SALARY , 10, '') FROM EMPLOYEE;
-- 1-7) 문자열의 양옆에 공백을 제거하는 함수 : LTRIM/RTRIM/TRIM
SELECT LTRIM(' Oracle mania ')
, RTRIM(' Oracle mania ')
, TRIM(' Oracle mania ')