Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- oracle
- cursor문
- 제네릭
- 생성자오버로드
- 정수형타입
- 인터페이스
- 집합_SET
- 환경설정
- 사용자예외클래스생성
- 다형성
- NestedFor
- exception
- 한국건설관리시스템
- abstract
- 컬렉션프레임워크
- 객체 비교
- 대덕인재개발원
- Java
- 어윈 사용법
- 예외미루기
- 오라클
- 자동차수리시스템
- EnhancedFor
- 컬렉션 타입
- 참조형변수
- GRANT VIEW
- 예외처리
- 추상메서드
- 메소드오버로딩
- 자바
Archives
- Today
- Total
거니의 velog
230801 SQL 강의 본문
--조건에 따른 다중 ELSIF
SET SERVEROUTPUT ON; -- 출력옵션으로 ON
DECLARE
v_num NUMBER := 67;
BEGIN
DBMS_OUTPUT.ENABLE;
IF v_num > 90 THEN
DBMS_OUTPUT.PUT_LINE('수');
ELSIF v_num > 80 THEN
DBMS_OUTPUT.PUT_LINE('우');
ELSIF v_num > 70 THEN
DBMS_OUTPUT.PUT_LINE('미');
ELSE
DBMS_OUTPUT.PUT_LINE('분발합시다.');
END IF;
END;
/
--SELECT INTO 로 변수에 값을 할당
SELECT * FROM PROD;
DECLARE
v_avg_sale PROD.PROD_SALE%TYPE; --NUMBER(10,0)
v_sale NUMBER := 500000;
BEGIN
DBMS_OUTPUT.ENABLE;
SELECT AVG(prod_sale) INTO v_avg_sale FROM prod;
IF v_sale < v_avg_sale THEN
DBMS_OUTPUT.PUT_LINE( '평균 단가가 500000 초과입니다.');
ELSE
DBMS_OUTPUT.PUT_LINE( '평균 단가가 500000 이하 입니다.');
END IF;
END;
/ -- CTRL+ENTER 를 쓰기 위한 구분 표시
--회원테이블에서 아이디가 'e001' 인 회원의 마일리지가 5000을 넘으면
--'VIP 회원' 그렇지 않다면 '일반회원'으로 출력하시오. (회원이름, 마일리지 포함)
SELECT * FROM MEMBER;
DECLARE
V_MEM_ID VARCHAR2(10) := 'e001';
V_MEM_MILEAGE MEMBER.MEM_MILEAGE%TYPE;
V_MEM_NAME MEMBER.MEM_NAME%TYPE;
V_MILE NUMBER := 5000;
BEGIN
-- DBMS_OUTPUT.ENABLE;
SELECT MEM_MILEAGE, MEM_NAME
INTO V_MEM_MILEAGE, V_MEM_NAME
FROM MEMBER
WHERE MEM_ID = V_MEM_ID;
IF V_MILE < V_MEM_MILEAGE THEN
DBMS_OUTPUT.PUT_LINE('VIP 회원(' || V_MEM_NAME || ', ' || V_MEM_MILEAGE || ')');
ELSE
DBMS_OUTPUT.PUT_LINE('일반회원(' || V_MEM_NAME || ', ' || V_MEM_MILEAGE || ')');
END IF;
END;
/
--SQL 에서 사용하는 CASE 문과 동일하다.
--단, 차이점은 END CASE 로 마지막을 지정해야 한다.
DECLARE
V_NUM NUMBER := 77;
BEGIN
V_NUM := TRUNC(V_NUM / 10);
CASE V_NUM
WHEN 10 THEN
DBMS_OUTPUT.PUT_LINE('수' || '(' || V_NUM || ')');
WHEN 9 THEN
DBMS_OUTPUT.PUT_LINE('우' || '(' || V_NUM || ')');
WHEN 8 THEN
DBMS_OUTPUT.PUT_LINE('미' || '(' || V_NUM || ')');
WHEN 7 THEN
DBMS_OUTPUT.PUT_LINE('양' || '(' || V_NUM || ')');
ELSE
DBMS_OUTPUT.PUT_LINE('분발합시다');
END CASE;
END;
/
-- 부하직원이 있는 사원의 이름을 표시하시오. (사원 번호가 매니저로 저장되어 있는 사람을 조회해야 함)
SELECT * FROM EMP;
SELECT DISTINCT(E.ENAME) 사원명
FROM EMP E, EMP E1
WHERE E.EMPNO = E1.MGR;
--김동혁과 동일한 부서에 속한 사원의 부서코드, 이름, 입사일을 표시하는 질의를 작성하시오.
--( 단 김동혁은 제외 )
SELECT * FROM EMP;
SELECT EMPNO
, DEPTNO
FROM EMP
WHERE ENAME = '김동혁';
SELECT E1.DEPTNO 부서코드
, E1.ENAME 이름
, E1.HIREDATE 입사일
FROM EMP E1,
(
SELECT DEPTNO
FROM EMP
WHERE ENAME = '김동혁'
)E2
WHERE E1.DEPTNO = E2.DEPTNO
AND E1.ENAME != '김동혁';
SELECT E1.DEPTNO 부서코드
, E1.ENAME 사원명
, E1.HIREDATE 입사일
FROM EMP E ,EMP E1
WHERE E.DEPTNO = E1.DEPTNO -- 김동혁 이 속한 부서
AND E.ENAME = '김동혁'
AND NOT E1.ENAME ='김동혁';
--급여가 평균 급여보다 많은 사원들의 사원 번호와 이름을 표시하되
--결과를 급여에 대해서 오름차순으로 정렬하시오.
SELECT * FROM EMP;
SELECT ROUND(AVG(SAL),0) FROM EMP;
SELECT EMPNO 사원번호
, ENAME 이름
, SAL 급여
FROM EMP
WHERE SAL > (SELECT ROUND(AVG(SAL),0) FROM EMP)
ORDER BY SAL;
--이름에 “국”이 포함된 사원과 같은 부서에서 일하는 사원의 사원 번호와 이름을 표시하시오.
SELECT * FROM EMP;
SELECT DEPTNO
FROM EMP
WHERE ENAME LIKE '%국%';
SELECT EMPNO 사원번호
, ENAME 이름
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO
FROM EMP
WHERE ENAME LIKE '%국%');
SELECT DISTINCT(E1.EMPNO) 사원번호
, E1.ENAME 사원명
FROM EMP E, EMP E1
WHERE E.DEPTNO = E1.DEPTNO
AND E.ENAME LIKE '%국%';
--부서위치가 서울인 사원의 이름과 부서번호 및 담당업무를 표시하시오.
SELECT * FROM EMP;
SELECT * FROM DEPT;
SELECT A.ENAME 사원이름
, A.DEPTNO 부서번호
, A.JOB 담당업무
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND B.LOC = '서울';
--김지완에게 보고하는 사원의 이름과 급여를 표시하시오.
SELECT * FROM EMP;
SELECT EMPNO FROM EMP WHERE ENAME = '김지완';
SELECT ENAME 사원이름
, SAL 급여
FROM EMP
WHERE MGR = (SELECT EMPNO FROM EMP WHERE ENAME = '김지완');
SELECT E1.ENAME 사원이름
, E1.SAL 급여
FROM EMP E, EMP E1
WHERE E.EMPNO = E1.MGR
AND E.ENAME ='김지완';
--조사부 부서의 사원에 대한 부서번호, 사원이름 및 담당 업무를 표시하시오.
SELECT * FROM EMP;
SELECT * FROM DEPT;
SELECT DEPTNO FROM DEPT WHERE DNAME='조사부';
SELECT DEPTNO 부서번호
, ENAME 사원이름
, JOB 담당업무
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME='조사부');
SELECT DEPT.DEPTNO 부서번호
, EMP.ENAME 사원명
, EMP.JOB 담당업무
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND DEPT.DNAME = '조사부';
--평균 월급보다 많은 급여를 받고 이름에 “우”가 포함된 사원과 같은 부서에서 근무하는 사원의 사원 번호, 이름, 급여를 표시하시오.
SELECT * FROM EMP;
SELECT ROUND(AVG(SAL)) FROM EMP;
SELECT EMPNO 사원번호
, ENAME 이름
, SAL 급여
FROM EMP
WHERE ENAME LIKE '%우%'
AND SAL > (SELECT ROUND(AVG(SAL)) FROM EMP);
--평균급여가 가장 적은 업무를 찾으시오.
SELECT * FROM EMP;
SELECT JOB
, ROUND(AVG(SAL))
FROM EMP
GROUP BY JOB
ORDER BY ROUND(AVG(SAL));
SELECT ASD 업무
FROM (
SELECT JOB ASD
, ROUND(AVG(SAL))
FROM EMP
GROUP BY JOB
ORDER BY ROUND(AVG(SAL))
)
WHERE ROWNUM = 1;
--담당업무가 관리자 인 사원이 소속된 부서와 동일한 부서의 사원을 표시하시오.
SELECT * FROM EMP;
SELECT DEPTNO
FROM EMP
WHERE JOB = '관리자';
SELECT A.ENAME 사원명
FROM EMP A,
(
SELECT DEPTNO
FROM EMP
WHERE JOB = '관리자'
) B
WHERE A.DEPTNO = B.DEPTNO;
'대덕인재개발원 > 대덕인재개발원_Oracle DB' 카테고리의 다른 글
230803 SQL 강의 (0) | 2023.08.03 |
---|---|
230802 SQL 강의 (0) | 2023.08.02 |
230731 SQL 강의 (0) | 2023.07.31 |
230728 SQL 강의 (0) | 2023.07.29 |
230727 SQL 강의 (0) | 2023.07.29 |